diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..7756350a2c67d0e3d37642c65031fe63689233da
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,111 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+# Mac OS
+.DS_Store
+
+# nextflow analysis folders/files
+pipeline_trace*.txt*
+.nextflow*.log*
+report*.html*
+timeline*.html*
+/workflow/output/*
+/work/*
+/.nextflow/*
diff --git a/.gitmodules b/.gitmodules
index 117189a66168e5062b04c602bff855f1574c44cd..d276d13927af91ff23ac10bebbead6fc8c69740d 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,6 +1,3 @@
-[submodule "workflow/external_repo"]
-	path = workflow/external_repo
-	url = https://git.biohpc.swmed.edu/s219741/astrocyte-atac-runner.git
 [submodule "workflow/external_repo/astrocyte-atac-runner"]
 	path = workflow/external_repo/astrocyte-atac-runner
 	url = https://git.biohpc.swmed.edu/s219741/astrocyte-atac-runner.git
diff --git a/astrocyte_pkg.yml b/astrocyte_pkg.yml
new file mode 100644
index 0000000000000000000000000000000000000000..da8cb77fc6ac9791ead218425c51215927c87d46
--- /dev/null
+++ b/astrocyte_pkg.yml
@@ -0,0 +1,149 @@
+#
+# Metadata for the ATAC-seq Source workflow
+#
+
+# -----------------------------------------------------------------------------
+# BASIC INFORMATION
+# -----------------------------------------------------------------------------
+
+# A unique identifier for the workflow package, text/underscores only
+name: 'atac-seq-source'
+# Who wrote this?
+author: 'Achisha Saikia, Felix Perez, Peng Lian'
+# A contact email address for questions
+email: 'achisha.saikia@utsouthwestern.edu, felix.perez@utsouthwestern.edu, biohpc-help@utsouthwestern.edu'
+# A more informative title for the workflow package
+title: 'ATAC-seq Source Workflow"
+# A summary of the workflow package in plain text
+description: |
+  # TODO: Please describe the workflow. (AS)
+
+#### New Features in Astrocyte 0.4.0 and above ####
+citation: |
+  Please cite individual programs and versions of pipeline
+  used, and the overall pipeline doi: 12.3456/zenodo.9876543.
+  # TODO: Review "individual programs".
+  Please cite in publications:
+  The oringal ATAC-seq pipeline was developed by the ENCODE team, and adapted to the Astrocyte platform by a collaboration between the Lee Lab in Bioinformatics at UT Southwestern Medical Center & BioHPC.
+  
+# The minimum Astrocyte version that requires to run this workflow. For old pipelines, which do not have this label 
+# a default value of 0.3.1 will be assigned automatically. A request of minimum version less than 0.4.0 will be ignored.
+minimum_astrocyte_version: '2.0.1'
+# The Nextflow version that requires to run this workflow.  For old pipelines, which do not have this label 
+# a default value of 0.31.0 will be assigned automatically. Please make sure the requested nextflow version is available
+# in the module list.
+nextflow_version: '22.04.5'
+# (Optional) The Nextflow config file to use for this workflow. If provided, the file should exist in workflow/configs
+nextflow_config: 'biohpc.config'
+# The container to use for this workflow, none/singularity. If omitted, the default value 'none' will be used.
+container: 'none'
+
+
+# -----------------------------------------------------------------------------
+# DOCUMENTATION
+# -----------------------------------------------------------------------------
+
+# A list of documentation files in .md format that should be viewable from the
+# web interface. These files are in the 'docs' subdirectory. The first file
+# listed will be used as a documentation index and is index.md by convention
+# To supply a title for documentation use a pair of [ 'filename', 'title' ]
+
+documentation_files:
+  - [ 'index.md', 'git Source Help' ]
+
+# -----------------------------------------------------------------------------
+# NEXTFLOW WORKFLOW CONFIGURATION
+# -----------------------------------------------------------------------------
+
+# Remember - The workflow file is always named 'workflow/main.nf'
+#            The workflow must publish all final output into $baseDir
+
+# A list of cluster environment modules that this workflow requires to run.
+# Specify versioned module names to ensure reproducability.
+workflow_modules:
+  - Test
+
+# A list of parameters used by the workflow, defining how to present them,
+# options etc in the web interface. For each parameter:
+#
+# REQUIRED INFORMATION
+#  id:         The name of the parameter in the NEXTFLOW workflow
+#  type:       The type of the parameter, one of:
+#                string      - A free-format string
+#                integer     - An integer
+#                real        - A real number
+#                file        - A single file from user data
+#                files       - One or more files from user data
+#                select      - A selection from a list of values
+#                multiselect - One or more selections from a list of values
+#  required:    true/false, must the parameter be entered/chosen?
+#  description: A user friendly description of the meaning of the parameter
+#
+# OPTIONAL INFORMATION
+#  default:   A default value for the parameter (optional)
+#  min:       Minimum value/characters/files for number/string/files types
+#  max:       Maxumum value/characters/files for number/string/files types
+#  regex:     A regular expression that describes valid entries / filenames
+#
+# SELECT TYPE
+#  choices:   A set of choices presented to the user for the parameter.
+#             Each choice is a pair of value and description, e.g.
+# 
+#             choices:
+#               - [ 'myval', 'The first option']
+#               - [ 'myval', 'The second option']
+#
+# NOTE - All parameters are passed to NEXTFLOW as strings... but they
+#        are validated by astrocyte using the information provided above
+
+workflow_parameters:
+
+  - id: input_json
+  # START HERE NEXT TIME
+    type: string
+    required: false
+    default: "A"
+    description: |
+      A parameter that need to be passed to the above command
+
+  - id: parameter2
+    type: string
+    required: false
+    default: "B"
+    description: |
+      A parameter that need to be passed to the above command
+
+  - id: parameter_nonopt
+    type: files
+    required: false
+    description: |
+      A non-optinal parameter that need to be passed to the above command
+
+# -----------------------------------------------------------------------------
+# SHINY APP CONFIGURATION
+# -----------------------------------------------------------------------------
+
+# Remember - The vizapp is always 'vizapp/server.R' 'vizapp/ui.R'
+#            The workflow must publish all final output into $baseDir
+
+# Name of the R module that the vizapp will run against
+# A containerized version is recommanded.
+vizapp_r_module: 'R/4.1.1-img'
+
+# List of any CRAN packages, not provided by the modules, that must be made
+# available to the vizapp
+vizapp_cran_packages:
+  - shiny
+  - shinyFiles
+  - plotly
+
+# # List of any Bioconductor packages, not provided by the modules, that must be made
+# available to the vizapp
+vizapp_bioc_packages:
+  -
+
+# # List of any packages to install from GitHub using devtools, that must be
+# made availavle to the vizapp
+vizapp_github_packages:
+  -
+
diff --git a/docs/.keep b/docs/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000000000000000000000000000000000000..81bd63d24292a57ccbced426262c866175fb8c9e
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,60 @@
+# ATAC-seq Astrocyte Workflow
+
+<!-- TODO: Fill out intro (AS) -->
+
+## Requirements
+- The ATAC-seq Source workflow ['astrocyte-atac-source] (https://git.biohpc.swmed.edu/s219741/astrocyte-atac-source).
+This repo is used to wrap the existing ATAC-seq pipeline listed below (Runner), so that it can be run on the Astrocyte platform.
+- The ATAC-seq Runner workflow, 'astrocyte-atac-runner] (https://git.biohpc.swmed.edu/s219741/astrocyte-atac-runner). This repo contains the original ATAC-seq pipeline developed by the ENCODE team.
+
+## The ATAC-seq Runner workflow
+<!-- TODO: Fill out intro to ATAC-seq pipeline. Which commands do we use to run this pipeline? What will the NextFlow script use? (AS) -->
+
+On HPC, make sure that Caper's conf ~/.caper/default.conf is correctly configured to work with HPC. The following command will submit Caper as a leader job to SLURM with Singularity
+`caper hpc submit atac.wdl -i "${INPUT_JSON}" --singularity --leader-job-name ANY_GOOD_LEADER_JOB_NAME`
+
+## The ATAC-seq Source workflow
+The Source workflow interacts with the Astrocyte platform and the Runner workflow. It contains some basic components that are required by the Astrocyte platform. It will be imported to the Astrocyte platform as an independent Astrocyte workflow after connecting to the Runner workflow.
+
+## Critical files in the base workflow
+### `.gitmodules` and `workflow/external_repo/`
+These are the places where the magic happens. The Runner repo will be cloned and saved to `workflow/external_repo/` as a submodule, once the `.gitmodules` configured correctly.
+
+Please run the following commands in the base repo to update the submodule and check the status every time you made any changes in the remote repo or the `.gitmodules` file.
+
+    # register the submodule
+    git submodule init
+    
+    # update changes from the remote repo to the submodule
+    git submodule update --remote
+
+    # check the status of the submodule
+    git submodule status
+
+### `docs/index.md`
+The documentation file of the workflow that you see here. The content in this file will be displayed on the website once the workflow is imported to the Astrocyte platform.
+
+### `test_data/`
+This folder saves the data for tests only. When running `astrocyte_cli test YOUR_WORKFLOW_FOLDER`, it will check this folder for the test data defined in `main.nf` or `astrocyte_pkg.yml`.
+
+### `vizapp/`
+This folder contains the downstream visualization files for the Astrocyte workflow. Currently, only R-shiny is supported.
+
+## Publish your workflow to Astrocyte platform
+
+- Check the submodule status and make sure it is updated.
+
+    `git submodule status`
+
+- Check your Astrocyte workflow with the astrocyte_cli.
+    
+    `astrocyte_cli check YOUR_WORKFLOW_FOLDER`
+    
+- Test your Astrocyte workflow with the astrocyte_cli. 
+    
+    `astrocyte_cli test YOUR_WORKFLOW_FOLDER`
+
+- Commit and push your changes into your GitLab repo.
+- Create a publish_x.x.x/test_x.x.x tag of your repo from GitLab page. (x.x.x is the version number you defined)
+- Contact the BioHPC team at biohpc-help@utsouthwestern.edu. 
+
diff --git a/test_data/.keep b/test_data/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/test_data/example_input_json/ENCSR356KRQ_subsampled.json b/test_data/example_input_json/ENCSR356KRQ_subsampled.json
new file mode 100644
index 0000000000000000000000000000000000000000..36d35fc76d805faeafb7084272545ef7637f28e5
--- /dev/null
+++ b/test_data/example_input_json/ENCSR356KRQ_subsampled.json
@@ -0,0 +1,33 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "https://storage.googleapis.com/encode-pipeline-genome-data/genome_tsv/v4/hg38.tsv",
+    "atac.fastqs_rep1_R1" : [
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF341MYG.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF106QGY.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep1_R2" : [
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF248EJF.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF368TYI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R1" : [
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF641SFZ.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF751XTV.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF927LSG.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF859BDM.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF193RRC.subsampled.400.fastq.gz",
+        "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF366DFI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R2" : [
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF031ARQ.subsampled.400.fastq.gz",
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF590SYZ.subsampled.400.fastq.gz",
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF734PEQ.subsampled.400.fastq.gz",
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF007USV.subsampled.400.fastq.gz",
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF886FSC.subsampled.400.fastq.gz",
+         "https://storage.googleapis.com/encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF573UXK.subsampled.400.fastq.gz"
+    ],
+    "atac.paired_end" : true,
+    "atac.auto_detect_adapter" : true,
+    "atac.enable_xcor" : true,
+    "atac.title" : "ENCSR356KRQ (subsampled 1/400)",
+    "atac.description" : "ATAC-seq on primary keratinocytes in day 0.0 of differentiation"
+}
diff --git a/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_dx.json b/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_dx.json
new file mode 100644
index 0000000000000000000000000000000000000000..3b44b4a449b7915c84f8a976a6ba05c8753a0cf6
--- /dev/null
+++ b/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_dx.json
@@ -0,0 +1,34 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v4/hg38.dx.tsv",
+    "atac.fastqs_rep1_R1" : [
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF341MYG.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF106QGY.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep1_R2" : [
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF248EJF.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF368TYI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R1" : [
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF641SFZ.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF751XTV.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF927LSG.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF859BDM.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF193RRC.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF366DFI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R2" : [
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF031ARQ.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF590SYZ.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF734PEQ.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF007USV.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF886FSC.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF573UXK.subsampled.400.fastq.gz"
+    ],
+    "atac.paired_end" : true,
+    "atac.auto_detect_adapter" : true,
+    "atac.enable_tss_enrich" : false,
+    "atac.enable_xcor" : true,
+    "atac.title" : "ENCSR356KRQ (subsampled 1/400)",
+    "atac.description" : "ATAC-seq on primary keratinocytes in day 0.0 of differentiation"
+}
diff --git a/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_rep1_dx.json b/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_rep1_dx.json
new file mode 100644
index 0000000000000000000000000000000000000000..18e535173836f7ab8c05135a154ba3379b3f1529
--- /dev/null
+++ b/test_data/example_input_json/dx/ENCSR356KRQ_subsampled_rep1_dx.json
@@ -0,0 +1,18 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v4/hg38.dx.tsv",
+    "atac.fastqs_rep1_R1" : [
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF341MYG.subsampled.400.fastq.gz",
+        "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF106QGY.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep1_R2" : [
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF248EJF.subsampled.400.fastq.gz",
+         "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF368TYI.subsampled.400.fastq.gz"
+    ],
+    "atac.paired_end" : true,
+    "atac.auto_detect_adapter" : true,
+    "atac.enable_tss_enrich" : false,
+    "atac.enable_xcor" : true,
+    "atac.title" : "ENCSR356KRQ (unreplicated, subsampled 1/400)",
+    "atac.description" : "ATAC-seq on primary keratinocytes in day 0.0 of differentiation"
+}
diff --git a/test_data/example_input_json/dx/template_general.json b/test_data/example_input_json/dx/template_general.json
new file mode 100644
index 0000000000000000000000000000000000000000..a347408b00e1781ea1fa782ad8078f79b50c2edd
--- /dev/null
+++ b/test_data/example_input_json/dx/template_general.json
@@ -0,0 +1,3 @@
+{
+    "atac.pipeline_type" : "atac"
+}
diff --git a/test_data/example_input_json/dx/template_hg19.json b/test_data/example_input_json/dx/template_hg19.json
new file mode 100644
index 0000000000000000000000000000000000000000..62e356f51acbfb055e0fd89aaa3db527fc41cf8a
--- /dev/null
+++ b/test_data/example_input_json/dx/template_hg19.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v1/hg19_dx.tsv"
+}
diff --git a/test_data/example_input_json/dx/template_hg38.json b/test_data/example_input_json/dx/template_hg38.json
new file mode 100644
index 0000000000000000000000000000000000000000..fdf602d5673752b9b5727b439435661ca733ca93
--- /dev/null
+++ b/test_data/example_input_json/dx/template_hg38.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v4/hg38.dx.tsv"
+}
diff --git a/test_data/example_input_json/dx/template_mm10.json b/test_data/example_input_json/dx/template_mm10.json
new file mode 100644
index 0000000000000000000000000000000000000000..71cc9a77765610a38ba8bed213a14ac369577d91
--- /dev/null
+++ b/test_data/example_input_json/dx/template_mm10.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v4/mm10.dx.tsv"
+}
diff --git a/test_data/example_input_json/dx/template_mm9.json b/test_data/example_input_json/dx/template_mm9.json
new file mode 100644
index 0000000000000000000000000000000000000000..ed913a2c1e5ec37860befec63fbfbb76877d0bcb
--- /dev/null
+++ b/test_data/example_input_json/dx/template_mm9.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-BKpvFg00VBPV975PgJ6Q03v6:/pipeline-genome-data/genome_tsv/v1/mm9_dx.tsv"
+}
diff --git a/test_data/example_input_json/dx_azure/ENCSR356KRQ_subsampled_dx_azure.json b/test_data/example_input_json/dx_azure/ENCSR356KRQ_subsampled_dx_azure.json
new file mode 100644
index 0000000000000000000000000000000000000000..402f615d0217fea4319e785d6ecb9ab860debbde
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/ENCSR356KRQ_subsampled_dx_azure.json
@@ -0,0 +1,34 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-genome-data/genome_tsv/v4/hg38.dx_azure.tsv",
+    "atac.fastqs_rep1_R1" : [
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF341MYG.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF106QGY.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep1_R2" : [
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF248EJF.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF368TYI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R1" : [
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF641SFZ.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF751XTV.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF927LSG.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF859BDM.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF193RRC.subsampled.400.fastq.gz",
+        "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF366DFI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R2" : [
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF031ARQ.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF590SYZ.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF734PEQ.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF007USV.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF886FSC.subsampled.400.fastq.gz",
+         "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF573UXK.subsampled.400.fastq.gz"
+    ],
+    "atac.paired_end" : true,
+    "atac.auto_detect_adapter" : true,
+    "atac.enable_tss_enrich" : false,
+    "atac.enable_xcor" : true,
+    "atac.title" : "ENCSR356KRQ (subsampled 1/400)",
+    "atac.description" : "ATAC-seq on primary keratinocytes in day 0.0 of differentiation"
+}
diff --git a/test_data/example_input_json/dx_azure/template_general.json b/test_data/example_input_json/dx_azure/template_general.json
new file mode 100644
index 0000000000000000000000000000000000000000..a347408b00e1781ea1fa782ad8078f79b50c2edd
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/template_general.json
@@ -0,0 +1,3 @@
+{
+    "atac.pipeline_type" : "atac"
+}
diff --git a/test_data/example_input_json/dx_azure/template_hg19.json b/test_data/example_input_json/dx_azure/template_hg19.json
new file mode 100644
index 0000000000000000000000000000000000000000..eca340f8ff33b6c8a01858937ddf8557717b9a48
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/template_hg19.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-genome-data/genome_tsv/v1/hg19_dx_azure.tsv"
+}
diff --git a/test_data/example_input_json/dx_azure/template_hg38.json b/test_data/example_input_json/dx_azure/template_hg38.json
new file mode 100644
index 0000000000000000000000000000000000000000..117c1469c7bb1afdd806fd22c40d879e150ef742
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/template_hg38.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-genome-data/genome_tsv/v4/hg38.dx_azure.tsv"
+}
diff --git a/test_data/example_input_json/dx_azure/template_mm10.json b/test_data/example_input_json/dx_azure/template_mm10.json
new file mode 100644
index 0000000000000000000000000000000000000000..0f0e3677f8ac2acde3e24d81419f08ff0e288230
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/template_mm10.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-genome-data/genome_tsv/v4/mm10.dx_azure.tsv"
+}
diff --git a/test_data/example_input_json/dx_azure/template_mm9.json b/test_data/example_input_json/dx_azure/template_mm9.json
new file mode 100644
index 0000000000000000000000000000000000000000..9c08e2796e88ba33721c52df1a30e6457a749646
--- /dev/null
+++ b/test_data/example_input_json/dx_azure/template_mm9.json
@@ -0,0 +1,4 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "dx://project-F6K911Q9xyfgJ36JFzv03Z5J:/pipeline-genome-data/genome_tsv/v1/mm9_dx_azure.tsv"
+}
diff --git a/test_data/example_input_json/template.full.json b/test_data/example_input_json/template.full.json
new file mode 100644
index 0000000000000000000000000000000000000000..ef92fc0407c7182fc47576902f137689cdf23e44
--- /dev/null
+++ b/test_data/example_input_json/template.full.json
@@ -0,0 +1,95 @@
+{
+    "atac.title" : "Example (paired end)",
+    "atac.description" : "This is a template input JSON for paired ended sample.",
+
+    "atac.pipeline_type" : "atac",
+    "atac.align_only" : false,
+    "atac.true_rep_only" : false,
+
+    "atac.genome_tsv" : "/path_to_genome_data/hg38/hg38.tsv",
+
+    "atac.paired_end" : true,
+    "atac.paired_ends" : [true, true],
+
+    "atac.fastqs_rep1_R1" : [ "rep1_R1_L1.fastq.gz", "rep1_R1_L2.fastq.gz", "rep1_R1_L3.fastq.gz" ],
+    "atac.fastqs_rep1_R2" : [ "rep1_R2_L1.fastq.gz", "rep1_R2_L2.fastq.gz", "rep1_R2_L3.fastq.gz" ],
+    "atac.fastqs_rep2_R1" : [ "rep2_R1_L1.fastq.gz", "rep2_R1_L2.fastq.gz" ],
+    "atac.fastqs_rep2_R2" : [ "rep2_R2_L1.fastq.gz", "rep2_R2_L2.fastq.gz" ],
+
+    "atac.read_len" : [],
+    "atac.pseudoreplication_random_seed" : 0,
+
+    "atac.auto_detect_adapter" : false,
+    "atac.adapter" : "AATTCCGG",
+    "atac.adapters_rep1_R1" : [ "AATTCCGG", "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep1_R2" : [ "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep2_R1" : [ "AATTCCGG", "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep2_R2" : [ "AATTCCGG", "AATTCCGG" ],
+    "atac.cutadapt_param" : "-e 0.1 -m 5",
+
+    "atac.multimapping" : 4,
+
+    "atac.mapq_thresh" : 30,
+    "atac.dup_marker" : "picard",
+    "atac.no_dup_removal" : false,
+
+    "atac.subsample_reads" : 0,
+    "atac.xcor_subsample_reads" : 25000000,
+
+    "atac.cap_num_peak" : 300000,
+    "atac.pval_thresh" : 0.01,
+    "atac.smooth_win" : 150,
+
+    "atac.enable_idr" : true,
+    "atac.idr_thresh" : 0.05,
+
+    "atac.enable_xcor" : false,
+    "atac.enable_count_signal_track" : false,
+
+    "atac.filter_chrs" : ["chrM", "MT"],
+
+    "atac.enable_preseq" : false,
+    "atac.enable_compare_to_roadmap" : false,
+    "atac.enable_tss_enrich" : true,
+    "atac.enable_gc_bias" : true,
+
+    "atac.align_cpu" : 6,
+    "atac.align_mem_factor" : 0.15,
+    "atac.align_time_hr" : 48,
+    "atac.align_disk_factor" : 8.0,
+
+    "atac.filter_cpu" : 4,
+    "atac.filter_mem_factor" : 0.4,
+    "atac.filter_time_hr" : 24,
+    "atac.filter_disk_factor" : 8.0,
+
+    "atac.bam2ta_cpu" : 2,
+    "atac.bam2ta_mem_factor" : 0.3,
+    "atac.bam2ta_time_hr" : 12,
+    "atac.bam2ta_disk_factor" : 4.0,
+
+    "atac.spr_mem_factor" : 13.5,
+    "atac.spr_disk_factor" : 18.0,
+
+    "atac.jsd_cpu" : 4,
+    "atac.jsd_mem_factor" : 0.1,
+    "atac.jsd_time_hr" : 12,
+    "atac.jsd_disk_factor" : 2.0,
+
+    "atac.xcor_cpu" : 2,
+    "atac.xcor_mem_factor" : 1.0,
+    "atac.xcor_time_hr" : 6,
+    "atac.xcor_disk_factor" : 4.5,
+
+    "atac.call_peak_cpu" : 2,
+    "atac.call_peak_mem_factor" : 2.0,
+    "atac.call_peak_time_hr" : 24,
+    "atac.call_peak_disk_factor" : 30.0,
+
+    "atac.macs2_signal_track_mem_factor" : 12.0,
+    "atac.macs2_signal_track_time_hr" : 24,
+    "atac.macs2_signal_track_disk_factor" : 80.0,
+
+    "atac.preseq_mem_factor" : 0.5,
+    "atac.preseq_disk_factor" : 5.0
+}
diff --git a/test_data/example_input_json/template.json b/test_data/example_input_json/template.json
new file mode 100644
index 0000000000000000000000000000000000000000..51abaf534f0d010f7d9213374a29bac0b5e7b824
--- /dev/null
+++ b/test_data/example_input_json/template.json
@@ -0,0 +1,26 @@
+{
+    "atac.title" : "Example (paired end)",
+    "atac.description" : "This is a template input JSON for paired ended sample.",
+
+    "atac.pipeline_type" : "atac",
+    "atac.align_only" : false,
+    "atac.true_rep_only" : false,
+
+    "atac.genome_tsv" : "/path_to_genome_data/hg38/hg38.tsv",
+
+    "atac.paired_end" : true,
+
+    "atac.fastqs_rep1_R1" : [ "rep1_R1_L1.fastq.gz", "rep1_R1_L2.fastq.gz", "rep1_R1_L3.fastq.gz" ],
+    "atac.fastqs_rep1_R2" : [ "rep1_R2_L1.fastq.gz", "rep1_R2_L2.fastq.gz", "rep1_R2_L3.fastq.gz" ],
+    "atac.fastqs_rep2_R1" : [ "rep2_R1_L1.fastq.gz", "rep2_R1_L2.fastq.gz" ],
+    "atac.fastqs_rep2_R2" : [ "rep2_R2_L1.fastq.gz", "rep2_R2_L2.fastq.gz" ],
+
+    "atac.auto_detect_adapter" : false,
+    "atac.adapter" : "AATTCCGG",
+    "atac.adapters_rep1_R1" : [ "AATTCCGG", "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep1_R2" : [ "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep2_R1" : [ "AATTCCGG", "AATTCCGG", "AATTCCGG" ],
+    "atac.adapters_rep2_R2" : [ "AATTCCGG", "AATTCCGG" ],
+
+    "atac.multimapping" : 4
+}
diff --git a/test_data/example_input_json/terra/ENCSR356KRQ_subsampled.terra.json b/test_data/example_input_json/terra/ENCSR356KRQ_subsampled.terra.json
new file mode 100644
index 0000000000000000000000000000000000000000..b1111c1152cc45f19670be916738d8910381e0c3
--- /dev/null
+++ b/test_data/example_input_json/terra/ENCSR356KRQ_subsampled.terra.json
@@ -0,0 +1,33 @@
+{
+    "atac.pipeline_type" : "atac",
+    "atac.genome_tsv" : "gs://encode-pipeline-genome-data/genome_tsv/v4/hg38.terra.tsv",
+    "atac.fastqs_rep1_R1" : [
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF341MYG.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair1/ENCFF106QGY.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep1_R2" : [
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF248EJF.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep1/pair2/ENCFF368TYI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R1" : [
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF641SFZ.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF751XTV.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF927LSG.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF859BDM.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF193RRC.subsampled.400.fastq.gz",
+        "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair1/ENCFF366DFI.subsampled.400.fastq.gz"
+    ],
+    "atac.fastqs_rep2_R2" : [
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF031ARQ.subsampled.400.fastq.gz",
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF590SYZ.subsampled.400.fastq.gz",
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF734PEQ.subsampled.400.fastq.gz",
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF007USV.subsampled.400.fastq.gz",
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF886FSC.subsampled.400.fastq.gz",
+         "gs://encode-pipeline-test-samples/encode-atac-seq-pipeline/ENCSR356KRQ/fastq_subsampled/rep2/pair2/ENCFF573UXK.subsampled.400.fastq.gz"
+    ],
+    "atac.paired_end" : true,
+    "atac.auto_detect_adapter" : true,
+    "atac.enable_xcor" : true,
+    "atac.title" : "ENCSR356KRQ (subsampled 1/400)",
+    "atac.description" : "ATAC-seq on primary keratinocytes in day 0.0 of differentiation"
+}
diff --git a/vizapp/.keep b/vizapp/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/workflow/configs/biohpc.config b/workflow/configs/biohpc.config
new file mode 100644
index 0000000000000000000000000000000000000000..4f2921ae0e59bf5aa79168ae463e3a6c0227fae5
--- /dev/null
+++ b/workflow/configs/biohpc.config
@@ -0,0 +1,9 @@
+process {
+    // Uncomment these two options to run the workflow on BioHPC cluster
+    // You can 
+    // executor = 'slurm'
+    // queue = 'super'
+
+    // To run the workflow on local computer (for testing)
+    executor = 'local'
+}
diff --git a/workflow/images/singularity/.keep b/workflow/images/singularity/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/workflow/main.nf b/workflow/main.nf
index 0d9d64f27142ab78ce528d4dab31bf550ca2e81e..25f81fe3d0b0420c385dbadde44baf0404daba65 100644
--- a/workflow/main.nf
+++ b/workflow/main.nf
@@ -1 +1,15 @@
-# Hi!
+/*
+ * Copyright (c) 2024. The University of Texas Southwestern Medical Center
+ *
+ * TODO: (AC) Brief description of ATAC-seq
+ *
+ * @authors
+ * Achisha Saikia, Felix Perez
+ *
+ */
+
+ // caper hpc submit atac.wdl -i "${INPUT_JSON}" --singularity --leader-job-name ANY_GOOD_LEADER_JOB_NAME`
+
+ // The executable script in the Runner repo
+ //params = "caper hpc submit $baseDir/external_repo/atac.wdl"
+ //params.input_json = 
\ No newline at end of file
diff --git a/workflow/scripts/.keep b/workflow/scripts/.keep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391