diff --git a/.gitignore b/.gitignore
index 075b254..0e3521a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
/.quarto/
+
+**/*.quarto_ipynb
diff --git a/README.md b/README.md
index 99f65a0..48d8243 100644
--- a/README.md
+++ b/README.md
@@ -10,18 +10,12 @@ Click here to go to our [Course Website](https://umgcccfcsr.github.io/CytometryI
# Participating
-The course will start the first week of February, with Week #1 resources being released on Sunday, February 1st at 2200 EST (Monday 0300 GMT+0). See below for additional details.
-
-## Resources
-
-The pre-course learning materials are now [available](https://umgcccfcsr.github.io/CytometryInR/course/00_GitHub/) , providing walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.
-
-Narrated versions of the walk through materials will be available starting next week via [YouTube](https://www.youtube.com/@CytometryInR)
+The course started up the first week of February. Course materials can be found [here](/course/00_GitHub/index.qmd) or via the Course tab in the navigation bar. The livestream recordings are available via [YouTube](https://www.youtube.com/@CytometryInR). See below for additional details.
## In-Person (Baltimore)
-For those joining us in person, the class is being offered on Monday, Tuesday and Thursday from **4-5 pm EST** in Bressler Research Building Room 7-035. We invite you to make whichever session best fits your schedule. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions.
+For those joining us in person, the class is being offered on Thursday from **4-5 pm EST** in Bressler Research Building Room 7-035. Monitors to plug your laptops in will be available on a first come, first served basis. These in-person sessions will not be recorded, but with the smaller class size you will have our undivided attention should you have any questions.
## Virtual (Worldwide)
diff --git a/Schedule.qmd b/Schedule.qmd
index 73dca98..cde0d6d 100644
--- a/Schedule.qmd
+++ b/Schedule.qmd
@@ -17,9 +17,8 @@ sidebar: false
Cytometry in R is a free virtual mini-course being organized by the [Flow Cytometry Shared Resource](https://www.medschool.umaryland.edu/cibr/core/umgccc_flow/) core at the University of Maryland's [Greenebaum Comprehensive Cancer Center](https://www.umms.org/umgccc). This course is a passion project arising from our desire to contribute back to the community. We are excited that you have chosen to take part and look forward to helping you get started on your own learning journey.
-If you did not complete the original interest form, and would like to be added to our mailing list, please complete the form [here](https://docs.google.com/forms/d/e/1FAIpQLScPK4V_WNSgQvZNq7aIHpoiX8pi3kiuCfI0Tp7hQkVJS3HPtQ/viewform?usp=publish-editor)
+Course materials can be found [here](/course/00_GitHub/index.qmd) or via the Course tab in the navigation bar. The livestream recordings are available via [YouTube](https://www.youtube.com/@CytometryInR)
-The pre-course learning materials are now [available](/course/00_GitHub/index.qmd) via the Course tab. They consist of walkthroughs of how to set up your workstations with the required software, and exercises to help you become more familiar with the various teaching and coding resources we will be using throughout the course.
@@ -63,7 +62,7 @@ The pre-course learning materials are now [available](/course/00_GitHub/index.qm
{width=75%}
-[**Week 4: February 23, 2026**]{.underline} Within this session, we explore how the various [tidyverse](https://tidyverse.org/) packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf) data and how it can improve our workflows.
+[**Week 4: February 23, 2026**]{.underline} Within this [fourth session](/course/04_IntroToTidyverse/index.qmd), we explore how the various [tidyverse](https://tidyverse.org/) packages can be utilized to reorganize rows and columns of data in ways that are useful for data analysis. We will primarily work with the MFI expression data we isolated from within the .fcs file in the previous session, identifying and isolating events that meet certain criterias. We introduce the concepts behind ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf) data and how it can improve our workflows.
@@ -72,7 +71,7 @@ The pre-course learning materials are now [available](/course/00_GitHub/index.qm
{width=75%}
-[**Week 5: March 2, 2026**]{.underline} As part of this session, we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, [flowcore](https://www.bioconductor.org/packages/release/bioc/vignettes/flowCore/inst/doc/HowTo-flowCore.pdf) and [flowWorkspace](https://www.bioconductor.org/packages/release/bioc/vignettes/flowWorkspace/inst/doc/flowWorkspace-Introduction.html). Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.
+[**Week 5: March 2, 2026**]{.underline} As part of this [fifth session](/course/05_GatingSets/index.qmd), we learn about the two main flow cytometry infrastructure packages in R we will be working with during the course, [flowcore](https://www.bioconductor.org/packages/release/bioc/vignettes/flowCore/inst/doc/HowTo-flowCore.pdf) and [flowWorkspace](https://www.bioconductor.org/packages/release/bioc/vignettes/flowWorkspace/inst/doc/flowWorkspace-Introduction.html). Throughout the session, we will compare how they differ in naming, memory usage, and accessing .fcs file metadata. We additionally explore how to add keywords to their respective metadata for use in filtering specimens of interest from the larger set of .fcs files.
@@ -194,7 +193,8 @@ No class week of March 30, 2026. If you are attending the [ABRF conference](http
### Conference Break 2
-No class week of June 8, 2026. If you are attending the [Cyto conference](https://www.cytoconference.org/?gad_source=1&gad_campaignid=20633392465&gbraid=0AAAAADoJzsvHaLZAq9tqn_aTAQGEzIk_V&gclid=CjwKCAiA-sXMBhAOEiwAGGw6LJFFV69xaAU3s7bElL86RdnRNFwAYqOQO78MrIYQuG1qvRU6HTN3ZRoCGmAQAvD_BwE), track me down at my talks and posters.
+No class week of June 8, 2026. If you are attending the [Cyto conference](https://www.cytoconference.org/?gad_source=1&gad_campaignid=20633392465&gbraid=0AAAAADoJzsvHaLZAq9tqn_aTAQGEzIk_V&gclid=CjwKCAiA-sXMBhAOEiwAGGw6LJFFV69xaAU3s7bElL86RdnRNFwAYqOQO78MrIYQuG1qvRU6HTN3ZRoCGmAQAvD_BwE), track me down at my talks ([Open-Source automation](https://davidrach.github.io/abstracts.html#cyto-2026---flow-awarenesss) on June 7, 10:30-11:30AM at Grand Ballroom;
+and [Semi-supervised pipeline](https://davidrach.github.io/abstracts.html#cyto-2026---alpha-beta) on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)
diff --git a/_quarto.yml b/_quarto.yml
index 1458d2c..9bb39c0 100644
--- a/_quarto.yml
+++ b/_quarto.yml
@@ -11,6 +11,8 @@ project:
- 01_*
- 02_*
- 03_*
+ - 04_*
+ - 05_*
website:
google-analytics: "G-LZ35J3XE4D"
announcement:
@@ -61,7 +63,6 @@ website:
- text: "00 - Floreada"
href: course/00_Floreada/index.qmd
- section: "Intro to R"
- href: course/01_InstallingRPackages/index.qmd
contents:
- text: "01 - Installing R Packages"
href: course/01_InstallingRPackages/index.qmd
@@ -69,6 +70,10 @@ website:
href: course/02_FilePaths/index.qmd
- text: "03 - Inside a .FCS file"
href: course/03_InsideFCSFile/index.qmd
+ - text: "04 - Intro to Tidyverse"
+ href: course/04_IntroToTidyverse/index.qmd
+ - text: "05 - Gating Sets"
+ href: course/05_GatingSets/index.qmd
- section: "Cytometry Core"
href: Schedule.qmd
- section: "Beyond the Sandbox"
diff --git a/course/00_BonusContent/PullConflicts/UpdatedPullRequest.qmd b/course/00_BonusContent/PullConflicts/UpdatedPullRequest.qmd
new file mode 100644
index 0000000..9cb5a89
--- /dev/null
+++ b/course/00_BonusContent/PullConflicts/UpdatedPullRequest.qmd
@@ -0,0 +1,126 @@
+---
+title: "Updated Pull Request Protocol"
+author: "David Rach"
+date: 02-22-2026
+format: html
+toc: true
+toc-depth: 4
+---
+
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
+
+# Background
+
+Due to an encountered issue pulling in new updates for CytometryInR when you have an optional take-home problem still waiting to be reviewed, we will be modifying the protocol for submitting a pull request. You will first create a local homework branch, and submit from your branch to our homework branch. That should hopefully prevent any incoming changes from main to main from becoming conflicted.
+
+# Getting Started
+
+The first step is to open Positron, and navigate through the dropdown options to the Create a Branch option
+
+
+
+
+
+And provide a name (since the homework was for Week 02, we set it as Week 02)
+
+
+
+
+
+Next, select the option to Publish the Branch
+
+
+
+
+
+From here, importantly, select the option to make it a branch of YOUR forked CytometryInR version (since you don't have permissions for the main course repository)
+
+
+
+
+
+At this point, your new branch will have been created. You can check by entering the following code in the terminal, and verifying the * is next to the Week02 branch
+
+```{r}
+#| eval: FALSE
+git branch
+```
+
+
+
+
+
+Once you have confirmed you are in your homework branch, go ahead and transfer in all the files you will be submitting for the optional take-home problems
+
+
+
+
+
+And once done, make a commit as you would normally
+
+
+
+
+
+As you can see, you will now be ahead of the main branch by one commit. Go ahead and sync your branch to GitHub so the contents are available remotely for use in the pull-request.
+
+
+
+
+
+Once synced, you will notice that your branch is now up to date with the remote (cloud) icon. Next, proceed to checkout to the main branch, either via the dropdown or via the terminal using
+
+```{r}
+#| eval: FALSE
+git checkout main
+
+```
+
+
+
+
+
+Returning to GitHub, you will see that your homework branch has received the incoming changes. You are now safe to sync your fork to bring in changes from the main course CytometryInR repository.
+
+
+
+
+
+
+And confirm yes.
+
+
+
+
+
+Returning to Positron, once verified you are in your main branch, proceed to pull in changes
+
+
+
+
+
+If you switch between branches, you will notice you have both the new changes to main, as well as your week specific side branch co-existing peacefully.
+
+
+
+
+
+You are then safe to make a pullrequest from your homework branch, to our homework branch, without running into risk of an additional commit from our end (or delay in reviewing) causing issues.
+
+
+
+
+
+
+# Additional Resources
+
+This method should hopefully avoid the previously encountered issues. Apologies once again to those who encountered the issue! Still learning how to use some of these aspects of Version control in a GitHub context.
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
\ No newline at end of file
diff --git a/course/00_BonusContent/PullConflicts/images/00_Start.png b/course/00_BonusContent/PullConflicts/images/00_Start.png
new file mode 100644
index 0000000..d1470ef
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/00_Start.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/01_Issue.png b/course/00_BonusContent/PullConflicts/images/01_Issue.png
new file mode 100644
index 0000000..cb3e698
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/01_Issue.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/02_AsCurrentlyShowing.png b/course/00_BonusContent/PullConflicts/images/02_AsCurrentlyShowing.png
new file mode 100644
index 0000000..dc00f04
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/02_AsCurrentlyShowing.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/03_ConflictResolution.png b/course/00_BonusContent/PullConflicts/images/03_ConflictResolution.png
new file mode 100644
index 0000000..340dc3a
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/03_ConflictResolution.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/04_MarkAsResolved.png b/course/00_BonusContent/PullConflicts/images/04_MarkAsResolved.png
new file mode 100644
index 0000000..a052d1f
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/04_MarkAsResolved.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/05_PostEdits.png b/course/00_BonusContent/PullConflicts/images/05_PostEdits.png
new file mode 100644
index 0000000..6c7ccbb
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/05_PostEdits.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/06_Upps.png b/course/00_BonusContent/PullConflicts/images/06_Upps.png
new file mode 100644
index 0000000..d769678
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/06_Upps.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/07_DiscardCommits.png b/course/00_BonusContent/PullConflicts/images/07_DiscardCommits.png
new file mode 100644
index 0000000..56f173c
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/07_DiscardCommits.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/08_Hmm.png b/course/00_BonusContent/PullConflicts/images/08_Hmm.png
new file mode 100644
index 0000000..9b43eb7
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/08_Hmm.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/09_PullPostFix.png b/course/00_BonusContent/PullConflicts/images/09_PullPostFix.png
new file mode 100644
index 0000000..f6e843c
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/09_PullPostFix.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/10_GitLog.png b/course/00_BonusContent/PullConflicts/images/10_GitLog.png
new file mode 100644
index 0000000..dd21876
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/10_GitLog.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/11_gitconfigpullrebaseTRUE.png b/course/00_BonusContent/PullConflicts/images/11_gitconfigpullrebaseTRUE.png
new file mode 100644
index 0000000..dd50dec
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/11_gitconfigpullrebaseTRUE.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/12_Branched.png b/course/00_BonusContent/PullConflicts/images/12_Branched.png
new file mode 100644
index 0000000..a3b724f
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/12_Branched.png differ
diff --git a/course/00_BonusContent/PullConflicts/images/13_Hmm2.png b/course/00_BonusContent/PullConflicts/images/13_Hmm2.png
new file mode 100644
index 0000000..2ade12a
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images/13_Hmm2.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/000_CreateBranch.png b/course/00_BonusContent/PullConflicts/images2/000_CreateBranch.png
new file mode 100644
index 0000000..2621c42
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/000_CreateBranch.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/001_Week2.png b/course/00_BonusContent/PullConflicts/images2/001_Week2.png
new file mode 100644
index 0000000..bf64aa4
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/001_Week2.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/002_PublishBranch.png b/course/00_BonusContent/PullConflicts/images2/002_PublishBranch.png
new file mode 100644
index 0000000..7097f61
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/002_PublishBranch.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/003_ToYOURfork.png b/course/00_BonusContent/PullConflicts/images2/003_ToYOURfork.png
new file mode 100644
index 0000000..98dd642
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/003_ToYOURfork.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/004_MakeSureWeek02.png b/course/00_BonusContent/PullConflicts/images2/004_MakeSureWeek02.png
new file mode 100644
index 0000000..1a0a46d
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/004_MakeSureWeek02.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/005_MakeAdditions.png b/course/00_BonusContent/PullConflicts/images2/005_MakeAdditions.png
new file mode 100644
index 0000000..17f2a63
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/005_MakeAdditions.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/006_Commit.png b/course/00_BonusContent/PullConflicts/images2/006_Commit.png
new file mode 100644
index 0000000..178e24a
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/006_Commit.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/007_Week02.png b/course/00_BonusContent/PullConflicts/images2/007_Week02.png
new file mode 100644
index 0000000..e8ca6e2
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/007_Week02.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/008_CheckoutMain.png b/course/00_BonusContent/PullConflicts/images2/008_CheckoutMain.png
new file mode 100644
index 0000000..56886c3
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/008_CheckoutMain.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/009_Sync.png b/course/00_BonusContent/PullConflicts/images2/009_Sync.png
new file mode 100644
index 0000000..cfe720f
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/009_Sync.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/010_SyncYes.png b/course/00_BonusContent/PullConflicts/images2/010_SyncYes.png
new file mode 100644
index 0000000..32bb40f
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/010_SyncYes.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/011_Pull.png b/course/00_BonusContent/PullConflicts/images2/011_Pull.png
new file mode 100644
index 0000000..baa88b5
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/011_Pull.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/012_PullRequestBranchToBranch.png b/course/00_BonusContent/PullConflicts/images2/012_PullRequestBranchToBranch.png
new file mode 100644
index 0000000..50fb4ad
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/012_PullRequestBranchToBranch.png differ
diff --git a/course/00_BonusContent/PullConflicts/images2/012_SafeSideBranch.png b/course/00_BonusContent/PullConflicts/images2/012_SafeSideBranch.png
new file mode 100644
index 0000000..55803be
Binary files /dev/null and b/course/00_BonusContent/PullConflicts/images2/012_SafeSideBranch.png differ
diff --git a/course/00_BonusContent/PullConflicts/index.qmd b/course/00_BonusContent/PullConflicts/index.qmd
new file mode 100644
index 0000000..a37cbc8
--- /dev/null
+++ b/course/00_BonusContent/PullConflicts/index.qmd
@@ -0,0 +1,128 @@
+---
+title: "Take-Home Problems - Pull Fix Resolution"
+author: "David Rach"
+date: 02-22-2026
+format: html
+toc: true
+toc-depth: 4
+---
+
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
+
+# Background
+
+For those who have turned in the homework to the Cytometry in R - homework branches, many report having encountered merge issues pulling in the next week's data if the pull request hasn't been resolved yet. Creating a parallel branch, and submitting homework from there to the homework branch might solve the issue? But we will need to test that out. For now, here are the steps we used to resolve the issue locally without needing to delete and re-download.
+
+
+# Getting Started
+
+Start off checking your GitHub forked version of the CytometryInR, notice how many commits behind you are.
+
+
+
+
+
+If you haven't submitted the optional Take-Home problems via a pull-request, proceed to do so.
+
+
+
+
+
+This was an example of the page you see when submitting the pull request. Upon submission, your branch may show merge conflicts due to difference in rendered docs. This is okay, we will resolve it on our end.
+
+
+
+
+
+What we will end up doing is ignore the changes and accept the current version. This issue is likely due to the weekly updating of the data resulting in new sidebar links. We will then mark these issues as resolved
+
+
+
+We will then mark the issues as resolved.
+
+
+
+
+
+On return to the homework, we will be able to merge the branch once again. We will likely make our suggestions at this point for this branch.
+
+
+
+
+
+
+However, after pull request has been merged, you will see your branch is way ahead (due to everyone elses homework commits). This is the area we will need to address via the new branch method.
+
+
+
+
+
+For now, proceed to discard the changes (you don't need the other participants homeworks cluttering your folder)
+
+
+
+
+
+
+You will then appear as caught up with the main branch.
+
+
+
+
+
+On return to Positron, attempt to pull
+
+
+
+
+
+
+However, since your homework commit is still present, you will receive a pop-up asking you to see the GitLog. If you scroll up the problem log, it will give you several options.
+
+
+
+
+
+You will need to enter the following code into your terminal tab:
+
+```{r}
+#| eval: FALSE
+git config pull.rebase TRUE
+```
+
+
+
+
+
+
+This will result in a branched appearance, and the button asking you to sync the changes.
+
+
+
+
+
+
+Upon doing so you will have a restored status vs. the main cytometry in R project folder.
+
+
+
+
+# Take Away
+
+We have encountered a first growing pain for the course, in that the pull-request method we have been using still causes merge conflicts. We will be going to a homework branch to homework branch pull-request approach going forward, I will send out additional instructions on how to do so shortly.
+
+Thanks for your patience!
+
+David
+
+
+# Additional Resources
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
\ No newline at end of file
diff --git a/course/00_BonusContent/images/ArmVsIntel_Macs.png b/course/00_BonusContent/images/ArmVsIntel_Macs.png
new file mode 100644
index 0000000..0975ebd
Binary files /dev/null and b/course/00_BonusContent/images/ArmVsIntel_Macs.png differ
diff --git a/course/00_BonusContent/images/CommitMessage.png b/course/00_BonusContent/images/CommitMessage.png
new file mode 100644
index 0000000..49f621c
Binary files /dev/null and b/course/00_BonusContent/images/CommitMessage.png differ
diff --git a/course/00_BonusContent/images/DiscardChanges.png b/course/00_BonusContent/images/DiscardChanges.png
new file mode 100644
index 0000000..34f1f67
Binary files /dev/null and b/course/00_BonusContent/images/DiscardChanges.png differ
diff --git a/course/00_Homeworks/index.qmd b/course/00_Homeworks/index.qmd
index 55375c5..4dae069 100644
--- a/course/00_Homeworks/index.qmd
+++ b/course/00_Homeworks/index.qmd
@@ -297,7 +297,7 @@ Proceed to push the branch to GitHub.
---
-# Re-sync if necessary
+### Re-sync if necessary
If additional changes have occured to the parent CytometryInR repository, go ahead and update your branch. As long as your edits occurred within your folder inside homework folders, they should still be able to merge.
diff --git a/course/01_InstallingRPackages/homeworks/T-Wittenborn/README.md b/course/01_InstallingRPackages/homeworks/T-Wittenborn/README.md
new file mode 100644
index 0000000..38f8c8b
--- /dev/null
+++ b/course/01_InstallingRPackages/homeworks/T-Wittenborn/README.md
@@ -0,0 +1,106 @@
+# Turning In Optional Take-Home Problems
+
+This folder is for the use of submitting your completed Take-Home Problems for evaluation by course instructors. Please see [Getting Help](/course/00_Homeworks/index.qmd) walkthrough for more detailed instructions.
+
+Within your branch, inside this "homeworks" folder, create a new folder (name it with your GitHub username). Then copy all files you will be submitting within your folder. Then commit the change to git, and push to GitHub. See [Getting Help](/course/00_Homeworks/index.qmd)for details on submitting the pull request to the UMGCCCFCSR/CytometryInR homework branch.
+
+# Take-home Problems
+
+Below you will find the optional take-home problems for Week #1. Learning how to code well requires continous practice, and that involves cycles of trying something, failing, and troubleshooting to get it working. The goal of these problems is to help you explore the topic in greater depth than the currated boundaries of this one lecture.
+
+You are more than welcome to open a [Discussion](https://github.com/UMGCCCFCSR/CytometryInR/discussions) to engage with others in the course to discuss these questions. Once you are done tinkering, and want to get final instructor feedback on your work, place your files within a folder, and follow the instructions to submit it as a [Pull Request](/course/00_Homeworks/index.qmd#submitting-take-home-problems) to the Cytometry In R repositories homework branch.
+
+:::{.callout-tip title="Problem 1"}
+We installed PeacoQC during this session, but we didn't have time to explore what functions are present within the package. Using what you have learned about accessing documentation, figure out and list what functions it contains
+:::
+
+```{r}
+?PeacoQC
+```
+
+:::{.callout-tip title="Problem 2"}
+Take a closer look at the list of Bioconductor [cytometry](https://www.bioconductor.org/packages/release/BiocViews.html#___FlowCytometry) packages. Report back on how many there are currently in Bioconductor, the author/maintainer with the most contributed cytometry R packages, and a couple packages that you would be interested in exploring more in-depth later in the course.
+:::
+
+Answer: Of todays date (3/3-2026) there are 69 packages for Flow Cytometry in Bioconductor. Mike Jiang is the most featured author of packages, and I would like to look closer into the high-parameter visualisation packages.
+
+:::{.callout-tip title="Problem 3"}
+There is another way to install R packages, using the newer [pak](https://pak.r-lib.org/) package. Positron uses this when installing suggested dependencies.
+
+After learning more about it via the documentation and it's pkgdown website, I would like you to attempt to install the following three R packages using this newer method: "broom", "cytoMEM", "DillonHammill/CytoExploreR".
+
+Take screenshots, and in a new [quarto markdown document](/course/00_Quarto/index.qmd), describe how the installation process differed from what you saw for `install.packages()`, `install()` and `install_github()`.
+:::
+
+### Installing pak from CRAN
+
+First we will need to install the "pak" package from CRAN. The homepage suggest using this code block for the installation taking into account package type, operating system, and CPU architecture:
+
+install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/stable/%s/%s/%s", .Platform$pkgType, R.Version()$os, R.Version()$arch))
+
+# Differences from install.packages(), install() and install_github().
+
+We are tasked with installing "broom", "cytoMEM", and "DillonHammill/CytoExploreR" using the new "pak" feature.
+The code is universal regardless of the package-origin, which makes it easier to use.
+We only need the correct name of the package, and if it is from GitHub, we also need to correct formatting telling "pak" who is the provider of the package (in the case below it is "DillonHammill").
+
+```{r}
+pak::pkg_install("broom")
+pak::pkg_install("cytoMEM")
+pak::pkg_install("DillonHammill/CytoExploreR")
+```
+
+I got an error on some dependencies when trying to install the CytoExploreR:
+Error:
+! ! error in pak subprocess
+Caused by error:
+! Could not solve package dependencies:
+* DillonHammill/CytoExploreR:
+ * Can't install dependency EmbedSOM (>= 1.0.0)
+ * Can't install dependency superheat (>= 1.0.0)
+* EmbedSOM: Can't find package called EmbedSOM.
+Hide Traceback
+ ▆
+ 1. └─pak::pkg_install("DillonHammill/CytoExploreR")
+ 2. └─pak:::remote(...)
+ 3. └─err$throw(res$error)
+
+ I tried to install these dependencies with this code block.
+
+ ```{r}
+ pak::pkg_install("EmbedSOM")
+ pak::pkg_install("superheat")
+ ```
+
+This gave the following error:
+Error:
+! ! error in pak subprocess
+Caused by error:
+! Could not solve package dependencies:
+* EmbedSOM: Can't find package called EmbedSOM.
+Hide Traceback
+ ▆
+ 1. └─pak::pkg_install("EmbedSOM")
+ 2. └─pak:::remote(...)
+ 3. └─err$throw(res$error)
+
+ I Googled the package name and found it to be present on GitHub "exaexa/EmbedSOM"
+
+ ```{r}
+ pak::pkg_install("exaexa/EmbedSOM")
+ ```
+
+That seemed to work, and I tried the same approach for the "superheat" package. This was also on GitHub "rlbarter/superheat".
+
+```{r}
+ pak::pkg_install("rlbarter/superheat")
+```
+
+Then I tried the "CytoExploreR" installation again.
+
+```{r}
+pak::pkg_install("DillonHammill/CytoExploreR")
+```
+
+That seemed to work without any errors :)
+
diff --git a/course/04_IntroToTidyverse/BonusContent.qmd b/course/04_IntroToTidyverse/BonusContent.qmd
new file mode 100644
index 0000000..2459223
--- /dev/null
+++ b/course/04_IntroToTidyverse/BonusContent.qmd
@@ -0,0 +1,88 @@
+---
+title: "Bonus Content"
+author: "David Rach"
+date: 02-23-2026
+format: html
+toc: true
+toc-depth: 5
+---
+
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
+
+```{r}
+thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+```
+
+```{r}
+Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+```
+
+## Pull
+
+## Case-When
+
+Case-when is an useful function, but may be a bit much to try to teach in the main segment. Basically, when the condition on the left side of the ~ is fulfilled, it will execute what is being specified on the right hand side.
+
+In turn, we can combine these together by adding a ",". I tend to use this mutate str_detect case_when combination when encountering messy data out in the while where I need to selectively change particular cell values in a consistent reproducible manner
+
+# Quasiquosure
+
+```{r}
+library(dplyr)
+DateColumn <- select(Data, Date)
+DateColumn
+```
+
+
+## Selecting Columns (Base R)
+
+As we saw [last week](/course/03_InsideFCSFile/index.qmd), there are multiple ways to select values from particular columns in base R. If we had wanted to retrieve the "Date" column, why not first identify its index position, and use [,] to extract the underlying data?
+
+```{r}
+colnames(Data)
+```
+
+```{r}
+colnames(Data)[4]
+```
+
+```{r}
+DataColumn <- Data[,4] # Column specified after the ,
+DataColumn
+```
+
+However, looking at the output, we see this looks like the values, not a column. Our suspicions are confirmed when running DataColumn
+
+```{r}
+str(DataColumn)
+```
+
+This is similarly the case when we use the $ accessor.
+
+```{r}
+DataColumn <- Data$Date
+str(DataColumn)
+```
+
+```{r}
+head(DataColumn, 3)
+```
+
+By contrast, when selecting two columns, the structure is maintained.
+
+```{r}
+TwoColumns <- Data[,4:5]
+```
+
+Why is the data.frame column structure lost in base R when isolating a single data.frame column? And who thought to make it that convoluted? If we were an R course in early 2010s, we might go into an explanation, but fortunately, we don't need to understand why, we have the `dplyr` R package to rescue us.
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
\ No newline at end of file
diff --git a/course/04_IntroToTidyverse/data/Dataset.csv b/course/04_IntroToTidyverse/data/Dataset.csv
new file mode 100644
index 0000000..a7ac736
--- /dev/null
+++ b/course/04_IntroToTidyverse/data/Dataset.csv
@@ -0,0 +1,197 @@
+bid,timepoint,Condition,Date,infant_sex,ptype,root,singletsFSC,singletsSSC,singletsSSCB,CD45,NotMonocytes,nonDebris,lymphocytes,live,Dump+,Dump-,Tcells,Vd2+,Vd2-,Va7.2+,Va7.2-,CD4+,CD4-,CD8+,CD8-,Tcells_count,lymphocytes_count,Monocytes,Debris,CD45_count
+INF0052,0,Ctrl,2025-07-26,Male,HEU-hi,2098368,1894070,1666179,1537396,0.595294250798103,0.882034914658278,0.862764872929831,0.642013848293767,0.902058127245466,0.210909963527936,0.69114816371753,0.280426432119924,0.00812036098585309,0.991879639014147,0.0144807035218576,0.977398935492289,0.63411644039303,0.343282495099259,0.273482590989919,0.0697999041093396,164771,587573,0.117965085341722,0.137235127070169,915203
+INF0100,0,Ctrl,2025-07-26,Male,HEU-lo,2020184,1791890,1697083,1579098,0.91067622148847,0.905225628925897,0.860266041374169,0.214584780608701,0.890898072803751,0.06252774780205,0.828370325001701,0.6748297864756,0.00726562012283844,0.992734379877162,0.0157749914762223,0.976959388400939,0.611911199043416,0.365048189357523,0.335769613092523,0.0292785762650006,208241,308583,0.0947743710741026,0.139733958625831,1438047
+INF0100,4,Ctrl,2025-07-26,Male,HEU-lo,1155040,1033320,875465,845446,0.970576476794497,0.984540014867714,0.957879279037742,0.740311003326956,0.875766489924721,0.200238033703334,0.675528456221388,0.611912879006119,0.00465131294001178,0.995348687059988,0.0157940186644356,0.979554668395553,0.663962143854429,0.315592524541123,0.286210430885364,0.0293820936557598,371723,607477,0.0154599851322861,0.0421207209622579,820570
+INF0100,9,Ctrl,2025-07-26,Male,HEU-lo,358624,328624,289327,276289,0.981957298336163,0.985507032701324,0.941261463155722,0.651158847639548,0.915324178374523,0.21469246357451,0.700631714800014,0.631443094723257,0.0113489672977625,0.988651032702238,0.0170234509466437,0.971627581755594,0.437894434882387,0.533733146873207,0.486123063683305,0.0476100831899025,111552,176662,0.014492967298676,0.058738536844278,271304
+INF0179,0,Ctrl,2025-07-26,Male,HU,1362216,1206309,1032946,982736,0.957259121473112,0.955627154569894,0.840783729283442,0.705478600197931,0.895214015462574,0.338318765284397,0.556895250178177,0.439643676723417,0.00475363034097958,0.99524636965902,0.0133218176895369,0.981924551969484,0.739256349883644,0.24266820208584,0.195063353177255,0.0476048489085843,291777,663667,0.0443728454301061,0.159216270716558,940733
+INF0179,4,Ctrl,2025-07-26,Male,HU,1044808,917398,735579,685592,0.985800592772378,0.962289360027343,0.949924318309938,0.755677606357558,0.967305621365496,0.369473107121179,0.597832514244317,0.532316488164001,0.00516055467686762,0.994839445323132,0.0124618383786368,0.982377606944495,0.587626439106926,0.394751167837569,0.357137602530621,0.0376135653069482,271870,510730,0.0377106399726569,0.0500756816900616,675857
+INF0179,9,Ctrl,2025-07-26,Male,HU,1434840,1265022,988445,940454,0.98001603480872,0.980521016426882,0.965775882646529,0.7879673632359,0.929742040488104,0.238631137450808,0.691110903037296,0.671869277013871,0.00263148726167518,0.997368512738325,0.0135632264001295,0.983805286338195,0.699414063700847,0.284391222637349,0.258078399465505,0.0263128231718439,487937,726238,0.0194789835731181,0.0342241173534709,921660
+INF0186,4,Ctrl,2025-07-26,Female,HEU-hi,972056,875707,767323,718000,0.977238161559889,0.949066281673239,0.9189703801145,0.642831183897545,0.875651539639993,0.325167887160318,0.550483652479675,0.489159666287549,0.00930047046239474,0.990699529537605,0.0387700898320295,0.951929439705576,0.572472964275678,0.379456475429897,0.355552634680058,0.0239038407498391,220634,451047,0.0509337183267607,0.0810296198854996,701657
+INF0186,9,Ctrl,2025-07-26,Female,HEU-hi,1521928,1359574,1175755,1097478,0.972123359192622,0.95816977290877,0.918676257212593,0.666392972431867,0.874952880877231,0.228757011606776,0.646195869270455,0.584933976966485,0.0179408320448605,0.982059167955139,0.0367713716164062,0.945287796338733,0.511920878550113,0.43336691778862,0.413879918339277,0.0194869994493432,415867,710964,0.0418302270912302,0.0813237427874071,1066884
+INF0052,0,PPD,2025-07-26,Male,HEU-hi,2363512,2136616,1875394,1732620,0.587383846429107,0.86198368302262,0.84296849897761,0.640804431111718,0.900925393503078,0.207432282202851,0.693493111300228,0.28356755679248,0.00740820851132861,0.992591791488671,0.015070567241659,0.977521224247012,0.634034499540367,0.343486724706646,0.274411939652842,0.0690747850538041,184930,652155,0.13801631697738,0.15703150102239,1017713
+INF0100,0,PPD,2025-07-26,Male,HEU-lo,2049112,1821676,1717636,1597085,0.906308054987681,0.925196086085125,0.877188934202263,0.217428431083332,0.892967332555915,0.0618142648792407,0.831153067676675,0.67357975578059,0.00713723011316732,0.992862769886833,0.0167180062928387,0.976144763593994,0.61457070480737,0.361574058786624,0.331227858312066,0.0303462004745574,211987,314717,0.0748039139148752,0.122811065797737,1447451
+INF0100,4,PPD,2025-07-26,Male,HEU-lo,1063496,946587,796056,767297,0.970989069421619,0.984871892268438,0.955604889421599,0.731350255088002,0.878230739443147,0.207272019864815,0.670958719578332,0.598987305531646,0.00525464338895391,0.994745356611046,0.0160978987554308,0.978647457855615,0.655948011201735,0.32269944665388,0.291208353504219,0.0314910931496608,326378,544883,0.0151281077315624,0.0443951105784008,745037
+INF0100,9,PPD,2025-07-26,Male,HEU-lo,788368,714198,626387,600011,0.982280324860711,0.98421389292798,0.812304137066302,0.622322817745458,0.95666386756238,0.231645873320537,0.725017994241843,0.648940520851509,0.0119359216203612,0.988064078379639,0.0185529848206671,0.969511093558972,0.430688888795526,0.538822204763445,0.490855848853673,0.0479663559097727,238021,366784,0.0157861070720199,0.187695862933698,589379
+INF0179,0,PPD,2025-07-26,Male,HU,1380336,1242311,1047081,1000877,0.947027456920281,0.957568538747365,0.913443785883539,0.699650158568056,0.885689771385574,0.331861109309995,0.55382866207558,0.444153752663348,0.00438297193336253,0.995617028066637,0.0129723747152426,0.982644653351395,0.749919368254518,0.232725285096877,0.185089747376498,0.0476355377203793,294549,663169,0.0424314612526349,0.0865562141164605,947858
+INF0179,4,PPD,2025-07-26,Male,HU,1240984,1089933,868877,814909,0.985594710575046,0.954141713460413,0.940082423397288,0.730307406900158,0.960259887718413,0.343572109294685,0.616687778423727,0.565465484408271,0.00432042932947419,0.995679570670526,0.012668837433671,0.983010733236855,0.631877110467921,0.351133622768934,0.317746020260492,0.0333876025084419,331680,586561,0.0458582865395869,0.0599175766027118,803170
+INF0179,9,PPD,2025-07-26,Male,HU,1705960,1492142,1163543,1107878,0.982091890984386,0.981690896825295,0.968165633920874,0.793325233126049,0.934456560020761,0.24759143063691,0.686865129383851,0.668731927040854,0.00273375511929428,0.997266244880706,0.0133032354632831,0.983963009417423,0.701636095269114,0.282326914148309,0.255933530597961,0.0263933835503475,577228,863168,0.0183091031747052,0.0318343660791259,1088038
+INF0186,4,PPD,2025-07-26,Female,HEU-hi,848584,759606,648405,607514,0.98247777005962,0.953948018744482,0.925017047291784,0.672087174907727,0.862222920218972,0.326410701287305,0.535812218931666,0.475772034261669,0.00948363941211915,0.990516360587881,0.0435251892798198,0.946991171308061,0.530910900945744,0.416080270362317,0.391218464279165,0.0248618060831521,190855,401148,0.0460519812555183,0.0749829527082158,596869
+INF0186,9,PPD,2025-07-26,Female,HEU-hi,1425416,1259825,1089955,1014266,0.977148992473375,0.955257297780522,0.913761528984783,0.633243835821001,0.879303888935805,0.238632506959039,0.640671381976766,0.581861724248368,0.0182240393014894,0.981775960698511,0.0373818723523113,0.944394088346199,0.503380552444431,0.441013535901768,0.42133814561158,0.019675390290188,365177,627601,0.0447427022194777,0.0862384710152166,991089
+INF0052,0,SEB,2025-07-26,Male,HEU-hi,2523776,2282292,2041563,1889418,0.578359050247219,0.887807226093147,0.867014958426446,0.67185626879412,0.911565163264,0.233447156619843,0.678118006644156,0.274166109354803,0.00922563305131479,0.990774366948685,0.00842081207430187,0.982353554874383,0.608325425884434,0.37402812898995,0.281175634790126,0.0928524941998241,201287,734179,0.112192773906853,0.132985041573554,1092762
+INF0100,0,SEB,2025-07-26,Male,HEU-lo,1900240,1685653,1598641,1488015,0.911195787676871,0.901785786721913,0.85768873633445,0.217299850354716,0.890574990411735,0.0878318982048732,0.802743092206862,0.650759763908075,0.00764600957576643,0.992353990424234,0.008955114898766,0.983398875525468,0.611049683415565,0.372349192109902,0.335548207412353,0.0368009846975497,191734,294631,0.0982142132780872,0.14231126366555,1355873
+INF0100,4,SEB,2025-07-26,Male,HEU-lo,1009776,900919,761137,732910,0.969596539820715,0.983067066126111,0.953615609876912,0.724198489502932,0.875529258600756,0.21414206184966,0.661387196751095,0.594879866313018,0.00466770756436471,0.995332292435635,0.00950526872799253,0.985827023707643,0.639848307670197,0.345978716037446,0.310218000561823,0.0357607154756227,306146,514635,0.0169329338738888,0.0463843901230885,710627
+INF0179,0,SEB,2025-07-26,Male,HU,783096,710001,604070,579147,0.966198564440462,0.97132088689371,0.892646330849883,0.779109353415384,0.925393435741696,0.34958379877376,0.575809636967936,0.480378102012308,0.00410640360217544,0.995893596397825,0.00684718926223207,0.989046407135592,0.725620616056038,0.263425791079554,0.185747914567706,0.0776778765118489,209429,435967,0.0286791131062903,0.107353669150117,559571
+INF0179,4,SEB,2025-07-26,Male,HU,985280,860127,686367,640888,0.984159478723271,0.951545496055402,0.933428565992745,0.757827363587935,0.925535943295766,0.332859124373155,0.592676818922611,0.519413626673417,0.00457156206449326,0.995428437935507,0.00662171632953914,0.988806721605968,0.56142407179165,0.427382649814318,0.377611026527143,0.0497716232871747,248274,477989,0.048454503944598,0.0665714340072551,630736
+INF0179,9,SEB,2025-07-26,Male,HU,1111728,981610,783127,748455,0.984322370750413,0.984891159611305,0.974006442058798,0.818738708412004,0.935493764734359,0.263124562735625,0.672369201998733,0.651935899943964,0.00303888758913223,0.996961112410868,0.00824949902857317,0.988711613382295,0.696706303593771,0.292005309788524,0.256265957338596,0.0357393524499283,393236,603182,0.0151088403886953,0.0259935579412016,736721
+INF0186,4,SEB,2025-07-26,Female,HEU-hi,492984,443892,386199,365672,0.980110590912074,0.977871032006228,0.943936785537906,0.6789695283748,0.860509077758874,0.334175769082197,0.526333308676677,0.470724330366316,0.00879115123049927,0.991208848769501,0.0126410992867557,0.978567749482745,0.504692397007342,0.473875352475403,0.445432879080203,0.0284424733952002,114547,243342,0.0221289679937723,0.0560632144620939,358399
+INF0186,9,SEB,2025-07-26,Female,HEU-hi,1226128,1088491,957607,891839,0.9712649928967,0.956045402280273,0.910587708320827,0.60486116562689,0.868179059354351,0.229586325099535,0.638592734254816,0.574161446583374,0.0188780852655198,0.98112191473448,0.00923128064489321,0.971890634089587,0.483639990027425,0.488250644062162,0.460942408376963,0.027308235685199,300825,523938,0.0439545977197268,0.0894122916791732,866212
+INF0134,0,Ctrl,2025-07-29,Female,HEU-lo,1205504,1088093,965389,876164,0.787154003131834,0.798904123095483,0.783886926614816,0.577284116019696,0.882294876914846,0.15782427745084,0.724470599464006,0.321159193146112,0.00979932116434392,0.990200678835656,0.0251826130480347,0.965018065787621,0.698582891464502,0.26643517432312,0.225141945474168,0.0412932288489512,127866,398139,0.201095876904517,0.216113073385184,689676
+INF0134,4,Ctrl,2025-07-29,Female,HEU-lo,1277824,1143114,940824,904464,0.981203231969432,0.979719717892464,0.962388291117489,0.775382184947429,0.939878481027374,0.321119916061518,0.618758564965856,0.511173147823863,0.00979673063255153,0.990203269367449,0.0261066098081023,0.964096659559346,0.636952380952381,0.327144278606965,0.275565031982942,0.0515792466240227,351750,688123,0.0202802821075357,0.0376117088825112,887463
+INF0134,9,Ctrl,2025-07-29,Female,HEU-lo,424520,386914,358089,331672,0.95725897875009,0.970383878852017,0.900017638017487,0.427759719807494,0.822040762230142,0.119105822754985,0.702934939475157,0.535733219450417,0.029535864978903,0.970464135021097,0.0286699927156778,0.941794142305419,0.461001388144422,0.480792754160997,0.420387855797908,0.0604048983630891,72759,135812,0.029616121147983,0.0999823619825132,317496
+INF0148,0,Ctrl,2025-07-29,Female,HU,2034128,1833204,1602246,1509990,0.671517692170147,0.91727885520989,0.899144464661706,0.647882365123744,0.876630088150722,0.220344839658844,0.656285248491878,0.356705224045313,0.00385772505174216,0.996142274948258,0.0201335694625216,0.976008705485736,0.668798941686048,0.307209763799689,0.267719290758956,0.0394904730407323,234335,656943,0.0827211447901103,0.100855535338294,1013985
+INF0148,9,Ctrl,2025-07-29,Female,HU,872400,793908,670148,623296,0.982887745148373,0.981657770595629,0.948915332256011,0.610627948353819,0.969135686962194,0.210789411075974,0.75834627588622,0.728201043067291,0.0133988223719954,0.986601177628005,0.0208287446955347,0.96577243293247,0.550636535835426,0.415135897097044,0.362616184309061,0.0525197127879829,272412,374089,0.0183422294043714,0.051084667743989,612630
+INF0191,0,Ctrl,2025-07-29,Female,HEU-hi,1997680,1808121,1593734,1482293,0.482659636117826,0.866839147213684,0.851001407519537,0.578498916056206,0.822556133013436,0.201008497570569,0.621547635442867,0.134772387365512,0.035317318035138,0.964682681964862,0.0205091430620294,0.944173538902833,0.455557547508067,0.488615991394765,0.379221943348871,0.109394048045895,55780,413883,0.133160852786316,0.148998592480463,715443
+INF0191,4,Ctrl,2025-07-29,Female,HEU-hi,644496,572957,458792,438631,0.974322380315117,0.97583347372756,0.953489732502199,0.793023810860897,0.964819880028208,0.240123571536058,0.72469630849215,0.672588540421878,0.00767715585503775,0.992322844144962,0.0165168524538384,0.975805991691124,0.665047883517804,0.310758108173319,0.223865864732901,0.0868922434404187,227949,338913,0.0241665262724396,0.0465102674978005,427368
+INF0191,9,Ctrl,2025-07-29,Female,HEU-hi,1504536,1353339,1109880,1047290,0.954451011658662,0.972429613430347,0.953109634278957,0.693557439222399,0.937200604092772,0.393165154751894,0.544035449340878,0.415256083119011,0.0211785956197787,0.978821404380221,0.0144085311843271,0.964412873195894,0.570575056011949,0.393837817183945,0.260659638397277,0.133178178786668,287885,693271,0.0275703865696533,0.0468903657210428,999587
+INF0134,0,PPD,2025-07-29,Female,HEU-lo,1245024,1126248,993895,896183,0.791566008281791,0.804229843188777,0.789978121986839,0.592486763238172,0.900348082216877,0.154857329117327,0.74549075309955,0.331456116182849,0.00945360055128058,0.990546399448719,0.0258771677960262,0.964669231652693,0.69642241874354,0.268246812909154,0.226039393591363,0.0422074193177903,139312,420303,0.195770156811223,0.210021878013161,709388
+INF0134,4,PPD,2025-07-29,Female,HEU-lo,1340280,1201488,986763,947027,0.983254965275541,0.983444466042147,0.964371666152975,0.763760391507879,0.947150550485805,0.320176042970233,0.626974507515572,0.513328365134493,0.010466371201455,0.989533628798545,0.0256112459391795,0.963922382859365,0.628647890564653,0.335274492294713,0.281901751425738,0.0533727408689745,365074,711190,0.016555533957853,0.0356283338470246,931169
+INF0134,9,PPD,2025-07-29,Female,HEU-lo,929672,828324,752940,697560,0.958546935030678,0.966002835589641,0.899239356069897,0.431271349178337,0.776881543311128,0.129113248048494,0.647768295262634,0.490593583870554,0.0258639579843219,0.974136042015678,0.0275392129835797,0.946596829032098,0.444189975330633,0.502406853701465,0.440365870036969,0.0620409836644966,141471,288367,0.0339971644103588,0.100760643930103,668644
+INF0148,0,PPD,2025-07-29,Female,HU,1862952,1676887,1450059,1372237,0.674659697996775,0.911606590242095,0.896064238982148,0.658815739587575,0.888040699952617,0.226900924208963,0.661139775743655,0.360931718058063,0.00422000345231714,0.995779996547683,0.0193193484205649,0.976460648127118,0.664716410316977,0.311744237810141,0.271842719699103,0.0399015181110374,220142,609927,0.0883934097579049,0.103935761017852,925793
+INF0148,4,PPD,2025-07-29,Female,HU,632312,562703,496868,467363,0.972633691584486,0.986906393472556,0.950157620448201,0.512846121525036,0.914050770827793,0.240886902361813,0.67316386846598,0.639881437505898,0.00312388971194519,0.996876110288055,0.0167054359703163,0.980170674317738,0.619850777285434,0.360319897032305,0.305376978407621,0.0549429186246841,149173,233126,0.0130936065274444,0.0498423795517992,454573
+INF0148,9,PPD,2025-07-29,Female,HU,1110656,997595,827243,774214,0.980991043819926,0.975244141846512,0.945795704262163,0.654739913390046,0.956100572522538,0.196441391348414,0.759659181174124,0.730733420073079,0.012606845839273,0.987393154160727,0.0212756003456494,0.966117553815078,0.556118489490167,0.40999906432491,0.358245223929065,0.0517538403958456,363374,497273,0.0247558581534885,0.054204295737837,759497
+INF0191,0,PPD,2025-07-29,Female,HEU-hi,1968064,1782256,1568308,1456260,0.489216898081387,0.876586653790494,0.861205428766737,0.584636741729328,0.802235715263222,0.199096782557964,0.603138932705259,0.12735317914773,0.0365357062061685,0.963464293793832,0.0206055350275243,0.942858758766307,0.450814418218837,0.49204434054747,0.378968403589473,0.113075936957997,53044,416511,0.123413346209506,0.138794571233263,712427
+INF0191,4,PPD,2025-07-29,Female,HEU-hi,1066672,941050,756678,723688,0.979242435966881,0.966806647983676,0.947546516976968,0.794993692374123,0.960648579568146,0.289526700213886,0.67112187935426,0.608381479805107,0.00961333671769467,0.990386663282305,0.0165308545804121,0.973855808701893,0.631869013546198,0.341986795155695,0.243043824561711,0.0989429705939846,342753,563385,0.0331933520163237,0.052453483023032,708666
+INF0191,9,PPD,2025-07-29,Female,HEU-hi,2415400,2151222,1768089,1652532,0.93912916663641,0.928039145818043,0.910939268954168,0.649623922558912,0.888403635072378,0.410601104170097,0.477802530902281,0.346151175685246,0.0267177103690162,0.973282289630984,0.0146425890160524,0.958639700614931,0.53798476712266,0.420654933492272,0.276607389492868,0.144047543999404,348982,1008178,0.0719608541819566,0.0890607310458322,1551941
+INF0134,0,SEB,2025-07-29,Female,HEU-lo,1193160,1079791,959139,869331,0.782985997278367,0.805832160476234,0.791506653699128,0.566516423427368,0.876204899731078,0.163671867909018,0.71253303182206,0.346036051689129,0.00822116969933151,0.991778830300668,0.0153107107527204,0.976468119547948,0.632348091969184,0.344120027578764,0.261855870979346,0.0822641565994185,133436,385613,0.194167839523766,0.208493346300872,680674
+INF0134,4,SEB,2025-07-29,Female,HEU-lo,1291352,1157622,964426,923312,0.982650501672241,0.977873740897373,0.956105690223555,0.740553492642399,0.941799288285888,0.339208720358268,0.60259056792762,0.501288140032951,0.00984813621721123,0.990151863782789,0.0180811424669329,0.972070721315856,0.600050472811484,0.372020248504372,0.304793432596529,0.0672268159078426,336815,671899,0.0221262591026272,0.0438943097764449,907293
+INF0148,0,SEB,2025-07-29,Female,HU,2042880,1841683,1602125,1513482,0.68014684020028,0.901883639825528,0.887045726109638,0.655521231020313,0.869403233909367,0.222301259508556,0.647101974400811,0.382685202886244,0.00371760168221476,0.996282398317785,0.0109359449485151,0.98534645336927,0.659413470884596,0.325932982484675,0.255453450592686,0.0704795318919882,258231,674787,0.0981163601744722,0.112954273890362,1029390
+INF0191,0,SEB,2025-07-29,Female,HEU-hi,1956304,1772838,1558215,1448120,0.500612518299588,0.874513585131051,0.858720706479232,0.584808268742405,0.813640598648442,0.205064216721114,0.608576381927327,0.153905485251973,0.0330426519946666,0.966957348005333,0.0149274318380358,0.952029916167298,0.46397645940934,0.488053456757958,0.365047740195252,0.123005716562706,65249,423955,0.125486414868949,0.141279293520768,724947
+INF0191,9,SEB,2025-07-29,Female,HEU-hi,1814944,1620273,1311159,1239312,0.955994132228204,0.953430820197928,0.93669852925661,0.694926040809436,0.916094499053236,0.411346105029447,0.504748394023789,0.378588927175097,0.0235030670122937,0.976496932987706,0.0090374201165208,0.967459512871185,0.549190899058081,0.418268613813105,0.271844442163078,0.146424171650027,311704,823331,0.0465691798020721,0.0633014707433901,1184775
+INF0124,0,Ctrl,2025-07-31,Male,HEU-hi,1229248,1096279,962417,891568,0.771360120596522,0.857697900308265,0.851096376432269,0.620287326237422,0.848707405809876,0.216735742550119,0.631971663259757,0.164790521913621,0.0142253581233908,0.985774641876609,0.00988662389575658,0.975888017980853,0.672020143107103,0.30386787487375,0.264805041466919,0.039062833406831,70297,426584,0.142302099691735,0.148903623567731,687720
+INF0124,4,Ctrl,2025-07-31,Male,HEU-hi,1105296,993220,820093,766344,0.899851763698809,0.947894129316295,0.938007181016131,0.699090481963352,0.91153726482607,0.258244311228194,0.653292953597876,0.479005994731274,0.00947930920995652,0.990520690790043,0.00774280715733315,0.98277788363271,0.509990299838908,0.472787583793802,0.423485648958099,0.0493019348357035,230924,482090,0.0521058706837046,0.0619928189838688,689596
+INF0124,9,Ctrl,2025-07-31,Male,HEU-hi,1017128,915840,757350,701114,0.745743202959861,0.954792091819658,0.946617678841582,0.744550550730514,0.902542840922811,0.341029415164569,0.561513425758241,0.534849430628659,0.00372698848763994,0.99627301151236,0.0102107957792816,0.986062215733079,0.662625893924913,0.323436321808166,0.290926031765853,0.0325102900423128,208211,389289,0.045207908180342,0.053382321158418,522851
+INF0149,0,Ctrl,2025-07-31,Female,HU,1327920,1192637,1046943,958252,0.895218585507779,0.886543606362455,0.868127692065583,0.541476607079368,0.836291692411029,0.157884879107347,0.678406813303682,0.232291287677367,0.017191844300278,0.982808155699722,0.0213438368860056,0.961464318813716,0.62177015755329,0.339694161260426,0.299629286376274,0.040064874884152,107900,464503,0.113456393637545,0.131872307934417,857845
+INF0149,4,Ctrl,2025-07-31,Female,HU,1026960,910155,731344,694429,0.945859115906738,0.979643196433791,0.947015370749294,0.669381211634025,0.91294172233329,0.292650641047511,0.62029108128578,0.545926385865795,0.00758244871431666,0.992417551285683,0.0194019031113037,0.97301564817438,0.672871498325195,0.300144149849184,0.263023480593931,0.0371206692552536,240028,439671,0.0203568035662087,0.0529846292507065,656832
+INF0149,9,Ctrl,2025-07-31,Female,HU,757368,665858,536020,502656,0.935176343264579,0.969391922939465,0.928508824180126,0.660841317925765,0.898426811484566,0.184607411079599,0.713819400404966,0.632452686846316,0.00949268833951758,0.990507311660482,0.0293433502827447,0.961163961377738,0.614535774455761,0.346628186921977,0.304509154209104,0.0421190327128729,196467,310643,0.0306080770605354,0.0714911758198744,470072
+INF0169,0,Ctrl,2025-07-31,Female,HEU-lo,1288912,1144653,1051293,973587,0.877778770669699,0.842549795575443,0.826082326812498,0.351936709127375,0.771953332025548,0.130222135036557,0.641731196988991,0.251161213314138,0.0128673550436855,0.987132644956315,0.0153958167858088,0.971736828170506,0.745724119671697,0.226012708498809,0.135041037860736,0.0909716706380725,75540,300763,0.157450204424557,0.173917673187502,854594
+INF0169,4,Ctrl,2025-07-31,Female,HEU-lo,1068232,944862,869444,785215,0.916182192138459,0.94555323881012,0.865148735056992,0.368202668890742,0.781063480378277,0.167733167223512,0.613330313154765,0.37912679087151,0.0106148867313916,0.989385113268608,0.0155240229026637,0.973861090365945,0.812735872541698,0.161125217824247,0.0949166044311675,0.0662086133930794,100425,264885,0.0544467611898805,0.134851264943008,719400
+INF0169,9,Ctrl,2025-07-31,Female,HEU-lo,778672,685649,594814,542125,0.951313811390362,0.975039313130295,0.922139642565601,0.573702181951444,0.867772310021766,0.302004893942057,0.565767416079709,0.461223620705971,0.0194995053676767,0.980500494632323,0.0165243835415674,0.963976111090756,0.829546037445499,0.134430073645257,0.0826072619352948,0.0518228117099623,136465,295876,0.0249606868697053,0.0778603574343989,515731
+INF0124,0,PPD,2025-07-31,Male,HEU-hi,1246824,1108772,973652,900843,0.781135003546678,0.864643019554343,0.85943468622101,0.643083503865393,0.812693221368985,0.207716700734766,0.604976520634219,0.152471134191481,0.014218009478673,0.985781990521327,0.00927576561299767,0.976506224908329,0.66962331695581,0.30688290795252,0.266446367233358,0.0404365407191617,68997,452525,0.135356980445657,0.14056531377899,703680
+INF0124,4,PPD,2025-07-31,Male,HEU-hi,1515456,1357582,1150459,1069355,0.887128222152606,0.906098634382362,0.896618897280887,0.637026105380776,0.772967212626465,0.207635714971257,0.565331497655208,0.425400203204273,0.00905176270144743,0.990948237298553,0.0075463771554826,0.98340186014307,0.516109959272903,0.467291900870167,0.416626147029878,0.0506657538402891,257077,604318,0.0939013656176376,0.103381102719113,948655
+INF0124,9,PPD,2025-07-31,Male,HEU-hi,1583312,1418103,1190344,1093566,0.859891401159144,0.97322799644387,0.962200164194532,0.606947640660692,0.906363996341604,0.342808133972968,0.563555862368636,0.530500646526802,0.00374530598225108,0.996254694017749,0.00994454701283775,0.986310147004911,0.648634812850297,0.337675334154614,0.302699328553169,0.0349760056014453,302779,570742,0.0267720035561303,0.0377998358054678,940348
+INF0149,0,PPD,2025-07-31,Female,HU,1153168,1032394,892184,812261,0.891197533797634,0.892793744862789,0.87600240369672,0.594862443620188,0.826509711759078,0.153493167863413,0.673016543895665,0.213143154394211,0.0175960427970626,0.982403957202937,0.0222047896101632,0.960199167592774,0.618411017410821,0.341788150181953,0.301834782419211,0.0399533677627422,91782,430612,0.107206255137211,0.12399759630328,723885
+INF0149,4,PPD,2025-07-31,Female,HU,1238584,1092917,869629,826659,0.951025755480797,0.982711206425041,0.953305502344265,0.687894791738216,0.949294107857731,0.307957581753127,0.641336526104603,0.564305063747562,0.00772661290586836,0.992273387094132,0.0191494172272666,0.973123969866865,0.66995763142287,0.303166338443995,0.26586036391757,0.0373059745264255,305179,540805,0.0172887935749593,0.0466944976557352,786174
+INF0149,9,PPD,2025-07-31,Female,HU,1216752,1066815,870494,816153,0.934514729468617,0.965079643952396,0.928110008168274,0.65979596358759,0.877932798257659,0.211600636685737,0.666332161571922,0.587092210138088,0.0110308925918028,0.988969107408197,0.028672197344327,0.96029691006387,0.60315864650711,0.357138263556761,0.315184316433288,0.0419539471234722,295443,503231,0.0349203560476041,0.0718899918317257,762707
+INF0169,0,PPD,2025-07-31,Female,HEU-lo,1218624,1082765,987457,903485,0.85632190905217,0.842848538273226,0.825762530471491,0.384300105729287,0.764246291070654,0.123404512937109,0.640841778133545,0.249883123740848,0.012436739528373,0.987563260471627,0.0137019489609131,0.973861311510714,0.744037364057284,0.22982394745343,0.134381393345537,0.0954425541078927,74296,297323,0.157151461726774,0.174237469528509,773674
+INF0169,4,PPD,2025-07-31,Female,HEU-lo,940776,820971,737842,662123,0.926151183390397,0.92995404630593,0.8459621738152,0.381591778561248,0.740784266801138,0.161742207331561,0.579042059469577,0.342556901223066,0.0119512468967926,0.988048753103207,0.015793610199728,0.972255142903479,0.809965194176574,0.162289948726905,0.0932521613293579,0.0690377873975474,80159,234002,0.0700459536940704,0.1540378261848,613226
+INF0169,9,PPD,2025-07-31,Female,HEU-lo,1054184,923351,814226,740463,0.941281333435972,0.956064988579365,0.903875842200108,0.518514054842005,0.787211258564013,0.264463358753279,0.522747899810734,0.416426855858947,0.0214824412771188,0.978517558722881,0.0152895445031396,0.963228014219741,0.829416259676401,0.13381175454334,0.0789527891292069,0.0548589654141334,150495,361396,0.0439350114206352,0.0961241577998921,696984
+INF0124,0,SEB,2025-07-31,Male,HEU-hi,1004008,900404,794342,737214,0.815346697159848,0.858233028606603,0.850839731485564,0.645535989086402,0.90635582518517,0.244872713402848,0.661483111782322,0.178788831561097,0.0139389396603915,0.986061060339608,0.00593882434341396,0.980122235996195,0.65523106639375,0.324891169602445,0.256133421743016,0.0687577478594286,69374,388022,0.141766971393397,0.149160268514436,601085
+INF0124,4,SEB,2025-07-31,Male,HEU-hi,1571248,1425147,1204162,1120656,0.879540197884096,0.899691780752428,0.891540913619476,0.636573186345826,0.779254310331088,0.235330211683555,0.543924098647533,0.407646235691996,0.00896878518703866,0.991031214812961,0.00402305141999249,0.987008163392969,0.48618713249093,0.500821030902039,0.445170774427624,0.0556502564744151,255776,627446,0.100308219247572,0.108459086380524,985662
+INF0124,9,SEB,2025-07-31,Male,HEU-hi,1109328,998592,812606,756059,0.904774627376964,0.966187324851658,0.954087562110507,0.656252421195124,0.903795347925456,0.368147412222277,0.53564793570318,0.510429521649834,0.00333419161127865,0.996665808388721,0.00606176982731157,0.99060403856141,0.663831440030374,0.326772598531035,0.289782273796483,0.0369903247345521,229141,448918,0.0338126751483416,0.0459124378894926,684063
+INF0149,0,SEB,2025-07-31,Female,HU,1225472,1099942,970297,887529,0.895820868951888,0.877578870711525,0.860238193762287,0.535075660290265,0.797532326800981,0.16081481638189,0.636717510419091,0.218588175007816,0.0179800412938747,0.982019958706125,0.0121838437715072,0.969836114934618,0.576006538196834,0.393829576737784,0.319565123881624,0.0742644528561597,92992,425421,0.122421129288475,0.139761806237713,795067
+INF0149,4,SEB,2025-07-31,Female,HU,1124960,999291,795445,758864,0.946020630837673,0.983822281902379,0.956350527440413,0.711361315836028,0.920366095083681,0.332892750353935,0.587473344729746,0.523146271591014,0.007048105283646,0.992951894716354,0.0117006782350916,0.981251216481262,0.663539997903909,0.317711218577353,0.275523648395742,0.0421875701816113,267164,510687,0.0161777180976207,0.043649472559587,717901
+INF0149,9,SEB,2025-07-31,Female,HU,531432,467288,379931,358096,0.92417396452348,0.969384455933499,0.925790846157798,0.651432421897426,0.89664497395483,0.255715789913121,0.640929184041709,0.552259644598236,0.0108684696791534,0.989131530320847,0.0216865445993617,0.967444985721485,0.571140601377457,0.396304384344028,0.34592642365194,0.050377960692088,119060,215587,0.0306155440665009,0.0742091538422024,330943
+INF0169,0,SEB,2025-07-31,Female,HEU-lo,1237144,1103284,1012883,939441,0.876379676850382,0.844672764837418,0.827158034609204,0.358358425228985,0.774778927531614,0.138666413592779,0.636112513938835,0.265283572680222,0.0129553207527885,0.987044679247212,0.00994007844740574,0.977104600799806,0.719211948536458,0.257892652263348,0.137052983940002,0.120839668323346,78269,295039,0.155327235162582,0.172841965390796,823307
+INF0169,4,SEB,2025-07-31,Female,HEU-lo,698912,617805,566286,511948,0.921683452225617,0.933040728699979,0.850002331229575,0.381090337265341,0.73006189557277,0.16779094533948,0.56227095023329,0.332923662126916,0.0121103798483279,0.987889620151672,0.0104566866000735,0.977432933551599,0.795125780910701,0.182307152640898,0.0982360605351953,0.0840710921057027,59866,179819,0.0669592713000208,0.149997668770425,471854
+INF0169,9,SEB,2025-07-31,Female,HEU-lo,887744,782828,694751,633595,0.93819869159321,0.95722682601045,0.905700846850302,0.520298163980096,0.774770842426888,0.261616308582699,0.513154533844189,0.40678662075432,0.0211186443372307,0.978881355662769,0.0102612607600169,0.968620094902752,0.834238115298101,0.134381979604651,0.0766693425957572,0.0577126370088942,125813,309285,0.0427731739895498,0.0942991531496977,594438
+INF0019,0,Ctrl,2025-08-05,Female,HEU-lo,1324344,1197859,1022143,939295,0.930082668384267,0.868875783805811,0.863010546895568,0.690163480315285,0.91948810996746,0.102868932666824,0.816619177300636,0.345066357958145,0.00882458965177477,0.991175410348225,0.0146163274134243,0.976559082934801,0.733344548316551,0.24321453461825,0.222489245632165,0.0207252889860854,208055,602942,0.131124216194189,0.136989453104432,873622
+INF0019,4,Ctrl,2025-08-05,Female,HEU-lo,1244280,1117290,891334,840761,0.905377390245266,0.955721578652822,0.935905654973818,0.704970796341595,0.886148318760855,0.352806786078997,0.533341532681858,0.451748697421678,0.00439318375883277,0.995606816241167,0.0133404284282302,0.982266387812937,0.652608478638402,0.329657909174535,0.293807054669356,0.035850854505179,242421,536628,0.0442784213471781,0.0640943450261822,761206
+INF0019,9,Ctrl,2025-08-05,Female,HEU-lo,1844096,1632745,1274587,1217805,0.930321356867479,0.964861644379717,0.957356458802242,0.793717286729335,0.940427604582526,0.21288596395631,0.727541640626216,0.703361275385269,0.00365696325012807,0.996343036749872,0.0164096937194463,0.979933343030426,0.699705292715165,0.280228050315261,0.26313218190902,0.0170958684062407,632492,899242,0.0351383556202833,0.042643541197758,1132950
+INF0032,0,Ctrl,2025-08-05,Female,HU,1124480,1006880,824473,773851,0.973138239790347,0.93983645480331,0.936204625370486,0.81375420946958,0.977386102358157,0.189406487176265,0.787979615181892,0.589146047137036,0.00786906496341065,0.992130935036589,0.015089991524344,0.977040943512245,0.713304010148629,0.263736933363617,0.236961061839051,0.0267758715245656,361034,612809,0.0601635451966898,0.0637953746295136,753064
+INF0032,4,Ctrl,2025-08-05,Female,HU,711784,637561,497456,468981,0.969265279403643,0.940503820118926,0.934273715425889,0.812375293411092,0.942385025955985,0.363519181973521,0.578865843982463,0.431871295145405,0.0113430439989717,0.988656956001028,0.0133871746477637,0.975269781353265,0.678833215241941,0.296436566111324,0.218145108194707,0.078291457916617,159481,369279,0.0594961798810736,0.0657262845741112,454567
+INF0032,9,Ctrl,2025-08-05,Female,HU,1248456,1118033,911093,872062,0.984879515447296,0.972946036447636,0.965117199688896,0.784273864911815,0.958258238642268,0.255593131767801,0.702665106874467,0.660764496120809,0.0196613246399019,0.980338675360098,0.0175763390078794,0.962762336352219,0.707335869167152,0.255426467185067,0.221487035118977,0.0339394320660905,445087,673594,0.0270539635523638,0.0348828003111042,858876
+INF0180,0,Ctrl,2025-08-05,Male,HEU-hi,1614504,1435508,1209469,1117422,0.939361315599657,0.867784231701032,0.861666077588712,0.699933216660966,0.927674650943114,0.107572676515665,0.820101974427449,0.387859435356761,0.0045269829237993,0.995473017076201,0.0201398100772745,0.975333206998926,0.66050084573867,0.314832361260256,0.295819032980299,0.019013328279957,284958,734694,0.132215768298968,0.138333922411288,1049663
+INF0180,4,Ctrl,2025-08-05,Male,HEU-hi,528392,465660,387783,356166,0.986118832229915,0.924284355763591,0.897517809248851,0.643003570391376,0.977466048521721,0.210988456275987,0.766477592245735,0.5716158114038,0.012913271155455,0.987086728844545,0.0140674867536331,0.973019242090912,0.521325876119357,0.451693365971555,0.374554581228891,0.0771387847426641,129092,225837,0.0757156442364089,0.102482190751149,351222
+INF0019,0,PPD,2025-08-05,Female,HEU-lo,1271392,1149523,966376,895883,0.931680810998758,0.911539433816914,0.906465614842628,0.722051763736152,0.940014601446871,0.10286719320369,0.83714740824318,0.358623149930311,0.00879542878293659,0.991204571217063,0.0149813773798783,0.976223193837185,0.735419992134546,0.24080320170264,0.219931986952599,0.0208712147500405,216135,602680,0.0884605661830864,0.0935343851573722,834677
+INF0019,4,PPD,2025-08-05,Female,HEU-lo,1374576,1213048,954728,905952,0.929225830949101,0.959040618459221,0.938433230304312,0.715411827034784,0.885281723115343,0.3552298184499,0.530051904665442,0.4494967273162,0.00475780623760218,0.995242193762398,0.0131135187449439,0.982128675017454,0.658989409448383,0.323139265569071,0.289232508228271,0.0339067573408,270713,602258,0.0409593815407788,0.0615667696956882,841834
+INF0019,9,PPD,2025-08-05,Female,HEU-lo,1725968,1521365,1188395,1141230,0.939210325701217,0.973696068964552,0.966078434116555,0.812773182939857,0.963162395615118,0.221661549057308,0.74150084655781,0.717317416133383,0.00372374217686095,0.996276257823139,0.0165176049632827,0.979758652859856,0.698383284606239,0.281375368253618,0.263582377594178,0.01779299065944,624909,871175,0.0263039310354479,0.0339215658834451,1071855
+INF0032,0,PPD,2025-08-05,Female,HU,1240368,1107613,907113,859658,0.976240551475121,0.915239272049598,0.912261553108612,0.6988631285948,0.983314834043467,0.168643618426998,0.81467121561647,0.671650392406596,0.00751404440901787,0.992485955590982,0.0149722411906714,0.977513714400311,0.721688426086934,0.255825288313376,0.229117429790648,0.0267078585227287,393929,586509,0.0847607279504023,0.0877384468913878,839233
+INF0032,4,PPD,2025-08-05,Female,HU,774384,688988,533872,502702,0.962799034020155,0.938179879793637,0.931460885411394,0.810487994859515,0.962080366679668,0.362208337475814,0.599872029203853,0.450324643045603,0.0114179290356181,0.988582070964382,0.0143332654031655,0.974248805561216,0.680716889704051,0.293531915857165,0.216431175418337,0.0771007404388289,176652,392277,0.0618201202063632,0.0685391145886062,484001
+INF0032,9,PPD,2025-08-05,Female,HU,1335992,1193171,967189,926155,0.985408489939589,0.971373190553569,0.9628320445827,0.777570808236755,0.954451745455109,0.258002967689387,0.696448777765722,0.653293275632959,0.0199027189094164,0.980097281090584,0.0174696131404968,0.962627667950087,0.705177899289266,0.257449768660821,0.222760755384433,0.0346890132763883,463605,709643,0.0286268094464307,0.0371679554172999,912641
+INF0180,0,PPD,2025-08-05,Male,HEU-hi,1570368,1398767,1158451,1068711,0.942663638719916,0.896367507581134,0.890511050340717,0.70957332234834,0.929576735786159,0.10813752274956,0.821439213036599,0.407784021520629,0.00477523464515067,0.995224765354849,0.0192518799055931,0.975972885449256,0.659836571710851,0.316136313738405,0.296812393654976,0.0193239200834294,291504,714849,0.103632492418866,0.109488949659283,1007435
+INF0180,4,PPD,2025-08-05,Male,HEU-hi,638600,551845,454723,419608,0.989857200053383,0.93640815501069,0.908740056626668,0.631904986613764,0.981166869234902,0.198142214331163,0.783024654903739,0.594365682019942,0.0128398258963198,0.98716017410368,0.013935986769146,0.973224187334534,0.518778966531837,0.454445220802697,0.378848582362707,0.07559663843999,155999,262463,0.0635918449893103,0.0912599433733315,415352
+INF0180,9,PPD,2025-08-05,Male,HEU-hi,1516936,1391367,1205249,1116976,0.580700032946097,0.859905832002319,0.852679810307295,0.619310298044488,0.699471249831965,0.106603900403782,0.592867349428183,0.434677945342567,0.018629983219843,0.981370016780157,0.0152624977807813,0.966107518999376,0.298383263368287,0.667724255631089,0.591028056651643,0.0766961989794457,174611,401702,0.140094167997681,0.147320189692705,648628
+INF0019,0,SEB,2025-08-05,Female,HEU-lo,1353632,1227164,1049849,966363,0.931358092145498,0.874083086119352,0.868618823816984,0.700898858926925,0.923351774646101,0.104785758445223,0.818566016200878,0.359317090182775,0.00802054105564085,0.991979458944359,0.00897788836536256,0.983001570578997,0.701554696737078,0.281446873841919,0.234563326098082,0.0468835477438368,226668,630830,0.125916913880648,0.131381176183016,900030
+INF0019,4,SEB,2025-08-05,Female,HEU-lo,1170048,1047919,832442,792400,0.917228672387683,0.96310875439591,0.942818775694402,0.723126475622307,0.904638140557901,0.344459517825171,0.56017862273273,0.484003295425789,0.00425346232619575,0.995746537673804,0.00847547576273385,0.98727106191107,0.625577381958558,0.361693679952512,0.323259205679669,0.0384344742728427,254381,525577,0.0368912456040902,0.0571812243055976,726812
+INF0019,9,SEB,2025-08-05,Female,HEU-lo,1710322,1517501,1200599,1151235,0.925440939512784,0.969865778111507,0.962381265252487,0.80652900319129,0.946442121041435,0.211284849105526,0.735157271935909,0.711653764331833,0.00369415231550906,0.996305847684491,0.0108077258314296,0.985498121853061,0.692474493341859,0.293023628511203,0.272495654178938,0.0205279743322644,611507,859276,0.0301342218884926,0.0376187347475126,1065400
+INF0032,0,SEB,2025-08-05,Female,HU,1027392,922706,754901,711686,0.97571541382014,0.955185965498421,0.951156605026188,0.835023754217652,0.990864768566664,0.225678330168684,0.76518643839798,0.575916239395836,0.00765404667291528,0.992345953327085,0.0082170203718621,0.984128932955223,0.68755858070737,0.296570352247852,0.251981637474883,0.0445887147729689,333941,579843,0.0448140345015791,0.0488433949738121,694403
+INF0032,9,SEB,2025-08-05,Female,HU,1155456,1036243,850931,814746,0.98729910917022,0.970027275055383,0.962124470722205,0.785860979266482,0.962943628439678,0.261944648775202,0.700998979664476,0.658102175924827,0.0194511749548094,0.980548825045191,0.0122952001846083,0.968253624860582,0.710602476827814,0.257651148032768,0.222056363216799,0.0355947848159686,416016,632145,0.029972724944617,0.0378755292777954,804398
+INF0180,0,SEB,2025-08-05,Male,HEU-hi,1661856,1483795,1251178,1155566,0.945002708629364,0.876733152444156,0.869922793959413,0.699612550400041,0.922558790344326,0.124676368415128,0.797882421929198,0.402479888374918,0.00404892532741009,0.99595107467259,0.0108816900767182,0.985069384595872,0.612174744462403,0.372894640133468,0.313003066776372,0.0598915733570957,307489,763986,0.123266847555844,0.130077206040587,1092013
+INF0155,0,Ctrl,2025-08-07,Female,HEU-lo,1956872,1761294,1560508,1450803,0.734109317391817,0.86158464219453,0.853166242272649,0.705002967002426,0.827947079489973,0.243380274937339,0.584566804552634,0.37507025258969,0.0103115479394658,0.989688452060534,0.0114868655592878,0.978201586501246,0.696086298850248,0.282115287650998,0.228192709479949,0.0539225781710495,281626,750862,0.13841535780547,0.146833757727351,1065048
+INF0155,4,Ctrl,2025-08-07,Female,HEU-lo,1215184,1083687,851644,825005,0.98352979678911,0.985920925985036,0.98077190889518,0.854323978915897,0.967996849453198,0.341870391928599,0.626126457524599,0.59517060412889,0.00328178777449222,0.996718212225508,0.011180861893451,0.985537350332057,0.721515827233506,0.264021523098551,0.223845072470794,0.040176450627757,412580,693213,0.014079074014964,0.0192280911048204,811417
+INF0155,9,Ctrl,2025-08-07,Female,HEU-lo,1123680,1000603,815357,761574,0.980901396318677,0.959184984786401,0.928468640441,0.618258461184238,0.931716960011432,0.317645938028437,0.614071021982995,0.495439064472337,0.0109735951962661,0.989026404803734,0.011511130922726,0.977515273881008,0.501966594121195,0.475548679759813,0.399603185008435,0.0759454947513788,228822,461857,0.0408150152135994,0.0715313595589997,747029
+INF0158,0,Ctrl,2025-08-07,Male,HU,1974064,1742021,1484261,1352364,0.92381784785753,0.802042361634722,0.793962082318796,0.613198349846078,0.932262704740423,0.332249912543141,0.600012792197282,0.366683113777458,0.00460996821079836,0.995390031789202,0.0221207277698077,0.973269304019394,0.590346477379117,0.382922826640277,0.359495644558992,0.023427182081285,280913,766092,0.197957638365278,0.206037917681204,1249338
+INF0158,4,Ctrl,2025-08-07,Male,HU,1017536,914368,805877,754118,0.947414065172824,0.973280594349315,0.924193309091316,0.565141323121454,0.828913347136503,0.594199201529576,0.234714145606927,0.196596098788425,0.0103426555807508,0.989657344419249,0.0161375661375661,0.973519778281683,0.573066263542454,0.400453514739229,0.368808264046359,0.0316452506928697,79380,403772,0.0267194056506854,0.0758066909086837,714462
+INF0158,9,Ctrl,2025-08-07,Male,HU,1148432,1020361,904910,847242,0.957195228754004,0.964520528351024,0.91473730418656,0.565784930750108,0.797826248043972,0.320764627166887,0.477061620877085,0.433948365218225,0.00991904053999759,0.990080959460002,0.0223090521917313,0.967771907268271,0.505695287074611,0.46207662019366,0.431159347502913,0.0309172726907469,199112,458838,0.035479471648976,0.0852626958134396,810976
+INF0159,0,Ctrl,2025-08-07,Male,HEU-hi,2024024,1786795,1447822,1277260,0.931853342310884,0.818567843396887,0.811916966541452,0.651424653782203,0.946597483936038,0.162708392984737,0.783889090951301,0.583682213434657,0.00516847824886035,0.99483152175114,0.0213721768375277,0.973459344913612,0.724433268294623,0.249026076618989,0.217864947818036,0.0311611288009528,452551,775338,0.181432156603113,0.188083033458548,1190219
+INF0159,4,Ctrl,2025-08-07,Male,HEU-hi,1487344,1333646,1131385,1067284,0.940156509420173,0.982565521310247,0.942089705744588,0.646537720223158,0.759423194013056,0.264593946774156,0.4948292472389,0.42502524104232,0.0127949864542873,0.987205013545713,0.0225689344402012,0.964636079105512,0.490235118756188,0.474400960349323,0.394639016729953,0.0797619436193709,275733,648745,0.0174344786897532,0.0579102942554121,1003414
+INF0159,9,Ctrl,2025-08-07,Male,HEU-hi,1167840,1028158,742821,709883,0.982519654647315,0.986670470870599,0.965210172708947,0.813984463937007,0.923115267211876,0.0548056921123134,0.868309575099563,0.858577887845167,0.00239002303859118,0.997609976961409,0.0274596209197793,0.970150356041629,0.627872387130393,0.342277968911237,0.327390074326639,0.0148878945845976,487443,567733,0.0133295291294012,0.0347898272910532,697474
+INF0155,0,PPD,2025-08-07,Female,HEU-lo,2221632,2004398,1728584,1609792,0.784455383055699,0.904280137154441,0.884300092650517,0.762086141224729,0.92752060018496,0.266291551066638,0.661229049118322,0.42905223562663,0.0100119397346134,0.989988060265387,0.0111574761386947,0.978830584126692,0.693289287902603,0.285541296224089,0.231345072861443,0.0541962233626458,412907,962370,0.0957198628455587,0.115699907349483,1262810
+INF0155,4,PPD,2025-08-07,Female,HEU-lo,1393256,1237743,976719,947853,0.987092935296929,0.986962641844597,0.982248115953182,0.856480041555377,0.963070560649114,0.341770461689747,0.621300098959367,0.590333179840242,0.00351120478081922,0.996488795219181,0.0112248629657737,0.985263932253407,0.718674493771364,0.266589438482043,0.226748573639117,0.0398408648429259,473057,801339,0.013037358155403,0.0177518840468182,935619
+INF0155,9,PPD,2025-08-07,Female,HEU-lo,1302344,1145745,915824,856281,0.980871933395696,0.959576236275185,0.932713578488919,0.651871289745708,0.966500946104897,0.340636118558998,0.625864827545899,0.500440176216603,0.0116133506085877,0.988386649391412,0.0115622547856713,0.976824394605741,0.496768189200533,0.480056205405208,0.406102301136882,0.0739539042683261,273995,547508,0.0404237637248155,0.0672864215110811,839902
+INF0158,0,PPD,2025-08-07,Male,HU,1897704,1691391,1435638,1304624,0.922783116054894,0.848499649052858,0.840498884860265,0.656822703165169,0.897703287684052,0.29528959618787,0.602413691496183,0.380556669141145,0.00439650273659864,0.995603497263401,0.022052299440717,0.973551197822684,0.60114116329535,0.372410034527334,0.349540244781853,0.0228697897454814,300921,790739,0.151500350947142,0.159501115139735,1203885
+INF0158,4,PPD,2025-08-07,Male,HU,1229864,1101656,968001,903455,0.944291635997366,0.969077216117216,0.919578021978022,0.52821684981685,0.851467373816947,0.604866466208794,0.246600907608153,0.205767417089219,0.0116795720725579,0.988320427927442,0.0148394193645795,0.973481008562863,0.564210685244699,0.409270323318163,0.377326747622026,0.031943575696137,92726,450635,0.0309227838827839,0.080421978021978,853125
+INF0158,9,PPD,2025-08-07,Male,HU,1371136,1216419,1068812,1005622,0.948960941586401,0.96633644068507,0.920389480831943,0.593111571252525,0.84213539126932,0.346419813287539,0.495715577981781,0.454252973477219,0.00900785270060558,0.990992147299394,0.0225079635485339,0.968484183750861,0.506730608418997,0.461753575331863,0.43024553788471,0.0315080374471528,257109,566004,0.0336635593149296,0.0796105191680568,954296
+INF0159,0,PPD,2025-08-07,Male,HEU-hi,1898040,1677926,1357904,1200314,0.92715656069995,0.836210405623612,0.830270856040953,0.664310315856441,0.953162260904616,0.171448010745343,0.781714250159273,0.588793137264185,0.00438555180074111,0.995614448199259,0.021238568044972,0.974375880154287,0.719421171486792,0.254954708667495,0.223869899125417,0.0310848095420786,435293,739297,0.163789594376388,0.169729143959047,1112879
+INF0159,4,PPD,2025-08-07,Male,HEU-hi,1468272,1314327,1118313,1054808,0.946339997421332,0.981112134056363,0.940226826700274,0.633504874239511,0.820599997786103,0.307417030246581,0.513182967539522,0.438671092352724,0.0131866388850837,0.986813361114916,0.0228152644898018,0.963998096625114,0.479992934441713,0.484005162183402,0.403468612338772,0.0805365498446298,277402,632369,0.0188878659436369,0.0597731732997264,998207
+INF0159,9,PPD,2025-08-07,Male,HEU-hi,1124616,979389,693430,664229,0.986489599219546,0.987891736804755,0.970960923609892,0.834537699063723,0.953283897336491,0.0770854096756791,0.876198487660812,0.865529821609809,0.00256495852542351,0.997435041474577,0.0272806791435489,0.970154362331028,0.626557673536135,0.343596688794892,0.328836556786153,0.0147601320087386,473302,546835,0.0121082631952446,0.0290390763901077,655255
+INF0155,0,SEB,2025-08-07,Female,HEU-lo,2378848,2136279,1866817,1735030,0.768161357440505,0.871291875721704,0.849967324012986,0.725989902332188,0.917141300988955,0.265460366871403,0.651680934117552,0.427269072445165,0.00920371535000726,0.990796284649993,0.00827487784819312,0.9825214068018,0.683459919694258,0.299061487107542,0.234429877606308,0.0646316095012336,413420,967587,0.128708124278296,0.150032675987014,1332783
+INF0155,4,SEB,2025-08-07,Female,HEU-lo,995464,892094,720248,700245,0.986965990474762,0.988068607676258,0.983642446007773,0.852773332484467,0.955501410835693,0.343553337733534,0.611948073102159,0.563346777135469,0.00340041804962382,0.996599581950376,0.00690324018577306,0.989696341764603,0.704103391984772,0.285592949779831,0.238706937575674,0.0468860122041576,332018,589367,0.0119313923237421,0.016357553992227,691118
+INF0158,0,SEB,2025-08-07,Male,HU,1995888,1767501,1513529,1376026,0.927221578662031,0.808748621540724,0.801494026480526,0.617858562044579,0.886202706028309,0.318907186730161,0.567295519298148,0.350209434311708,0.00469075432400616,0.995309245675994,0.0136267318663407,0.981682513809653,0.587833016390474,0.39384949741918,0.357326813365933,0.0365226840532464,276075,788314,0.191251378459276,0.198505973519474,1275881
+INF0158,4,SEB,2025-08-07,Male,HU,1006016,899118,788056,735913,0.950509095504496,0.970617247945652,0.921042699559109,0.55347309190098,0.810776184941237,0.568911274699729,0.241864910241508,0.201115846571096,0.0105699827900645,0.989430017209936,0.00946546453982687,0.979964552670109,0.538285684929747,0.441678867740361,0.406193008142611,0.0354858595977499,77862,387150,0.029382752054348,0.0789573004408914,699492
+INF0158,9,SEB,2025-08-07,Male,HU,1120552,994396,877895,829211,0.951199393158074,0.969440059841901,0.923015676803023,0.590119747193326,0.769334885939319,0.291835498244724,0.477499387694595,0.4362257065145,0.00997818196145644,0.990021818038544,0.0136030299000704,0.976418788138473,0.498879547682018,0.477539240456455,0.442625453721625,0.0349137867348296,203043,465454,0.0305599401580993,0.0769843231969775,788745
+INF0159,0,SEB,2025-08-07,Male,HEU-hi,2086792,1847605,1507051,1327409,0.929341295712173,0.817877686411331,0.811086269957588,0.63500068092502,0.933116486052797,0.168540889286612,0.764575596766184,0.573310423094746,0.00499887553133928,0.995001124468661,0.0134001037628507,0.98160102070581,0.708139149100091,0.273461871605719,0.229282499927633,0.0441793716780858,449101,783347,0.182122313588669,0.188913730042412,1233616
+INF0159,4,SEB,2025-08-07,Male,HEU-hi,1459280,1303303,1109557,1042434,0.940995784865037,0.978019748686445,0.936432513767603,0.633759325372148,0.809547172057246,0.292138446219946,0.5174087258373,0.446210294512692,0.0123001052646758,0.987699894735324,0.0150975500728201,0.972602344662504,0.473806399515494,0.49879594514701,0.416260508442804,0.0825354367042063,277396,621671,0.0219802513135547,0.0635674862323967,980926
+INF0159,9,SEB,2025-08-07,Male,HEU-hi,527136,464846,340607,329303,0.989851291971224,0.990468184844199,0.978966808912723,0.810075438472701,0.908817547992259,0.101222103138385,0.807595444853874,0.791356280746668,0.00333078101071976,0.99666921898928,0.0168501148545176,0.979819104134763,0.607656967840735,0.372162136294028,0.351852029096478,0.0203101071975498,208960,264053,0.00953181515580082,0.0210331910872773,325961
+INF0013,0,Ctrl,2025-08-22,Male,HEU-lo,1284824,1149119,931095,865836,0.966202606498228,0.932750638617311,0.92304556804965,0.750423453781081,0.949825099078664,0.0932661552381074,0.856558943840557,0.291104902323092,0.00844865417973089,0.991551345820269,0.00902320643936285,0.982528139380906,0.850868121104672,0.131660018276234,0.12322777987535,0.00843223840088426,182751,627784,0.0672493613826887,0.0769544319503498,836573
+INF0013,4,Ctrl,2025-08-22,Male,HEU-lo,1212080,1066572,933636,828526,0.95181563402959,0.847583831682315,0.831272730039411,0.60063606068445,0.925172696257263,0.148377330766113,0.77679536549115,0.594396027563843,0.0112913079305544,0.988708692069446,0.0117814622226011,0.976927229846845,0.529906515500241,0.447020714346603,0.122662887506038,0.324357826840565,281544,473664,0.152416168317685,0.168727269960589,788604
+INF0013,9,Ctrl,2025-08-22,Male,HEU-lo,591208,513249,411678,387329,0.98218826888769,0.981357937071209,0.957161632889099,0.743813579370712,0.979025971042764,0.223218797818842,0.755807173223922,0.739819556205803,0.00397428181097322,0.996025718189027,0.00966820479015601,0.986357513398871,0.631418799499393,0.354938713899477,0.330366952318172,0.0245717615813056,209346,282969,0.0186420629287911,0.0428383671109008,380430
+INF0023,0,Ctrl,2025-08-22,Female,HEU-hi,1428512,1282467,1103378,1007499,0.960829737796266,0.84605411994401,0.843164761604694,0.703389856771708,0.877314930401553,0.283347481150115,0.593967449251439,0.320800521657909,0.00813056515668277,0.991869434843317,0.0207613248792547,0.971108109964062,0.74064138073111,0.230466729232953,0.199926751665255,0.0305399775676975,218435,680906,0.15394588005599,0.156835238395306,968035
+INF0023,4,Ctrl,2025-08-22,Female,HEU-hi,1945688,1737383,1389603,1347134,0.970804686096558,0.973963988487571,0.967753577753241,0.82823955271585,0.91921157707665,0.46567267523715,0.4535389018395,0.425440025849932,0.00191178449132644,0.998088215508674,0.0244929756567555,0.973595239851918,0.711776245263939,0.261818994587979,0.236718414325581,0.0251005802623984,460826,1083175,0.0260360115124285,0.0322464222467587,1307804
+INF0023,9,Ctrl,2025-08-22,Female,HEU-hi,987800,871641,686162,661242,0.967712274779884,0.980770192469979,0.97006369824908,0.82072599751208,0.977877892363703,0.332214343382028,0.645663548981675,0.598146145292245,0.00485146371589014,0.99514853628411,0.0375956604230069,0.957552875861103,0.581545337628767,0.376007538232335,0.327330548941209,0.048676989291126,314132,525176,0.0192298075300207,0.0299363017509204,639892
+INF0030,0,Ctrl,2025-08-22,Male,HU,1055672,939062,820166,756891,0.967538258481076,0.956857716766282,0.935349389134,0.547854014837756,0.885988459764958,0.214057651325382,0.671930808439576,0.213160354432273,0.00440827399118345,0.995591726008817,0.0174693934823026,0.978122332526514,0.649021877667473,0.32910045485904,0.304334607874089,0.0247658469849511,85521,401205,0.0431422832337185,0.064650610866,732321
+INF0030,4,Ctrl,2025-08-22,Male,HU,887272,774792,587687,558971,0.959545307359416,0.973952099157652,0.963873010190955,0.820582521375648,0.966016549806192,0.344733099157968,0.621283450648223,0.586763790369122,0.00488673765730881,0.995113262342691,0.0210029041626331,0.974110358180058,0.605254598257502,0.368855759922556,0.302152952565344,0.066702807357212,258250,440126,0.0260479008423479,0.0361269898090455,536358
+INF0030,9,Ctrl,2025-08-22,Male,HU,1059640,929289,780683,761469,0.997026799515148,0.989099123425162,0.984053055498844,0.880723915148083,0.981709414491887,0.19381141105212,0.787898003439767,0.731571076048755,0.00457105475657498,0.995428945243425,0.0326617807897131,0.962767164453712,0.52534420900923,0.437422955444482,0.392945120767021,0.0444778346774606,489165,668650,0.0109008765748382,0.0159469445011559,759205
+INF0013,0,PPD,2025-08-22,Male,HEU-lo,1309848,1169793,941515,876615,0.962326677047507,0.941158619708626,0.932124610296471,0.759162626394339,0.937937797264928,0.0886665355031526,0.849271261761776,0.284356252595945,0.00974147209348299,0.990258527906517,0.00882443385243921,0.981434094054078,0.848205460495969,0.133228633558108,0.124788586992334,0.00844004656577416,182108,640422,0.0588413802913738,0.0678753897035289,843590
+INF0013,4,PPD,2025-08-22,Male,HEU-lo,1021264,890816,775431,680459,0.904611446097414,0.847437499086185,0.828137717264695,0.527857155621549,0.906420905876161,0.1306524930522,0.775768412823961,0.582688821659285,0.00979247764473483,0.990207522355265,0.012153447173967,0.978054075181298,0.563225918903073,0.414828156278225,0.36157693750033,0.0532512187778946,189329,324923,0.152562500913815,0.171862282735305,615551
+INF0013,9,PPD,2025-08-22,Male,HEU-lo,739216,639880,503620,472587,0.982966099363715,0.979256765338391,0.957546976882358,0.746838249698086,0.975531369078845,0.202663907256135,0.77286746182271,0.752431298171987,0.00539755749988508,0.994602442500115,0.00971866811725226,0.984883774382863,0.620462450774582,0.364421323608281,0.338517644535021,0.0259036790732597,261044,346934,0.0207432346616093,0.0424530231176419,464537
+INF0023,0,PPD,2025-08-22,Female,HEU-hi,1572088,1406726,1193232,1088074,0.963874699698734,0.860464717139269,0.857511725674053,0.722300568191028,0.866451932279463,0.280125408402363,0.5863265238771,0.293390977195472,0.00882785679254536,0.991172143207455,0.0203418657283882,0.970830277479066,0.733432020553338,0.237398256925728,0.203517644465042,0.0338806124606863,222251,757525,0.139535282860731,0.142488274325947,1048767
+INF0023,4,PPD,2025-08-22,Female,HEU-hi,1960856,1733414,1389954,1349503,0.97374070305883,0.974950268860164,0.969395753333546,0.816614994985031,0.920252430839653,0.478423910105993,0.44182852073366,0.41255500491107,0.00191097046127574,0.998089029538724,0.0242485436191431,0.973840485919581,0.713799420384137,0.260041065535444,0.234965790014615,0.0250752755208298,442707,1073086,0.0250497311398362,0.0306042466664536,1314066
+INF0023,9,PPD,2025-08-22,Female,HEU-hi,942384,831282,659209,636544,0.965433654232857,0.981319391220439,0.969826260574966,0.819434342053663,0.976605318760227,0.343987799259695,0.632617519500532,0.588131682208842,0.00467976054212291,0.995320239457877,0.0367965587215407,0.958523680736336,0.586502976341211,0.372020704395126,0.324355351167745,0.0476653532273803,296169,503576,0.0186806087795607,0.0301737394250343,614541
+INF0030,0,PPD,2025-08-22,Male,HU,972560,864436,748225,696152,0.967973948218205,0.94563980191643,0.924446878195225,0.564357126215206,0.915665691987294,0.220120642867661,0.695545049119633,0.217351747060185,0.00416172663263084,0.995838273367369,0.0178930049118053,0.977945268455564,0.648612354521038,0.329332913934525,0.304435142393961,0.0248977715405647,82658,380296,0.0543601980835696,0.0755531218047746,673857
+INF0030,4,PPD,2025-08-22,Male,HU,983584,844256,638719,608344,0.973238825401418,0.972557020862609,0.963926197167874,0.819625918819587,0.948748225218486,0.355848587696359,0.592899637522127,0.555135171893643,0.0058947774795743,0.994105222520426,0.0206465694845039,0.973458653035922,0.598208551881837,0.375250101154085,0.307887048936304,0.0673630522177801,269391,485271,0.0274429791373906,0.0360738028321262,592064
+INF0030,9,PPD,2025-08-22,Male,HU,1369512,1205519,999002,973830,0.996570243266279,0.990564560170635,0.984433636616554,0.888463559645128,0.979156736194469,0.202834461203022,0.776322274991447,0.725544363840904,0.00440699044272911,0.995593009557271,0.0321021360396549,0.963490873517616,0.543279459460324,0.420211414057292,0.376963124823169,0.0432482892341236,625597,862245,0.00943543982936457,0.0155663633834455,970490
+INF0013,0,SEB,2025-08-22,Male,HEU-lo,1304808,1167431,967694,900086,0.963833455914213,0.930778425719828,0.919863567149607,0.731671302417314,0.937149960062954,0.10830737819201,0.828842581870944,0.296109170711573,0.00917240828921816,0.990827591710782,0.00503844005214014,0.985789151658642,0.773584102577745,0.212205049080897,0.17543028916496,0.0367747599159373,187955,634749,0.0692215742801715,0.080136432850393,867533
+INF0013,4,SEB,2025-08-22,Male,HEU-lo,1108496,975841,843244,746237,0.875108042083145,0.883216596890227,0.866020047837951,0.519903895332278,0.895616419796358,0.120630189357234,0.774986230439124,0.60606979915586,0.00892739987656181,0.991072600123438,0.00634200154540727,0.984730598578031,0.529000685227753,0.455729913350278,0.401436548396032,0.0542933649542453,205771,339517,0.116783403109773,0.133979952162049,653038
+INF0013,9,SEB,2025-08-22,Male,HEU-lo,338400,296428,235954,224609,0.973162250844801,0.98512679510113,0.96496035794511,0.781618713428889,0.98204826540706,0.217726972086136,0.764321293320925,0.748031864767892,0.00402976549112278,0.995970234508877,0.00665106925719294,0.989319165251684,0.625662172630459,0.363656992621226,0.337897792627485,0.0257591999937402,127799,170847,0.0148732048988705,0.0350396420548904,218581
+INF0023,0,SEB,2025-08-22,Female,HEU-hi,1553624,1392141,1200738,1097477,0.961156361363382,0.842094635525342,0.839047748156842,0.695863949937763,0.866243886489653,0.296521940520142,0.569721945969511,0.334008146805989,0.00759466823291404,0.992405331767086,0.010641508818299,0.981763822948787,0.657619956601896,0.324143866346891,0.233648214314848,0.0904956520320428,245172,734030,0.157905364474658,0.160952251843158,1054847
+INF0023,4,SEB,2025-08-22,Female,HEU-hi,1938960,1727707,1390235,1352003,0.974983043676678,0.973879895006752,0.968768301749382,0.812414086088395,0.935776929484139,0.488083943718788,0.447692985765351,0.423472417798728,0.00190297684674752,0.998097023153252,0.0136758544652701,0.984421168687982,0.703230429988975,0.281190738699008,0.245587651598677,0.0356030871003308,453500,1070908,0.0261201049932482,0.0312316982506182,1318180
+INF0023,9,SEB,2025-08-22,Female,HEU-hi,904872,793595,633506,611464,0.957374432509518,0.979145883156816,0.968143149982918,0.821083020157158,0.971231343438841,0.380720755957409,0.590510587481432,0.543729273377134,0.00462215419934953,0.99537784580065,0.0153969772335948,0.979980868567056,0.561159364836426,0.418821503730629,0.359801033097379,0.0590204706332504,261350,480662,0.0208541168431842,0.0318568500170824,585400
+INF0030,0,SEB,2025-08-22,Male,HU,1039944,924772,816017,756973,0.967017317658622,0.960038578918752,0.938458154714579,0.543828875719598,0.88617032500515,0.227832679370789,0.65833764563436,0.221035153208101,0.00398904433407962,0.99601095566592,0.0100464820265709,0.985964473639349,0.606050618813288,0.379913854826062,0.328624518416656,0.0512893364094055,87991,398086,0.039961421081248,0.0615418452854212,732006
+INF0030,4,SEB,2025-08-22,Male,HU,776400,671086,524037,503966,0.974065710782077,0.979785942439947,0.9725400084743,0.853854991688667,0.979747300514847,0.400874141723567,0.57887315879128,0.548695706112789,0.00444805815955615,0.995551941840444,0.0138442005669861,0.981707741273458,0.59258309129172,0.389124649981738,0.320364540758648,0.0687601092230899,229988,419154,0.0202140575600535,0.0274599915256999,490896
+INF0030,9,SEB,2025-08-22,Male,HU,1288944,1140767,954830,930021,0.996728030872421,0.988507817877015,0.982723430329522,0.876881651991741,0.981596850587439,0.215690471796764,0.765906378790675,0.717375899612475,0.00418782444063733,0.995812175559363,0.0166741265504983,0.979138049008864,0.543307626745141,0.435830422263723,0.388106029815526,0.0477243924481967,583119,812850,0.0114921821229845,0.0172765696704776,926978
+INF0166,0,Ctrl,2025-08-28,Female,HU,1142328,1017218,889137,819646,0.902212662539682,0.902008803304958,0.89485256830675,0.618988634135457,0.762528427772158,0.0749357166420165,0.687592711130142,0.492966515852921,0.00387325504099269,0.996126744959007,0.00858852204741857,0.987538222911589,0.842814092621316,0.144724130290273,0.135945047640151,0.00877908265012187,225650,457739,0.0979911966950419,0.10514743169325,739495
+INF0166,4,Ctrl,2025-08-28,Female,HU,910864,805652,630109,604513,0.989270702201607,0.977171599275618,0.961137206179654,0.796360365000242,0.943407279866455,0.410589087549476,0.53281819231698,0.485300633077513,0.0113749448343299,0.98862505516567,0.00761502583051375,0.981010029335156,0.667746904232397,0.31326312510276,0.263912565657964,0.0493505594447954,231122,476245,0.022828400724382,0.0388627938203459,598027
+INF0166,9,Ctrl,2025-08-28,Female,HU,1053896,933222,740554,713494,0.978962682236991,0.979133380292176,0.963402168124109,0.803150823784081,0.935201822498877,0.276155639692828,0.659046182806049,0.631649874863633,0.00772968945782113,0.992270310542179,0.00842956641493673,0.983840744127242,0.701231557677763,0.282609186449479,0.242981475837312,0.0396277106121666,354348,560988,0.0208666197078243,0.0365978318758912,698484
+INF0199,0,Ctrl,2025-08-28,Male,HEU-hi,1729240,1545717,1379096,1282394,0.867265442601884,0.896476816618952,0.873258369178979,0.717055573937938,0.28363795498889,0.0213393990159149,0.262298555972975,0.21283724476233,0.00818329641325352,0.991816703586746,0.0199721921101004,0.971844511476646,0.552840882311354,0.419003629165292,0.373862940095207,0.0451406890700853,169736,797492,0.103523183381048,0.126741630821021,1112176
+INF0199,4,Ctrl,2025-08-28,Male,HEU-hi,955672,847071,733820,687490,0.930010618336267,0.934141729475596,0.901921100828468,0.565672932701256,0.826955617735211,0.233648348245391,0.59330726948982,0.521875933155642,0.0159364238410596,0.98406357615894,0.0125139072847682,0.971549668874172,0.286638410596027,0.684911258278146,0.529997350993378,0.154913907284768,188750,361676,0.0658582705244044,0.0980788991715321,639373
+INF0199,9,Ctrl,2025-08-28,Male,HEU-hi,1090984,980857,815737,784725,0.987602026187518,0.97428760922637,0.950512002642594,0.742637381354226,0.926212033547567,0.20359800604996,0.722614027497607,0.674732121603848,0.00524803263153558,0.994751967368464,0.0140136376745911,0.980738329693873,0.336626014585308,0.644112315108566,0.534534526801533,0.109577788307033,388336,575541,0.0257123907736297,0.0494879973574057,774996
+INF0207,0,Ctrl,2025-08-28,Male,HEU-lo,1373960,1231782,1089637,986621,0.917642134112288,0.63901299475902,0.63159830565573,0.394152634572797,0.91575499086456,0.337731048165626,0.578023942698934,0.109443130485467,0.0260914095506337,0.973908590449366,0.015567789015491,0.958340801433875,0.651952374855972,0.306388426577903,0.247727563692229,0.058660862885674,39055,356852,0.36098700524098,0.36840169434427,905365
+INF0207,4,Ctrl,2025-08-28,Male,HEU-lo,864640,768455,603156,581744,0.986143389532165,0.971151315273418,0.956406238288393,0.818066772067501,0.970326712989894,0.492044720878053,0.478281992111841,0.372480082503926,0.00918716999696812,0.990812830003032,0.0178766539480233,0.972936176055009,0.451521374757593,0.521414801297416,0.454879325435189,0.0665354758622268,174809,469311,0.0288486847265824,0.0435937617116072,573683
+INF0207,9,Ctrl,2025-08-28,Male,HEU-lo,1155280,1020738,803205,743244,0.981793327628612,0.965042372881356,0.952004352402044,0.778534545135615,0.96670867760594,0.315897033300124,0.650811644305816,0.601995050219501,0.00591233256432074,0.994087667435679,0.0177428456974769,0.976344821738202,0.702509086337015,0.273835735401188,0.238192147884338,0.0356435875168496,341997,568106,0.034957627118644,0.0479956475979565,729712
+INF0166,0,PPD,2025-08-28,Female,HU,1421024,1265409,1081320,999289,0.913050178677039,0.909845561326654,0.902988927017835,0.662145262883316,0.743515597326456,0.0731665734214804,0.670349023904976,0.475618314899477,0.00287811346100974,0.99712188653899,0.009069363578466,0.988052522960524,0.838769963214439,0.149282559746086,0.140460289342628,0.00882227040345791,287341,604142,0.0901544386733465,0.0970110729821646,912401
+INF0166,4,PPD,2025-08-28,Female,HU,895072,775403,609274,585499,0.990645586072735,0.976435376589164,0.957963663447249,0.793280254886884,0.965443797270277,0.420251238807268,0.54519255846301,0.498737285925411,0.00980917643880268,0.990190823561197,0.00757367776572148,0.982617145795476,0.681099359854279,0.301517785941197,0.251665729761765,0.0498520561794325,229479,460120,0.0235646234108361,0.0420363365527514,580022
+INF0166,9,PPD,2025-08-28,Female,HU,996616,876933,700861,676818,0.985086094045962,0.980557172083201,0.964765030207402,0.808679453566993,0.94496500150232,0.279680098522533,0.665284902979787,0.638831083562391,0.0074672798429897,0.99253272015701,0.00825697662265268,0.984275743534358,0.704746309909533,0.279529433624824,0.239013924212336,0.0405155094124888,344436,539166,0.0194428279167992,0.0352349697925979,666724
+INF0199,0,PPD,2025-08-28,Male,HEU-hi,1516328,1353418,1204623,1122951,0.855110329836297,0.90664797703091,0.883277948277891,0.726175661053875,0.292509192494565,0.020824370292611,0.271684822201954,0.22272797673338,0.00813212285107205,0.991867877148928,0.019490052153757,0.972377824995171,0.554053183954671,0.4183246410405,0.370826089755972,0.0474985512845277,155310,697308,0.0933520229690903,0.116722051722109,960247
+INF0199,4,PPD,2025-08-28,Male,HEU-hi,897696,790855,670560,632602,0.937085244751044,0.939225913542802,0.909882220370377,0.599200070175202,0.859586100499146,0.233278060398584,0.626308040100561,0.548494258277568,0.0174050064415462,0.982594993558454,0.0131551257769634,0.96943986778149,0.267480713856767,0.701959153924724,0.548701681987794,0.153257471936929,194829,355207,0.0607740864571982,0.0901177796296234,592802
+INF0199,9,PPD,2025-08-28,Male,HEU-hi,858968,768197,633815,610401,0.98810617938044,0.973886703109223,0.953236473726707,0.773676470344414,0.952894761655766,0.188153078630881,0.764741683024885,0.707733651068499,0.00545943425363508,0.994540565746365,0.0140497919782955,0.980490773768069,0.311602584677248,0.668888189090821,0.558709357040339,0.110178832050482,330254,466636,0.0261132968907768,0.0467635262732926,603141
+INF0207,0,PPD,2025-08-28,Male,HEU-lo,1232224,1105088,964965,866432,0.912570172846802,0.669899327161431,0.662423483583751,0.437218596650984,0.927630893838588,0.339022273647671,0.588608620190917,0.112016199016488,0.0265210205557277,0.973478979444272,0.0136607788451606,0.959818200599112,0.65434872430534,0.305469476293771,0.245945666769962,0.0595238095238095,38724,345700,0.330100672838569,0.337576516416249,790680
+INF0207,4,PPD,2025-08-28,Male,HEU-lo,964456,862394,674289,650158,0.985832674519117,0.971358006200201,0.957436418299797,0.726423557642052,0.962862892746763,0.463789655905618,0.499073236841144,0.370627943788539,0.0095095153102617,0.990490484689738,0.0172283906260866,0.973262094063652,0.403937090007186,0.569325004056466,0.502746806981757,0.0665781970747085,172564,465599,0.0286419937997994,0.042563581700203,640947
+INF0207,9,PPD,2025-08-28,Male,HEU-lo,1131528,982637,762643,713953,0.983508718361013,0.955307692198143,0.941492126651466,0.919422255578706,0.941057839308921,0.299647304286407,0.641410535022514,0.565919401981726,0.00585728479268223,0.994142715207318,0.0182533795712139,0.975889335636104,0.679510725126383,0.296378610509721,0.256338321148904,0.040040289360817,365357,645599,0.0446923078018568,0.0585078733485337,702179
+INF0166,0,SEB,2025-08-28,Female,HU,1550664,1380306,1200328,1097863,0.91635112942143,0.876639616392387,0.869641799234216,0.617185605172023,0.785068915423591,0.0850933957797154,0.699975519643875,0.529613178162234,0.00253922880428172,0.997460771195718,0.00601508332319669,0.991445687872522,0.822019827271621,0.1694258606009,0.142005230507238,0.0274206300936626,328840,620906,0.123360383607613,0.130358200765784,1006028
+INF0166,4,SEB,2025-08-28,Female,HU,775352,679787,538754,516822,0.988949773809938,0.976631299267674,0.959359121599809,0.795521912069981,0.960580423020167,0.423162813575996,0.537417609444171,0.494367929168716,0.0101387990647231,0.989861200935277,0.0036664842545147,0.986194716680762,0.640256703646585,0.345938013034177,0.290030346748918,0.0559076662852594,201010,406600,0.0233687007323262,0.0406408784001909,511111
+INF0166,9,SEB,2025-08-28,Female,HU,1043248,923970,742880,716921,0.981115074045815,0.982730578831986,0.967342070169552,0.814757841400548,0.945940050882416,0.303301773206814,0.642638277675602,0.6141730909497,0.00777898367493053,0.992221016325069,0.0048838834686653,0.987337132856404,0.680834379812145,0.306502753044259,0.259226533778063,0.0472762192661958,351974,573086,0.017269421168014,0.0326579298304478,703382
+INF0199,0,SEB,2025-08-28,Male,HEU-hi,1582712,1412403,1263938,1177939,0.869944029359755,0.866133979220115,0.843422874658084,0.708885464717426,0.282640716716408,0.0414248427915377,0.24121587392487,0.187879255090691,0.0113936107854631,0.988606389214537,0.0120896834701055,0.976516705744431,0.533514067995311,0.443002637749121,0.377667057444314,0.0653355803048066,136480,726424,0.133866020779885,0.156577125341916,1024741
+INF0199,4,SEB,2025-08-28,Male,HEU-hi,915104,813472,701070,665961,0.932535088391062,0.95633880379755,0.926079493488258,0.603382756444112,0.84911133646456,0.242567783945346,0.606543552519214,0.533737190435525,0.017189828101719,0.982810171898281,0.0044249557504425,0.978385216147839,0.242657573424266,0.735727642723573,0.579969200307997,0.155758442415576,200002,374720,0.0436611962024501,0.0739205065117418,621032
+INF0199,9,SEB,2025-08-28,Male,HEU-hi,333800,301408,254051,245249,0.982495341469282,0.988259267252112,0.96349125981507,0.795941997709125,0.948302022556273,0.205358027394975,0.742943995161299,0.688774525906344,0.00454208239337462,0.995457917606625,0.00611667095641115,0.989341246650214,0.31760511135672,0.671736135293494,0.553104513315872,0.118631621977623,132098,191787,0.0117407327478876,0.03650874018493,240956
+INF0207,0,SEB,2025-08-28,Male,HEU-lo,1196056,1073884,953274,871433,0.919260574249541,0.604085265531025,0.597713819197727,0.39015496695686,0.891970064919067,0.385367773394381,0.506602291524686,0.11529933481153,0.022005772005772,0.977994227994228,0.0057997557997558,0.972194472194472,0.417637917637918,0.554556554556555,0.39005439005439,0.164502164502165,36036,312543,0.395914734468975,0.402286180802273,801074
+INF0207,4,SEB,2025-08-28,Male,HEU-lo,766016,680078,547528,530330,0.987837761393849,0.981113995571505,0.966207910208445,0.830596701534703,0.969487490031783,0.511599901639269,0.457887588392514,0.360494377581107,0.00866361092163225,0.991336389078368,0.00758623767236378,0.983750151406004,0.409236084991362,0.574514066414642,0.498772814494176,0.0757412519204656,156863,435133,0.0188860044284951,0.0337920897915553,523880
+INF0207,9,SEB,2025-08-28,Male,HEU-lo,677136,599173,485830,453507,0.985559208567894,0.957409868488762,0.946164964045839,0.899464826672752,0.94905764098074,0.329227432261338,0.619830208719402,0.550475967792887,0.00663340924700864,0.993366590752991,0.00992752051476702,0.983439070238224,0.675970610562846,0.307468459675379,0.258983118244587,0.048485341430792,221304,402023,0.0425901315112381,0.0538350359541613,446958
+INF0614,0,Ctrl,2025-08-30,Female,HU,2502056,2240583,1939275,1791189,0.875958371785445,0.859828541236591,0.858035050194167,0.720463324892751,0.868600121017824,0.205269406198802,0.663330714819022,0.198508154548961,0.00489313535000624,0.995106864649994,0.0189308187311717,0.976176045918822,0.539608549172,0.436567496746823,0.383946237900854,0.0526212588459687,224396,1130412,0.140171458763409,0.141964949805833,1569007
+INF0614,4,Ctrl,2025-08-30,Female,HU,1391096,1344752,1105255,990319,0.672744842823373,0.908350244359322,0.897685791135821,0.636089230178076,0.813475292779559,0.300045070236418,0.513430222543141,0.384902178709387,0.00855224841369586,0.991447751586304,0.0171044968273917,0.974343254758912,0.342206418784293,0.632136835974619,0.525016092940563,0.107120743034056,163115,423783,0.0916497556406777,0.102314208864179,666232
+INF0614,9,Ctrl,2025-08-30,Female,HU,985816,886942,751813,687188,0.944112819199404,0.96687644404986,0.93044823924178,0.507858559795802,0.823181280160248,0.305544933078394,0.517636347081854,0.383501775471183,0.0226970560303894,0.977302943969611,0.0197293447293447,0.957573599240266,0.266927825261159,0.690645773979107,0.576155428933207,0.114490345045901,126360,329490,0.0331235559501405,0.0695517607582197,648783
+INF0622,0,Ctrl,2025-08-30,Male,HEU-lo,1419968,1254039,1116059,1024019,0.917274972437035,0.785139469843193,0.771036519476593,0.350359360677606,0.912788100700406,0.0960209058174691,0.816767194882937,0.492028137771768,0.0128146537881969,0.987185346211803,0.015544329438502,0.971641016773301,0.670499740619056,0.301141276154245,0.202070106963761,0.0990711691904844,161924,329095,0.214860530156807,0.228963480523407,939307
+INF0622,9,Ctrl,2025-08-30,Male,HEU-lo,918688,813691,633925,594892,0.95913207775529,0.997215114444951,0.975340881208595,0.762248939675418,0.933758541722232,0.252400419383616,0.681358122338615,0.669201975517562,0.00334304522903124,0.996656954770969,0.0180139631406072,0.978642991630362,0.721925978862884,0.256717012767478,0.199417973420557,0.0572990393469208,291052,434924,0.0027848855550493,0.0246591187914053,570580
+INF0627,9,Ctrl,2025-08-30,Female,HEU-hi,1040808,940435,782722,722083,0.842248051816758,0.987569326490982,0.956834650666833,0.52995447019187,0.823986050436855,0.177313964455917,0.646672085980937,0.593625893566322,0.00370567820705804,0.996294321792942,0.0216225539387857,0.974671767854156,0.711500669008195,0.263171098845961,0.229224159558455,0.0339469392875063,191328,322304,0.0124306735090179,0.0431653493331667,608173
+INF0614,0,PPD,2025-08-30,Female,HU,2167928,1927832,1630916,1508441,0.901599068177012,0.899544047134982,0.897743323757416,0.776620595893115,0.908680178487064,0.223675951112041,0.685004227375023,0.185058667254933,0.00546912171737584,0.994530878282624,0.017650579911082,0.976880298371542,0.527435140513964,0.449445157857578,0.392548897222464,0.0568962606351139,195461,1056211,0.100455952865018,0.102256676242584,1360009
+INF0614,4,PPD,2025-08-30,Female,HU,1324872,1244577,972809,876491,0.785615596737445,0.948302678681644,0.935248371660724,0.680051119324412,0.859840306829563,0.3080638858102,0.551776421019363,0.414792225902412,0.00831977594266768,0.991680224057332,0.0176383368685517,0.974041887188781,0.343659259869437,0.630382627319343,0.52646265367903,0.103919973640314,194236,468273,0.0516973213183558,0.0647516283392755,688585
+INF0614,9,PPD,2025-08-30,Female,HU,1181336,1066572,902472,813387,0.935030926238064,0.937837752550155,0.912820067793758,0.477232026633638,0.668151699246463,0.24215123086884,0.426000468377623,0.311675001033186,0.0230631872988932,0.976936812701107,0.0201813938686751,0.956755418832432,0.25828294614759,0.698472472684841,0.58343057176196,0.115041900922881,113124,362955,0.062162247449845,0.0871799322062424,760542
+INF0622,0,PPD,2025-08-30,Male,HEU-lo,1269256,1125016,972593,879358,0.920196325046227,0.800979260537184,0.785547627109847,0.413038105148162,0.886671473836331,0.082516762760193,0.804154711076138,0.486926393455866,0.0125105995993659,0.987489400400634,0.014691966425385,0.972797433975249,0.669956126875668,0.302841307099581,0.200796352508879,0.102044954590702,162742,334223,0.199020739462816,0.214452372890153,809182
+INF0622,4,PPD,2025-08-30,Male,HEU-lo,741976,658809,504597,468821,0.970803355651731,0.996280208202877,0.982264524875146,0.819419817943326,0.97596160291732,0.177267425491694,0.798694177425626,0.765994985855823,0.00438611844270042,0.9956138815573,0.0175059683415362,0.978107913215763,0.71630599914588,0.261801914069884,0.200399756365648,0.0614021577042363,285674,372945,0.00371979179712301,0.0177354751248536,455133
+INF0622,9,PPD,2025-08-30,Male,HEU-lo,954616,852281,660431,621750,0.931760353839968,0.996385429864566,0.974601344330096,0.757045304683751,0.935292414261708,0.259471057269827,0.675821356991881,0.664087848545168,0.00325149098200521,0.996748509017995,0.0171123875969525,0.979636121421042,0.720845593663198,0.258790527757845,0.200030214488534,0.0587603132693107,291251,438573,0.0036145701354342,0.0253986556699037,579322
+INF0627,4,PPD,2025-08-30,Female,HEU-hi,1274376,1221638,990572,930591,0.858136388596064,0.979495951533609,0.966596708633139,0.547259239594577,0.906030977491093,0.356671326943187,0.549359650547907,0.521679438570157,0.00289050300893029,0.99710949699107,0.0154043195255891,0.981705177465481,0.796094531291121,0.18561064617436,0.150854430934961,0.0347562152393986,227988,437027,0.0205040484663913,0.0334032913668614,798574
+INF0627,9,PPD,2025-08-30,Female,HEU-hi,976928,872861,706543,648987,0.869935761425113,0.991138498380203,0.960790113660316,0.559101769997715,0.856188382289581,0.187127759332945,0.669060622956636,0.615128494310262,0.0036360078076315,0.996363992192368,0.0211568272999294,0.975207164892439,0.712137364872868,0.263069800019571,0.228496824930859,0.0345729750887114,194169,315656,0.00886150161979682,0.0392098863396844,564577
+INF0614,0,SEB,2025-08-30,Female,HU,2404768,2139021,1869790,1725277,0.909617991777552,0.851620710067844,0.849870933250411,0.716843927681839,0.850154759132211,0.209923073777705,0.640231685354506,0.167388757429061,0.00548038320198823,0.994519616798012,0.013132739979183,0.981386876818829,0.510089852794358,0.471297024024471,0.398103107674661,0.0731939163498099,188308,1124974,0.148379289932156,0.150129066749589,1569343
+INF0622,0,SEB,2025-08-30,Male,HEU-lo,1313704,1154243,1022408,932997,0.914149777544837,0.799174345379699,0.783710615207662,0.37059135958654,0.884101026015813,0.0979349968520329,0.78616602916378,0.508100874154083,0.0129515127740521,0.987048487225948,0.0107846250599319,0.976263862166016,0.655259372723367,0.321004489442649,0.203008736044434,0.117995753398215,160599,316077,0.200825654620301,0.216289384792338,852899
+INF0622,9,SEB,2025-08-30,Male,HEU-lo,611904,549416,424379,399846,0.9352450693517,0.997323200179701,0.976015766645095,0.781454403482781,0.95273211328141,0.290235706366262,0.662496406915148,0.649376514228616,0.00375725893995763,0.996242741060042,0.0132004679447319,0.98304227311531,0.715407396477767,0.267634876637543,0.205200088530084,0.0624347881074587,189766,292228,0.00267679982029878,0.0239842333549046,373954
+INF0627,9,SEB,2025-08-30,Female,HEU-hi,688488,616891,512153,475077,0.865657567089124,0.992228647016199,0.958218035569259,0.557577555476664,0.834356711119639,0.198455339153794,0.635901371965845,0.586578632918458,0.00385112931765126,0.996148870682349,0.00725618188036221,0.988892688801987,0.690489643584673,0.298403045217314,0.256196749587379,0.0422062956299347,134506,229306,0.00777135298380072,0.0417819644307411,411254
diff --git a/course/04_IntroToTidyverse/homeworks/README.md b/course/04_IntroToTidyverse/homeworks/README.md
new file mode 100644
index 0000000..2818b5e
--- /dev/null
+++ b/course/04_IntroToTidyverse/homeworks/README.md
@@ -0,0 +1,5 @@
+# Turning In Optional Take-Home Problems
+
+This folder is for the use of submitting your completed Take-Home Problems for evaluation by course instructors. Please see [Getting Help](/course/00_Homeworks/index.qmd) walkthrough for more detailed instructions.
+
+Within your branch, inside this "homeworks" folder, create a new folder (name it with your GitHub username). Then copy all files you will be submitting within your folder. Then commit the change to git, and push to GitHub. See [Getting Help](/course/00_Homeworks/index.qmd)for details on submitting the pull request to the UMGCCCFCSR/CytometryInR homework branch.
\ No newline at end of file
diff --git a/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png b/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png
new file mode 100644
index 0000000..cb71c41
Binary files /dev/null and b/course/04_IntroToTidyverse/images/00_CheckNamesTRUE.png differ
diff --git a/course/04_IntroToTidyverse/images/01_DataView.png b/course/04_IntroToTidyverse/images/01_DataView.png
new file mode 100644
index 0000000..10c6e7f
Binary files /dev/null and b/course/04_IntroToTidyverse/images/01_DataView.png differ
diff --git a/course/04_IntroToTidyverse/images/02_Glimpse.png b/course/04_IntroToTidyverse/images/02_Glimpse.png
new file mode 100644
index 0000000..13644d3
Binary files /dev/null and b/course/04_IntroToTidyverse/images/02_Glimpse.png differ
diff --git a/course/04_IntroToTidyverse/images/03_ColumnClass.png b/course/04_IntroToTidyverse/images/03_ColumnClass.png
new file mode 100644
index 0000000..f2fff2a
Binary files /dev/null and b/course/04_IntroToTidyverse/images/03_ColumnClass.png differ
diff --git a/course/04_IntroToTidyverse/images/TakeAway.jpg b/course/04_IntroToTidyverse/images/TakeAway.jpg
new file mode 100644
index 0000000..4d60a0e
Binary files /dev/null and b/course/04_IntroToTidyverse/images/TakeAway.jpg differ
diff --git a/course/04_IntroToTidyverse/images/WebsiteBanner.png b/course/04_IntroToTidyverse/images/WebsiteBanner.png
new file mode 100644
index 0000000..71d5502
Binary files /dev/null and b/course/04_IntroToTidyverse/images/WebsiteBanner.png differ
diff --git a/course/04_IntroToTidyverse/index.qmd b/course/04_IntroToTidyverse/index.qmd
new file mode 100644
index 0000000..c5b77de
--- /dev/null
+++ b/course/04_IntroToTidyverse/index.qmd
@@ -0,0 +1,584 @@
+---
+title: "04 - Introduction to Tidyverse"
+author: "David Rach"
+date: 02-23-2026
+format: html
+toc: true
+toc-depth: 5
+---
+
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
+
+For the YouTube livestream recording, see [here](https://youtu.be/luC7SY4RJcU?t=204)
+
+
+
+For screen-shot slides, click [here](/course/04_IntroToTidyverse/slides.qmd)
+
+
+# Background
+
+Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis.
+
+When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis.
+
+This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for.
+
+Today, we will explore what makes data ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf), and how to use the toolsets implemented in the various [tidyverse](https://cran.r-project.org/web/packages/tidyverse/vignettes/paper.html) R packages. At it's simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds.
+
+The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a "matrix" or "data.frame" object exported from inside an [fcs file](/course/03_InsideFCSFile/), or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate [file path](/course/02_FilePaths/), etc.
+
+---
+
+# Walk Through
+
+:::{.callout-important title="Housekeeping"}
+As we do [every week](/course/02_FilePaths/index.qmd), on GitHub, sync your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, pull in those changes to your local computer.
+
+After creating a "Week04" project folder, copy over the contents of "course/04_IntroToTidyverse" to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to "Week04" to GitHub so that they are backed up remotely.
+
+If you are having issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/)
+:::
+
+---
+
+## read.csv
+
+We will start by first loading in our copied over dataset (Dataset.csv) from it's location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:
+
+```{r}
+#| eval: FALSE
+#| include: FALSE
+
+# For use only when building the website, otherwise keep eval to FALSE
+thefilepath <- file.path(getwd(), "course", "04_IntroToTidyverse", "data", "Dataset.csv")
+
+thefilepath
+```
+```{r}
+#| eval: TRUE
+thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+```
+
+
+:::{.callout-tip title="Reminder"}
+We encourage using the `file.path` function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people's computers that differ on whether the operating system uses forward or backward slash separation between folders.
+:::
+
+Above, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path ("Dataset.csv"). This allows us to skip the `list.files()` step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.
+
+Since our dataset is stored as a .csv file, we will be using the `read.csv()` function from the `utils` package (included in our base R software installation) to read it into R. We will also use the `colnames()` function from last week to get a read-out of the column names.
+
+```{r}
+Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+```
+
+As we look at the line of code, we now have enough context to decipher that the "file" argument is where we provide a file path to an individual file, but what does the "check.names" argument do?
+
+Let's see what happens to the column names when we set "check.names" argument to TRUE:
+
+```{r}
+Data_Alternative <- read.csv(thefilepath, check.names=TRUE)
+colnames(Data_Alternative)
+```
+
+As we can see, any column name that contained a special character or a space was automatically converted over to [R-approved syntax](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters). However, this resulted in the loss of both +" and "-", leaving us unable to determine whether we are looking at cells within or outside a particular gate.
+
+
+
+Because of this, it is often better to rename columns individually after import, which we will learn how to do later today.
+
+Following up with what we practiced last week, lets use the `head()` function to visualize the first few rows of data.
+
+```{r}
+head(Data, 3)
+```
+
+When working in Positron, we could have alternatively clicked on the little grid icon next to our created variable "Data" in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a "data.frame" object type.
+
+
+
+We could also achieve the same window to open using the `View()` function:
+
+```{r}
+#| eval: FALSE
+View(Data)
+```
+
+Wrapping up our brief recap of [last week](/course/03_InsideFCSFile/index.qmd) functions, we can check an objects type using both the `class()` and `str()` functions.
+
+```{r}
+class(Data)
+```
+
+```{r}
+str(Data)
+```
+
+## data.frame
+
+Or alternatively using the new-to-us `glimpse()` function
+
+```{r}
+#| error: TRUE
+glimpse(Data)
+```
+
+:::{.callout-tip title="Checkpoint 1"}
+This however returns an error. Any idea why this might be occuring?
+:::
+
+```{r}
+#| code-fold: TRUE
+
+# We haven't attached/loaded the package in which the function glimpse is within
+```
+
+:::{.callout-tip title="Checkpoint 2"}
+How would we locate a package a not-yet-loaded function is within?
+:::
+
+```{r}
+#| code-fold: TRUE
+#| eval: FALSE
+
+# We can use double ? to search all installed packages for a function, regardless
+# if the package is attached to the environment or not
+
+??glimpse
+```
+
+
+
+From the list of search matches (in the right secondary sidebar), it looks likely that the `glimpse()` function in the `dplyr` package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let's attach it to our environment via the `library()` call first and try running `glimpse()` again.
+
+```{r}
+#| message: FALSE
+#| warning: FALSE
+library(dplyr)
+glimpse(Data)
+```
+
+We notice that while similar to the `str()` output, `glimpse()` handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the `dim()` function (which maintains the row followed by column position convention of base R (ex. [196,31]))
+
+```{r}
+dim(Data)
+```
+
+## Column value type
+
+As we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. "char") values. Others appear to contain numeric values (which are [subtyped](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) as either double ("ie. dbl") or integer (ie. "int")). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.
+
+
+
+If we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (`is.character()`, `is.numeric()` or `is.logical()`) to check
+
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.character(Data$bid)
+```
+
+```{r}
+is.numeric(Data$bid)
+```
+
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.character(Data$Tcells_count)
+```
+
+For numeric columns using the `is.numeric()` function, we can also be [subtype](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) specific using either `is.integer()` or `is.double()`.
+
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.numeric(Data$Tcells_count)
+is.integer(Data$Tcells_count)
+is.double(Data$Tcells_count)
+```
+
+:::{.callout-tip title="Reminder"}
+As we observed last week with keywords, column names that contain [special characters](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters) like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.
+:::
+
+```{r}
+#| error: TRUE
+
+# colnames(Data) # To recheck the column names
+is.numeric(Data$CD8-)
+```
+
+```{r}
+# colnames(Data) # To recheck the column names
+is.numeric(Data$`CD8-`)
+```
+
+## select (Columns)
+
+Now that we have read in our data, and have a general picture of the structure and contents, lets start learning the main `dplyr` functions we will be using throughout the course. To do this, lets go ahead and attach `dplyr` to our local environment via the `library()` call.
+
+```{r}
+library(dplyr)
+```
+
+We will start with the `select()` function. It is used to "select" a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let's place around the "" around the column name for now)
+
+```{r}
+DateColumn <- select(Data, "Date")
+DateColumn[1:10,]
+```
+
+This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.
+
+### Pipe Operators
+
+While the above line of code works to select a column, when you encounter `select()` out in the wild, it will more often be in a line of code that looks like this:
+
+```{r}
+DateColumn <- Data |> select("Date")
+DateColumn[1:10,]
+```
+
+... **"What in the world is that thing |> ?"** ...
+
+Glad you asked! An useful feature of the tidyverse packages is their use of [pipes](https://r4ds.had.co.nz/pipes.html) (either the original `magrittr` package's "%>%" or `base R version >4.1.0's` "|>""), usually appearing like this:
+
+```{r}
+# magrittr %>% pipe
+
+DateColumn <- Data %>% select("Date")
+
+# base R |> pipe
+DateColumn <- Data |> select("Date")
+```
+
+... **"How do we interpret/read that line of code?"** ...
+
+Let's break it down, starting off just to the right of the assignment arrow (<-) with our data.frame "Data".
+
+```{r}
+#| eval: false
+
+Data
+```
+
+We then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.
+
+```{r}
+#| eval: FALSE
+Data |>
+```
+
+In our case, this subsequent function is the `select()` function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for "select(Data, "Date")" is occupied by the contents Data that are being passed by the pipe.
+
+```{r}
+#| eval: FALSE
+Data |> select()
+```
+
+To complete the transfer, we provide the desired column name to `select()` to act on ("Date" in this case)
+
+
+```{r}
+#| eval: FALSE
+Data |> select("Date")
+```
+
+In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column
+
+```{r}
+#| eval: FALSE
+Data |> select("Date")
+```
+
+One of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated "Date" column to the `nrow()` function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.
+
+```{r}
+Data |> select("Date") |> nrow()
+```
+
+For those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a [few nuances](https://tidyverse.org/blog/2023/04/base-vs-magrittr-pipe/) that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it's one less key to press).
+
+### R Quirks
+
+:::{.callout-note title="Odd R Behavior # 1"}
+While we used "" around the column name in our previous example, unlike what we encountered with `install.packages()` when we forget to include quotation marks, `select()` still retrieves the correct column despite Date not being an environment variable:
+:::
+
+```{r}
+Data |> select(Date) |> head(3)
+```
+
+:::{.callout-note title="."}
+The reasons for this Odd R behaviour are nuanced and for [another day](https://adv-r.hadley.nz/evaluation.html). For now, think of it as `dplyr` R package is picking up the slack, and using context to infer it's a column name and not an environmental variable/object.
+:::
+
+### Selecting multiple columns
+
+Since we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:
+
+```{r}
+Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
+
+head(Subset, 3)
+```
+
+You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:
+
+```{r}
+Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
+
+head(Subset, 3)
+```
+
+## relocate
+
+Alternatively, we occasionally want to move one column. While we could respecify the location using `select()`, specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second `dplyr` function we will be learning is the `relocate()` function.
+
+Looking at our Data object, let's say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:
+
+```{r}
+Data |> relocate(Tcells, .after=bid) |> head(3)
+
+# |> head(3) is used only to make the website output visualization manageable :D
+```
+
+Similar to what we saw with `select()`, this approach can also be used for more than 1 column:
+
+```{r}
+Data |> relocate(Tcells, Monocytes, .after=bid) |> head(3)
+
+# |> head(3) is used only to make the website output visualization manageable :D
+```
+
+We can also modify the argument so that columns are placed before a certain column
+
+```{r}
+Data |> relocate(Tcells, .before=Date) |> head(3)
+
+# |> head(3) is used only to make the website output visualization manageable :D
+```
+
+And as we might suspect, we could specify a column index location rather than using a column name.
+
+```{r}
+Data |> relocate(Date, .before=1) |> head(3)
+
+# |> head(3) is used only to make the website output visualization manageable :D
+```
+
+## rename
+
+At this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?
+
+In base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:
+
+```{r}
+colnames(Subset)
+colnames(Subset)[3]
+```
+
+```{r}
+colnames(Subset)[3] <- "CD8Positive"
+colnames(Subset)
+```
+
+With the tidyverse, we can use the `rename()` function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left
+
+```{r}
+Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
+colnames(Renamed)
+```
+
+If we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.
+
+```{r}
+Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
+colnames(Renamed_Multiple)
+```
+
+## pull
+
+Sometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the `pull()` function, which will retrieve the column contents and strip the column formatting
+
+```{r}
+Data |> pull(Date) |> head(5)
+```
+
+This can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could `pull()` the data and pass it to the `unique()` function:
+
+```{r}
+Data |> pull(Date) |> unique()
+```
+
+
+## filter (Rows)
+
+So far, we have been working with `dplyr` functions primarily used when working with and subsetting columns (including `select()`, `pull()`, `rename()` and `relocate()`). What if we wanted to work with rows of a data.frame? This is where the `filter()` function is used.
+
+The Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let's see how many unique values are contained within that column
+
+```{r}
+Data |> pull(Condition) |> unique()
+```
+
+In the case of this dataset, looks like the .fcs files where treated with either left alone, treated with [PPD (Purified Protein Derrivative)](https://en.wikipedia.org/wiki/Tuberculin) or [SEB](https://en.wikipedia.org/wiki/Enterotoxin_type_B). What if we wanted to subset only those treated with PPD?
+
+Within `filter()`, we would specify the column name as the first argument, and ask that only values equal to (==) "PPD" be returned. Notice in this case, "" are needed, as we are asking for a matching character value.
+
+```{r}
+PPDOnly <- Data |> filter(Condition == "PPD")
+head(PPDOnly, 5)
+```
+
+While this works, using "==" to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains "PPD"
+
+```{r}
+Data |> filter(Condition %in% "PPD") |> head(5)
+```
+
+Similar to what we saw for `select()`, we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within `c()`/
+
+```{r}
+Data |> filter(Condition %in% c("PPD", "SEB")) |> head(5)
+```
+
+Alternatively, we could have set up the vector externally, and then provided it to `filter()`
+
+```{r}
+TheseConditions <- c("PPD", "SEB")
+Data |> filter(Condition %in% TheseConditions) |> head(5)
+```
+
+While this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value?
+As we saw when learning about [Conditionals](/course/02_FilePaths/index.qmd), when we add a ! in front of a logical value, we get the opposite logical value returned
+
+```{r}
+IsThisASpectralInstrument <- TRUE
+
+!IsThisASpectralInstrument
+```
+
+In the context of the `dplyr` package, we can use ! within the `filter()` to remove rows that contain a certain value
+
+```{r}
+Subset <- Data |> filter(!Condition %in% "SEB")
+Subset |> pull(Condition) |> unique()
+```
+
+Likewise, we can also use it with the `select()` to exclude columns we don't want to include
+```{r}
+Subset <- Data |> select(!timepoint)
+Subset[1:3,]
+```
+
+
+## mutate
+
+As we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the `mutate()` function can be used.
+
+Let's start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today
+
+```{r}
+TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
+ select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
+ rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
+```
+
+```{r}
+TidyData
+```
+
+The `mutate()` function can be used to modify existing columns, as well as to create new ones. For example, let's derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:
+
+```{r}
+TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
+TidyData
+```
+
+We can see that we have many significant digits being returned. Let's round this new column to 2 significant digits by applying the `round()` function
+
+```{r}
+TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
+TidyData
+```
+
+
+## arrange
+
+And while we are here, let's rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the `desc()` and `arrange()` functions from `dplyr`:
+
+```{r}
+TidyData <- TidyData |> arrange(desc(TcellsRounded))
+```
+
+And let's go ahead and `filter()` and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):
+
+```{r}
+TidyData |> filter(TcellsRounded > 0.3)
+```
+
+Which is we had wanted to just retrieve the specimen IDs, we could add `pull()` after a new pipe argument.
+
+```{r}
+TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
+```
+
+And finally, since I may want to send the data to a supervisor, let's go ahead and export this "tidyed" version of our data.frame out to it's own .csv file. Working within our project folder, this would look like this:
+
+```{r}
+NewName <- paste0("MyNewDataset", ".csv")
+StorageLocation <- file.path("data", NewName)
+StorageLocation
+```
+```{r}
+#| eval: FALSE
+write.csv(TidyData, StorageLocation, row.names=FALSE)
+```
+
+# Take Away
+
+In this session, we explored the main functions within the `dplyr` package used in context of "tidying" data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don't have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files.
+
+On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later.
+
+Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the `CytoML` package.
+
+
+
+# Additional Resources
+
+[Data Organization in Spreadsheets for Ecologists](https://datacarpentry.github.io/spreadsheet-ecology-lesson/) This Carpentry self-study course was one of my "Aha" moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist).
+
+[Data Analysis and Visualization in R for Ecologists](https://datacarpentry.github.io/R-ecology-lesson/) Continuation of the above, and a good way to continue building on the tidyverse functions we learned today.
+
+[Simplistics: Introduction to Tidyverse in R](https://youtu.be/Bg4qxVNaDck?si=QPQq8TzOZ1w6XSy4) The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ.
+
+[Riffomonas Project Playlist: Data Manipulation with R's Tidyverse](https://youtube.com/playlist?list=PLmNrK_nkqBpKf7j_ewpUm-w33R6PJYtD9&si=BVmDZPIXjRuHjERP) Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course.
+
+# Take-home Problems
+
+:::{.callout-tip title="Problem 1"}
+Taking a dataset (either todays or one of your own), work through the column-operating functions (`select()`, `rename()`, and `relocate()`). Once this is done, `filter()` by conditions from two separate columns, arrange in an order that makes sense, and export this "tidy" data as a .csv file.
+:::
+
+:::{.callout-tip title="Problem 2"}
+We used the `mutate()` function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use `round()` to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it's own .csv file.
+:::
+
+:::{.callout-tip title="Problem 3"}
+We can also use `mutate()` to combine columns. For our dataset, "bid", "timepoint", "Condition" are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using `paste0()`, and save the new column as "filename". Once this is done, `pull()` the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, `length()` and `unique()`)
+:::
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
\ No newline at end of file
diff --git a/course/04_IntroToTidyverse/slides.qmd b/course/04_IntroToTidyverse/slides.qmd
new file mode 100644
index 0000000..9b98420
--- /dev/null
+++ b/course/04_IntroToTidyverse/slides.qmd
@@ -0,0 +1,1199 @@
+---
+title: "04 - Introduction to Tidyverse"
+author: "David Rach"
+date: 02-24-2026
+format:
+ revealjs:
+ theme: default
+ slide-number: true
+ incremental: true
+page-layout: full
+execute:
+ echo: true
+ warning: false
+ message: false
+---
+
+
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
+
+
+----
+
+# Background
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Within our daily workflows as cytometrist, after acquiring data on our respective instruments, we begin analyzing the resulting datasets. After implementing various workflows, we then export data for downstream statistical analysis.
+:::
+:::
+
+::: {.fragment}
+::: {.callout-tip title="."}
+When I first started my Ph.D program, a substantial amount of my day was spent renaming column names of the exported data so that they would fit nicely in a Microsoft Excel sheet column; setting up formulas to combine proportion of positive cells across positive quadrants, etc. Once this was done, additional hours would go by as I copied and pasted contents of those columns over to a GraphPad Prism worksheet for statistical analysis.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+This of course was in an ideal scenario. Often times, the data was less organized, and instead of time spent copying and pasting over columns, it would first be spent rearranging values from individual cells in the worksheet that were separated by spaces, all the while trying to remember what various color codes and bold font stood for.
+:::
+:::
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Today, we will explore what makes data ["tidy"](https://vita.had.co.nz/papers/tidy-data.pdf), and how to use the toolsets implemented in the various [tidyverse](https://cran.r-project.org/web/packages/tidyverse/vignettes/paper.html) R packages. At it's simplest, if we think of and organize all our data in terms of rows and columns, we need fewer tools (ie. functions) to reshape and extract useful information that we are interested in. Additionally, this approach aligns more closely with how computers work, allowing us to carry out tasks that would otherwise have taken hours in mere seconds.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+The dataset we will be using today is a manually-gated spectral flow cytometry dataset (similar to ones we would see exported by commercial software), and has been intentionally left slightly messy. You could however just as easily use a "matrix" or "data.frame" object exported from inside an [fcs file](/course/03_InsideFCSFile/), or swap in your own dataset. You would just need to make sure to switch out the input data by providing an alternate [file path](/course/02_FilePaths/), etc.
+:::
+:::
+
+---
+
+# Walk Through
+
+:::{.callout-important title="Housekeeping"}
+As we do [every week](/course/02_FilePaths/index.qmd), on GitHub, sync your forked version of the CytometryInR course to bring in the most recent updates. Then within Positron, pull in those changes to your local computer.
+
+After creating a "Week04" project folder, copy over the contents of "course/04_IntroToTidyverse" to that folder. This will hopefully prevent any merge issues when you attempt to bring in new data to your local Cytometry in R folder next week. Please remember once you have set up your project folder to stage, commit and pus your changes to "Week04" to GitHub so that they are backed up remotely.
+
+If you are having issues syncing due to the Take-Home Problem merge conflict, see this [walkthrough](https://umgcccfcsr.github.io/CytometryInR/course/00_BonusContent/PullConflicts/)
+:::
+
+---
+
+## read.csv
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We will start by first loading in our copied over dataset (Dataset.csv) from it's location in the project folder. If you are following the organization scheme we have been using throughout the course, your file path will look something like this:
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+#| include: FALSE
+
+# For use only when building the website, otherwise keep eval to FALSE
+thefilepath <- file.path(getwd(), "course", "04_IntroToTidyverse", "data", "Dataset.csv")
+
+thefilepath
+```
+
+:::
+
+::: {.fragment}
+```{r}
+#| eval: TRUE
+thefilepath <- file.path("data", "Dataset.csv")
+
+thefilepath
+```
+
+:::
+
+---
+
+::: {.fragment}
+:::{.callout-tip title="Reminder"}
+We encourage using the `file.path` function to build our file paths, as this keeps our code reproducible and replicable when a project folder is copied to other people's computers that differ on whether the operating system uses forward or backward slash separation between folders.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Above, we directly specified the name (Dataset) and filetype (.csv) of the file we wanted in the last argument of the file.path ("Dataset.csv"). This allows us to skip the `list.files()` step we used last week as we have provided the full file path. While this approach can be faster, if we accidentally mistype the file name, we could end up with an error at the next step due to no files being found with the mistyped name.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Since our dataset is stored as a .csv file, we will be using the `read.csv()` function from the `utils` package (included in our base R software installation) to read it into R. We will also use the `colnames()` function from last week to get a read-out of the column names.
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data <- read.csv(file=thefilepath, check.names=FALSE)
+colnames(Data)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+As we look at the line of code, we now have enough context to decipher that the "file" argument is where we provide a file path to an individual file, but what does the "check.names" argument do?
+
+Let's see what happens to the column names when we set "check.names" argument to TRUE:
+:::
+:::
+
+
+::: {.fragment}
+```{r}
+Data_Alternative <- read.csv(thefilepath, check.names=TRUE)
+colnames(Data_Alternative)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+As we can see, any column name that contained a special character or a space was automatically converted over to [R-approved syntax](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters). However, this resulted in the loss of both +" and "-", leaving us unable to determine whether we are looking at cells within or outside a particular gate.
+:::
+:::
+
+::: {.fragment}
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Because of this, it is often better to rename columns individually after import, which we will learn how to do later today.
+
+Following up with what we practiced last week, lets use the `head()` function to visualize the first few rows of data.
+:::
+:::
+
+::: {.fragment}
+```{r}
+head(Data, 3)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+When working in Positron, we could have alternatively clicked on the little grid icon next to our created variable "Data" in the right secondary sidebar, which would have opened the data in our Editor window. From this same window, we can see it is stored as a "data.frame" object type.
+:::
+:::
+
+---
+
+
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We could also achieve the same window to open using the `View()` function:
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+View(Data)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Wrapping up our brief recap of [last week](/course/03_InsideFCSFile/index.qmd) functions, we can check an objects type using both the `class()` and `str()` functions.
+:::
+:::
+
+::: {.fragment}
+```{r}
+class(Data)
+```
+
+:::
+
+::: {.fragment}
+```{r}
+str(Data)
+```
+
+:::
+
+---
+
+## data.frame
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Or alternatively using the new-to-us `glimpse()` function
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| error: TRUE
+glimpse(Data)
+```
+
+:::
+
+---
+
+:::{.callout-tip title="Checkpoint 1"}
+This however returns an error. Any idea why this might be occuring?
+:::
+
+::: {.fragment}
+```{r}
+#| code-fold: TRUE
+
+# We haven't attached/loaded the package in which the function glimpse is within
+```
+
+:::
+
+---
+
+:::{.callout-tip title="Checkpoint 2"}
+How would we locate a package a not-yet-loaded function is within?
+:::
+
+::: {.fragment}
+```{r}
+#| code-fold: TRUE
+#| eval: FALSE
+
+# We can use double ? to search all installed packages for a function, regardless
+# if the package is attached to the environment or not
+
+??glimpse
+```
+
+:::
+
+---
+
+
+
+::: {.fragment}
+::: {.callout-tip title="."}
+From the list of search matches (in the right secondary sidebar), it looks likely that the `glimpse()` function in the `dplyr` package was the one we were looking for. This is one the main tidyverse packages we will be using throughout the course. Let's attach it to our environment via the `library()` call first and try running `glimpse()` again.
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| message: FALSE
+#| warning: FALSE
+library(dplyr)
+glimpse(Data)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We notice that while similar to the `str()` output, `glimpse()` handles spacing a little differently, and includes the dimensions at the top. However, we can also retrieve the dimensions directly using the `dim()` function (which maintains the row followed by column position convention of base R (ex. [196,31]))
+:::
+:::
+
+::: {.fragment}
+```{r}
+dim(Data)
+```
+
+:::
+
+---
+
+## Column value type
+
+::: {.fragment}
+::: {.callout-tip title="."}
+As we saw last week, functions often need values that match a certain type (the paintbrush needing paint analogy). As we inspect the columns of Data, we can notice some of the columns contain values within that are character (ie. "char") values. Others appear to contain numeric values (which are [subtyped](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) as either double ("ie. dbl") or integer (ie. "int")). At first glance, we do not appear to have any logical (ie. TRUE or FALSE) columns in this dataset.
+:::
+:::
+
+---
+
+
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+If we were trying to verify type of values contained within a data.frame column, we could employ several similarly-named functions (`is.character()`, `is.numeric()` or `is.logical()`) to check
+:::
+:::
+
+::: {.fragment}
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.character(Data$bid)
+```
+
+:::
+
+::: {.fragment}
+```{r}
+is.numeric(Data$bid)
+```
+
+:::
+
+::: {.fragment}
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.character(Data$Tcells_count)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+For numeric columns using the `is.numeric()` function, we can also be [subtype](https://www.r-bloggers.com/2023/09/understanding-data-types-in-r/) specific using either `is.integer()` or `is.double()`.
+:::
+:::
+
+::: {.fragment}
+```{r}
+# colnames(Data) # To recheck the column names
+
+is.numeric(Data$Tcells_count)
+is.integer(Data$Tcells_count)
+is.double(Data$Tcells_count)
+```
+
+:::
+
+---
+
+:::{.callout-tip title="Reminder"}
+As we observed last week with keywords, column names that contain [special characters](https://ssojet.com/escaping/regex-escaping-in-r#understanding-the-need-for-escaping-special-characters) like $ or spaces will need to be surrounded with tick marks in order for the function to be able to run.
+:::
+
+::: {.fragment}
+```{r}
+#| error: TRUE
+
+# colnames(Data) # To recheck the column names
+is.numeric(Data$CD8-)
+```
+
+:::
+
+::: {.fragment}
+```{r}
+# colnames(Data) # To recheck the column names
+is.numeric(Data$`CD8-`)
+```
+
+:::
+
+---
+
+## select (Columns)
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Now that we have read in our data, and have a general picture of the structure and contents, lets start learning the main `dplyr` functions we will be using throughout the course. To do this, lets go ahead and attach `dplyr` to our local environment via the `library()` call.
+:::
+:::
+
+::: {.fragment}
+```{r}
+library(dplyr)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We will start with the `select()` function. It is used to "select" a column from a data.frame type object. In the simplest usage, we provide the name of our data.frame variable/object as the first argument after the opening parenthesis. This is then followed by the name of the column we want to select as the second argument (let's place around the "" around the column name for now)
+:::
+:::
+
+::: {.fragment}
+```{r}
+DateColumn <- select(Data, "Date")
+DateColumn
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+This results in the column being selected, resulting in the new object containing only that subsetted out column from the original Data object.
+:::
+:::
+
+---
+
+### Pipe Operators
+
+::: {.fragment}
+::: {.callout-tip title="."}
+While the above line of code works to select a column, when you encounter `select()` out in the wild, it will more often be in a line of code that looks like this:
+:::
+:::
+
+::: {.fragment}
+```{r}
+DateColumn <- Data |> select("Date")
+DateColumn
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+... **"What in the world is that thing |> ?"** ...
+:::
+:::
+
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Glad you asked! An useful feature of the tidyverse packages is their use of [pipes](https://r4ds.had.co.nz/pipes.html) (either the original `magrittr` package's "%>%" or `base R version >4.1.0's` "|>""), usually appearing like this:
+:::
+:::
+
+::: {.fragment}
+```{r}
+# magrittr %>% pipe
+
+DateColumn <- Data %>% select("Date")
+
+# base R |> pipe
+DateColumn <- Data |> select("Date")
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+... **"How do we interpret/read that line of code?"** ...
+:::
+:::
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Let's break it down, starting off just to the right of the assignment arrow (<-) with our data.frame "Data".
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| eval: false
+
+Data
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We then proceed to read to the right, adding in our pipe operator. The pipe essentially serves as an intermediate passing the contents of data onward to the subsequent function.
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+Data |>
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In our case, this subsequent function is the `select()` function, which will select a particular column from the available data. When using the pipe, the first argument slot we saw for "select(Data, "Date")" is occupied by the contents Data that are being passed by the pipe.
+:::
+:::
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+Data |> select()
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+To complete the transfer, we provide the desired column name to `select()` to act on ("Date" in this case)
+:::
+:::
+
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+Data |> select("Date")
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In summary, contents of Data are passed to the pipe, and select runs on those contents to select the Date column
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> select("Date")
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+One of the main advantages for using pipes, is they can be linked together, passing resulting objects of one operation on to the next pipe and subsequent function. We can see this in operation in the example below where we hand off the isolated "Date" column to the `nrow()` function to determine number of rows. We will use pipes throughout the course, so you will gradually gain familiarity as you encounter them.
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> select("Date") |> nrow()
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+For those with prior R experience, you will be more familiar with the older magrittr %>% pipe. The base R |> pipe operator was introduced starting with R version 4.1.0. While mostly interchangeable, they have a [few nuances](https://tidyverse.org/blog/2023/04/base-vs-magrittr-pipe/) that come into play for more advance use cases. You are welcome to use whichever you prefer (my current preference is |> as it's one less key to press).
+:::
+:::
+
+---
+
+### R Quirks
+
+:::{.callout-note title="Odd R Behavior # 1"}
+While we used "" around the column name in our previous example, unlike what we encountered with `install.packages()` when we forget to include quotation marks, `select()` still retrieves the correct column despite Date not being an environment variable:
+:::
+
+::: {.fragment}
+```{r}
+Data |> select(Date) |> head(5)
+```
+
+:::
+
+---
+
+:::{.callout-note title="."}
+The reasons for this Odd R behaviour are nuanced and for [another day](https://adv-r.hadley.nz/evaluation.html). For now, think of it as `dplyr` R package is picking up the slack, and using context to infer it's a column name and not an environmental variable/object.
+:::
+
+---
+
+### Selecting multiple columns
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Since we are able to select one column, can we select multiple (similar to a [Data[,2:5]] approach in base R)? We can, and they can be positioned anywhere within the data.frame:
+:::
+:::
+
+::: {.fragment}
+```{r}
+Subset <- Data |> select(bid, timepoint, Condition, Tcells, `CD8+`, `CD4+`)
+
+head(Subset, 5)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+You will notice that the order in which we selected the columns will dictate their position in the subsetted data.frame object:
+:::
+:::
+
+::: {.fragment}
+```{r}
+Subset <- Data |> select(bid, Tcells, `CD8+`, `CD4+`, timepoint, Condition, )
+
+head(Subset, 5)
+```
+
+:::
+
+---
+
+## relocate
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Alternatively, we occasionally want to move one column. While we could respecify the location using `select()`, specifying the names of all the other columns out in a line of code to just to rearrange one does not sound like a good use of time. For this reason, the second `dplyr` function we will be learning is the `relocate()` function.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Looking at our Data object, let's say we wanted to move the Tcells column from its current location to the second column position (right after the bid column). The line of code to do so would look like:
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> relocate(Tcells, .after=bid) |> head(5)
+
+# |> head(5) is used only to make the website output visualization manageable :D
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Similar to what we saw with `select()`, this approach can also be used for more than 1 column:
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> relocate(Tcells, Monocytes, .after=bid) |> head(5)
+
+# |> head(5) is used only to make the website output visualization manageable :D
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We can also modify the argument so that columns are placed before a certain column
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> relocate(Tcells, .before=Date) |> head(5)
+
+# |> head(5) is used only to make the website output visualization manageable :D
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+And as we might suspect, we could specify a column index location rather than using a column name.
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> relocate(Date, .before=1) |> head(5)
+
+# |> head(5) is used only to make the website output visualization manageable :D
+```
+
+:::
+
+---
+
+## rename
+
+::: {.fragment}
+::: {.callout-tip title="."}
+At this point, we are able to both move and select particular columns, allowing us to rearrange and subset a larger data.frame object however we want it to appear. However, as we encountered, some of the names contain special characters and spaces, requiring use of tick marks (``) to avoid issues. How can we change a column name?
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In base R, we could change individual column names by assigning a new value with the assignment arrow to the corresponding column name index. For example, looking at our Subset object, wen could rename CD8+ as follows:
+:::
+:::
+
+
+::: {.fragment}
+```{r}
+colnames(Subset)
+colnames(Subset)[3]
+```
+
+:::
+
+
+::: {.fragment}
+```{r}
+colnames(Subset)[3] <- "CD8Positive"
+colnames(Subset)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+With the tidyverse, we can use the `rename()` function which removes the need to look up the column index number. The way we write the argument is placing within the parenthesis the old name to the right of the equals sign, with the new name to the left
+:::
+:::
+
+::: {.fragment}
+```{r}
+Renamed <- Subset |> rename(CD4_Positive = `CD4+`)
+colnames(Renamed)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+If we wanted to rename multiple column names at once, we would just need to include a comma between the individual rename arguments within the parenthesis.
+:::
+:::
+
+::: {.fragment}
+```{r}
+Renamed_Multiple <- Subset |> rename(specimen = bid, timepoint_months = timepoint, stimulation = Condition, CD4Positive=`CD4+`)
+colnames(Renamed_Multiple)
+```
+
+:::
+
+---
+
+## pull
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Sometimes, we may want to retrieve individual values present in a column, to use within either a vector or a list. We can do this using the `pull()` function, which will retrieve the column contents and strip the column formatting
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> pull(Date) |> head(10)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+This can be useful when we are doing data exploration, and trying to determine how many unique variants might be present. For example, if we wanted to see what days individual samples were acquired, we could `pull()` the data and pass it to the `unique()` function:
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> pull(Date) |> unique()
+```
+
+:::
+
+---
+
+
+## filter (Rows)
+
+::: {.fragment}
+::: {.callout-tip title="."}
+So far, we have been working with `dplyr` functions primarily used when working with and subsetting columns (including `select()`, `pull()`, `rename()` and `relocate()`). What if we wanted to work with rows of a data.frame? This is where the `filter()` function is used.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+The Condition column in this Dataset appears to be indicating whether the samples were stimulated. Let's see how many unique values are contained within that column
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> pull(Condition) |> unique()
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In the case of this dataset, looks like the .fcs files where treated with either left alone, treated with [PPD (Purified Protein Derrivative)](https://en.wikipedia.org/wiki/Tuberculin) or [SEB](https://en.wikipedia.org/wiki/Enterotoxin_type_B). What if we wanted to subset only those treated with PPD?
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Within `filter()`, we would specify the column name as the first argument, and ask that only values equal to (==) "PPD" be returned. Notice in this case, "" are needed, as we are asking for a matching character value.
+:::
+:::
+
+::: {.fragment}
+```{r}
+PPDOnly <- Data |> filter(Condition == "PPD")
+head(PPDOnly, 5)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+While this works, using "==" to match can glitch, especially with character values. Using the %in% operator is a better way of identifying and extracting only the rows whose Condition column contains "PPD"
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> filter(Condition %in% "PPD") |> head(10)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Similar to what we saw for `select()`, we can grab rows that contain various values at once. We would just need to modify the second part of the argument. If we wanted to grab rows whose Condition column contained either PPD or SEB, we would need to provide that argument as a vector, placing both within `c()`/
+:::
+:::
+
+::: {.fragment}
+```{r}
+Data |> filter(Condition %in% c("PPD", "SEB")) |> head(10)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Alternatively, we could have set up the vector externally, and then provided it to `filter()`
+:::
+:::
+
+::: {.fragment}
+```{r}
+TheseConditions <- c("PPD", "SEB")
+Data |> filter(Condition %in% TheseConditions) |> head(10)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+While this works when we have a limited number of variant condition values, what if had many more but only wanted to exclude one value?
+As we saw when learning about [Conditionals](/course/02_FilePaths/index.qmd), when we add a ! in front of a logical value, we get the opposite logical value returned
+:::
+:::
+
+::: {.fragment}
+```{r}
+IsThisASpectralInstrument <- TRUE
+
+!IsThisASpectralInstrument
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In the context of the `dplyr` package, we can use ! within the `filter()` to remove rows that contain a certain value
+:::
+:::
+
+::: {.fragment}
+```{r}
+Subset <- Data |> filter(!Condition %in% "SEB")
+Subset |> pull(Condition) |> unique()
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Likewise, we can also use it with the `select()` to exclude columns we don't want to include
+:::
+:::
+
+::: {.fragment}
+```{r}
+Subset <- Data |> select(!timepoint)
+Subset[1:3,]
+```
+
+:::
+
+---
+
+
+## mutate
+
+::: {.fragment}
+::: {.callout-tip title="."}
+As we can see, with just these handful of functions, we have the building blocks to rearrange and subset a larger data.frame into a format that we prefer. But what if we wanted to alter the content of a column, or add new columns to an existing data.frame? This is where the `mutate()` function can be used.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Let's start by slimming down our current Data to a smaller workable example, highlighting the functions and pipes we learned about today
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData <- Data |> filter(Condition %in% "Ctrl") |> filter(timepoint %in% "0") |>
+ select(bid, timepoint, Condition, Date, Tcells_count, CD45_count) |>
+ rename(specimen=bid, condition=Condition) |> relocate(Date, .after=specimen)
+```
+
+:::
+
+---
+
+::: {.fragment}
+```{r}
+TidyData
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+The `mutate()` function can be used to modify existing columns, as well as to create new ones. For example, let's derrive the proportion of T cells from the overall CD45 gate. To do so, within the parenthesis, we would specify a new column name, and then divide the original columns:
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData <- TidyData |> mutate(Tcells_ProportionCD45 = Tcells_count / CD45_count)
+TidyData
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+We can see that we have many significant digits being returned. Let's round this new column to 2 significant digits by applying the `round()` function
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData <- TidyData |> mutate(TcellsRounded = round(Tcells_ProportionCD45, 2))
+TidyData
+```
+
+:::
+
+---
+
+
+## arrange
+
+::: {.fragment}
+::: {.callout-tip title="."}
+And while we are here, let's rearrange the rows so that they are descending based on the Tcell proportion. We can use this by using the `desc()` and `arrange()` functions from `dplyr`:
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData <- TidyData |> arrange(desc(TcellsRounded))
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+And let's go ahead and `filter()` and identify the specimens that had more than 30% T cells as part of the overall CD45 gate (context, these samples were Cord Blood):
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData |> filter(TcellsRounded > 0.3)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Which is we had wanted to just retrieve the specimen IDs, we could add `pull()` after a new pipe argument.
+:::
+:::
+
+::: {.fragment}
+```{r}
+TidyData |> filter(TcellsRounded > 0.3) |> pull(specimen)
+```
+
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+And finally, since I may want to send the data to a supervisor, let's go ahead and export this "tidyed" version of our data.frame out to it's own .csv file. Working within our project folder, this would look like this:
+:::
+:::
+
+::: {.fragment}
+```{r}
+NewName <- paste0("MyNewDataset", ".csv")
+StorageLocation <- file.path("data", NewName)
+StorageLocation
+```
+:::
+
+::: {.fragment}
+```{r}
+#| eval: FALSE
+write.csv(TidyData, StorageLocation, row.names=FALSE)
+```
+:::
+
+---
+
+# Take Away
+
+::: {.fragment}
+::: {.callout-tip title="."}
+In this session, we explored the main functions within the `dplyr` package used in context of "tidying" data, including selecting columns, filtering for rows, as well as additional functions used to create or modify existing values. We will continue to build on these throughout the course, introducing a few additional tidyverse functions we don't have time to cover today as appropiate. As we saw, knowing how to use these functions can allow us to extensively and quickly modify our existing exported data files.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+On important goal as we move through the course (in terms of both reproducibility and replicability) is to attempt to only modify files within R, not go back to the original csv or excel file and hand-modify individual values. This approach is not reproducible or replicable. Once set up, an R script can quickly re-carry out these same cleanup steps, and leave a documented process of how the data has changed (even more so if you are maintaining version control). If you do want to save the changes you have made, it is best to save it out as a new .csv file with which you work later.
+:::
+:::
+
+---
+
+::: {.fragment}
+::: {.callout-tip title="."}
+Next week, we will be using these skills when setting up metadata for our .fcs files. We will additionally take a look at the main format source of controversy within Bioconductor Flow Cytometry packages, ie. whether to use a flowframe or a cytoframe. Exciting stuff, but important information to know as the functions needed to import them are slightly different. We will also look at how to import existing manually gated .wsp from FlowJo/Diva/Floreada in via the `CytoML` package.
+:::
+:::
+
+---
+
+
+
+---
+
+# Additional Resources
+
+[Data Organization in Spreadsheets for Ecologists](https://datacarpentry.github.io/spreadsheet-ecology-lesson/) This Carpentry self-study course was one of my "Aha" moments early on when learning R, and reinforced the need to try to keep my own Excel/CSV files in a tidy manner. It is worth the time going through in its entirety (even for non-Ecologist).
+
+[Data Analysis and Visualization in R for Ecologists](https://datacarpentry.github.io/R-ecology-lesson/) Continuation of the above, and a good way to continue building on the tidyverse functions we learned today.
+
+---
+
+[Simplistics: Introduction to Tidyverse in R](https://youtu.be/Bg4qxVNaDck?si=QPQq8TzOZ1w6XSy4) The YouTube channel is mainly focused on statistics for Psych classes, but at the end of the day, we are all working with similar objects with rows and columns, just the values contained within differ.
+
+[Riffomonas Project Playlist: Data Manipulation with R's Tidyverse](https://youtube.com/playlist?list=PLmNrK_nkqBpKf7j_ewpUm-w33R6PJYtD9&si=BVmDZPIXjRuHjERP) Riffomonas has a playlist that delves into both the tidyverse functions we used today, as well as other ones we will encounter later on in the course.
+
+---
+
+# Take-home Problems
+
+:::{.callout-tip title="Problem 1"}
+Taking a dataset (either todays or one of your own), work through the column-operating functions (`select()`, `rename()`, and `relocate()`). Once this is done, `filter()` by conditions from two separate columns, arrange in an order that makes sense, and export this "tidy" data as a .csv file.
+:::
+
+---
+
+:::{.callout-tip title="Problem 2"}
+We used the `mutate()` function to create new columns, but it can also be used to modify existing ones. Various numeric columns are showing way to many significant digits. As was shown, use `round()` to round all these proportion columns, but use mutate to overwrite the existing column. Export this as it's own .csv file.
+:::
+
+---
+
+:::{.callout-tip title="Problem 3"}
+We can also use `mutate()` to combine columns. For our dataset, "bid", "timepoint", "Condition" are separate columns that originally were all part of the filename for the individual .fcs file. Try to figure out a way to combine them back together using `paste0()`, and save the new column as "filename". Once this is done, `pull()` the contents of this column, and using try to determine whether there were any duplicates (think innovative ways of using !, `length()` and `unique()`)
+:::
+
+---
+
+::: {style="text-align: right;"}
+[](https://www.gnu.org/licenses/agpl-3.0.en.html) [](http://creativecommons.org/licenses/by-sa/4.0/)
+:::
\ No newline at end of file
diff --git a/course/05_GatingSets/Downsampling.qmd b/course/05_GatingSets/Downsampling.qmd
new file mode 100644
index 0000000..a2aa316
--- /dev/null
+++ b/course/05_GatingSets/Downsampling.qmd
@@ -0,0 +1,65 @@
+---
+title: "Downsampling"
+author: "David Rach"
+
+format: html
+---
+
+# Background
+
+Due to trying to keep the overall file size down, I am downsampling to 100 events. For anyone interested in how I did this, this Quarto Markdown Document contains the code needed to repeat the process.
+
+# Getting Started
+
+Attach the required packages via the `library()` function
+
+```{r}
+#| eval: FALSE
+library(purrr) # CRAN
+library(flowWorkspace) # Bioconductor
+library(Luciernaga) #DavidRach/Luciernaga
+```
+
+## Specify file.path and identify files
+
+Due to the counts being conducter on two separate instruments, the number of columns differs, so they will need to be loaded into separate GatingSet objects.
+
+```{r}
+#| eval: FALSE
+StorageLocation <- file.path("/media", "david", "DavidSSD", "AlphaBeta", "Tcells")
+Existing <- list.files(StorageLocation, pattern=".fcs", full.names=TRUE)
+List1 <- Existing[c(1,3:4,6,12, 14)]
+```
+
+## Load .fcs files into a GatingSet
+
+Load in files to their respective GatingSet objects
+
+```{r}
+#| eval: FALSE
+cs1 <- load_cytoset_from_fcs(List1, truncate_max_range = FALSE, transformation = FALSE)
+gs1 <- GatingSet(cs1)
+```
+
+# Downsample each sample and pass back to the folder
+
+From here, each file in the Gating set is passed to `Utility_Downsample()`, subsampling for 100 events. In this case, subsets argument is set to "root", so all events. If we had implemented gates, we could have selected a particular population from which to downsample.
+
+```{r}
+#| eval: FALSE
+NewStorageLocation <- file.path("course", "05_GatingSets", "data")
+
+walk(.x=gs1, .f=Luciernaga::Utility_Downsample,
+ sample.name=c("$PROJ", "GROUPNAME", "TUBENAME"),
+ export=TRUE, outpath=NewStorageLocation,
+ subsample=10000, subsets="root", inverse.transform=FALSE)
+```
+
+# Conclusion
+
+We will look more at how the Utility_Downsample is constructed during [Week #10](/Schedule.qmd#downsampling-and-concatenation)
+
+```{r}
+#| eval: FALSE
+sessionInfo()
+```
\ No newline at end of file
diff --git a/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs b/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs
new file mode 100755
index 0000000..7dee6ae
--- /dev/null
+++ b/course/05_GatingSets/data/2025_07_26_AB_02_INF052_00_Ctrl.fcs
@@ -0,0 +1,5278 @@
+FCS3.0 58 18381 18382 1738381 0 0#$BEGINANALYSIS#0#$BEGINDATA#18382#$BEGINSTEXT#0#$BTIM#22:23:51.45#$BYTEORD#4,3,2,1#$CYT#Aurora#$CYTOLIB_VERSION#2.22.0#$CYTSN#U1368#$DATATYPE#F#$DATE#26-Jul-2025#$ENDANALYSIS#0#$ENDDATA#1738381#$ENDSTEXT#0#$ETIM#22:25:21.04#$FIL#00_Ctrl.fcs#$INST#Cytekbio#$MODE#L#$NEXTDATA#0#$OP#David Rach#$P10B#32#$P10E#0,0#$P10N#SSC-B-A#$P10R#4194304#$P10TYPE#Side_Scatter#$P10V#266#$P11B#32#$P11E#0,0#$P11N#BUV395-A#$P11R#4194304#$P11S#CD62L#$P11TYPE#Unmixed_Fluorescence#$P11V#0#$P12B#32#$P12E#0,0#$P12N#BUV563-A#$P12R#4194304#$P12S#CD69#$P12TYPE#Unmixed_Fluorescence#$P12V#0#$P13B#32#$P13E#0,0#$P13N#BUV615-A#$P13R#4194304#$P13S#CCR4#$P13TYPE#Unmixed_Fluorescence#$P13V#0#$P14B#32#$P14E#0,0#$P14N#BUV661-A#$P14R#4194304#$P14S#Vd2#$P14TYPE#Unmixed_Fluorescence#$P14V#0#$P15B#32#$P15E#0,0#$P15N#BUV737-A#$P15R#4194304#$P15S#CD38#$P15TYPE#Unmixed_Fluorescence#$P15V#0#$P16B#32#$P16E#0,0#$P16N#BUV805-A#$P16R#4194304#$P16S#CD4#$P16TYPE#Unmixed_Fluorescence#$P16V#0#$P17B#32#$P17E#0,0#$P17N#Pacific Blue-A#$P17R#4194304#$P17S#Dump#$P17TYPE#Unmixed_Fluorescence#$P17V#0#$P18B#32#$P18E#0,0#$P18N#BV480-A#$P18R#4194304#$P18S#CD161#$P18TYPE#Unmixed_Fluorescence#$P18V#0#$P19B#32#$P19E#0,0#$P19N#BV570-A#$P19R#4194304#$P19S#CD16#$P19TYPE#Unmixed_Fluorescence#$P19V#0#$P1B#32#$P1E#0,0#$P1N#Time#$P1R#896745#$P1TYPE#Time#$P20B#32#$P20E#0,0#$P20N#BV605-A#$P20R#4194304#$P20S#CD45RA#$P20TYPE#Unmixed_Fluorescence#$P20V#0#$P21B#32#$P21E#0,0#$P21N#BV650-A#$P21R#4194304#$P21S#CD8#$P21TYPE#Unmixed_Fluorescence#$P21V#0#$P22B#32#$P22E#0,0#$P22N#BV711-A#$P22R#4194304#$P22S#Va7.2#$P22TYPE#Unmixed_Fluorescence#$P22V#0#$P23B#32#$P23E#0,0#$P23N#BV750-A#$P23R#4194304#$P23S#IFNg#$P23TYPE#Unmixed_Fluorescence#$P23V#0#$P24B#32#$P24E#0,0#$P24N#BV786-A#$P24R#4194304#$P24S#CCR6#$P24TYPE#Unmixed_Fluorescence#$P24V#0#$P25B#32#$P25E#0,0#$P25N#Alexa Fluor 488-A#$P25R#4194304#$P25S#FoxP3#$P25TYPE#Unmixed_Fluorescence#$P25V#0#$P26B#32#$P26E#0,0#$P26N#Spark Blue 550-A#$P26R#4194304#$P26S#CD3#$P26TYPE#Unmixed_Fluorescence#$P26V#0#$P27B#32#$P27E#0,0#$P27N#Spark Blue 574-A#$P27R#4194304#$P27S#CD45#$P27TYPE#Unmixed_Fluorescence#$P27V#0#$P28B#32#$P28E#0,0#$P28N#RB613-A#$P28R#4194304#$P28S#PD1#$P28TYPE#Unmixed_Fluorescence#$P28V#0#$P29B#32#$P29E#0,0#$P29N#RB705-A#$P29R#4194304#$P29S#CD26#$P29TYPE#Unmixed_Fluorescence#$P29V#0#$P2B#32#$P2E#0,0#$P2N#SSC-W#$P2R#4194304#$P2TYPE#Side_Scatter#$P2V#350#$P30B#32#$P30E#0,0#$P30N#RB780-A#$P30R#4194304#$P30S#CXCR5#$P30TYPE#Unmixed_Fluorescence#$P30V#0#$P31B#32#$P31E#0,0#$P31N#PE-A#$P31R#4194304#$P31S#ICOS#$P31TYPE#Unmixed_Fluorescence#$P31V#0#$P32B#32#$P32E#0,0#$P32N#PE-Dazzle594-A#$P32R#4194304#$P32S#TNFa#$P32TYPE#Unmixed_Fluorescence#$P32V#0#$P33B#32#$P33E#0,0#$P33N#PE-Cy5-A#$P33R#4194304#$P33S#CXCR3#$P33TYPE#Unmixed_Fluorescence#$P33V#0#$P34B#32#$P34E#0,0#$P34N#PE-Fire 700-A#$P34R#4194304#$P34S#CD127#$P34TYPE#Unmixed_Fluorescence#$P34V#0#$P35B#32#$P35E#0,0#$P35N#PE-Fire 744-A#$P35R#4194304#$P35S#CD25#$P35TYPE#Unmixed_Fluorescence#$P35V#0#$P36B#32#$P36E#0,0#$P36N#PE-Vio770-A#$P36R#4194304#$P36S#HLA-DR#$P36TYPE#Unmixed_Fluorescence#$P36V#0#$P37B#32#$P37E#0,0#$P37N#APC-A#$P37R#4194304#$P37S#CD39#$P37TYPE#Unmixed_Fluorescence#$P37V#0#$P38B#32#$P38E#0,0#$P38N#Alexa Fluor 647-A#$P38R#4194304#$P38S#IL-2#$P38TYPE#Unmixed_Fluorescence#$P38V#0#$P39B#32#$P39E#0,0#$P39N#APC-R700-A#$P39R#4194304#$P39S#CD107a#$P39TYPE#Unmixed_Fluorescence#$P39V#0#$P3B#32#$P3E#0,0#$P3N#SSC-H#$P3R#4194304#$P3TYPE#Side_Scatter#$P3V#350#$P40B#32#$P40E#0,0#$P40N#Zombie NIR-A#$P40R#4194304#$P40S#Viability#$P40TYPE#Unmixed_Fluorescence#$P40V#0#$P41B#32#$P41E#0,0#$P41N#APC-Fire 750-A#$P41R#4194304#$P41S#CD27#$P41TYPE#Unmixed_Fluorescence#$P41V#0#$P42B#32#$P42E#0,0#$P42N#APC-Fire 810-A#$P42R#4194304#$P42S#CCR7#$P42TYPE#Unmixed_Fluorescence#$P42V#0#$P43B#32#$P43E#0,0#$P43N#AF-A#$P43R#4194304#$P43TYPE#Unmixed_Fluorescence#$P43V#0#$P4B#32#$P4E#0,0#$P4N#SSC-A#$P4R#4194304#$P4TYPE#Side_Scatter#$P4V#350#$P5B#32#$P5E#0,0#$P5N#FSC-W#$P5R#4194304#$P5TYPE#Forward_Scatter#$P5V#64#$P6B#32#$P6E#0,0#$P6N#FSC-H#$P6R#4194304#$P6TYPE#Forward_Scatter#$P6V#64#$P7B#32#$P7E#0,0#$P7N#FSC-A#$P7R#4194304#$P7TYPE#Forward_Scatter#$P7V#64#$P8B#32#$P8E#0,0#$P8N#SSC-B-W#$P8R#4194304#$P8TYPE#Side_Scatter#$P8V#266#$P9B#32#$P9E#0,0#$P9N#SSC-B-H#$P9R#4194304#$P9TYPE#Side_Scatter#$P9V#266#$PAR#43#$PROJ#2025_07_26_AB_02#$SPILLOVER#33,BUV395-A,BUV563-A,BUV615-A,BUV661-A,BUV737-A,BUV805-A,Pacific Blue-A,BV480-A,BV570-A,BV605-A,BV650-A,BV711-A,BV750-A,BV786-A,Alexa Fluor 488-A,Spark Blue 550-A,Spark Blue 574-A,RB613-A,RB705-A,RB780-A,PE-A,PE-Dazzle594-A,PE-Cy5-A,PE-Fire 700-A,PE-Fire 744-A,PE-Vio770-A,APC-A,Alexa Fluor 647-A,APC-R700-A,Zombie NIR-A,APC-Fire 750-A,APC-Fire 810-A,AF-A,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000001,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000#$TIMESTEP#0.0001#$TOT#10000#$VOL#103.16#APPLY COMPENSATION#FALSE#CHARSET#utf-8#CREATOR#SpectroFlo 3.3.0#FCSversion#3#FILENAME#/media/david/DavidSSD/AlphaBeta/Tcells/2025_07_26_AB_02_INF052_00_Ctrl.fcs#flowCore_$P10Rmax#4194303#flowCore_$P10Rmin#0#flowCore_$P11Rmax#4192505.75#flowCore_$P11Rmin#-111.00008392334#flowCore_$P12Rmax#4192505.75#flowCore_$P12Rmin#-111.00008392334#flowCore_$P13Rmax#4192505.75#flowCore_$P13Rmin#-111.00008392334#flowCore_$P14Rmax#4192505.75#flowCore_$P14Rmin#-111.00008392334#flowCore_$P15Rmax#4192505.75#flowCore_$P15Rmin#-111.00008392334#flowCore_$P16Rmax#4192505.75#flowCore_$P16Rmin#-111.00008392334#flowCore_$P17Rmax#4192505.75#flowCore_$P17Rmin#-111.00008392334#flowCore_$P18Rmax#4192505.75#flowCore_$P18Rmin#-111.00008392334#flowCore_$P19Rmax#4192505.75#flowCore_$P19Rmin#-111.00008392334#flowCore_$P1Rmax#878.809143066406#flowCore_$P1Rmin#0#flowCore_$P20Rmax#4192505.75#flowCore_$P20Rmin#-111.00008392334#flowCore_$P21Rmax#4192505.75#flowCore_$P21Rmin#-111.00008392334#flowCore_$P22Rmax#4192505.75#flowCore_$P22Rmin#-111.00008392334#flowCore_$P23Rmax#4192505.75#flowCore_$P23Rmin#-111.00008392334#flowCore_$P24Rmax#4192505.75#flowCore_$P24Rmin#-111.00008392334#flowCore_$P25Rmax#4192505.75#flowCore_$P25Rmin#-111.00008392334#flowCore_$P26Rmax#4192505.75#flowCore_$P26Rmin#-111.00008392334#flowCore_$P27Rmax#4192505.75#flowCore_$P27Rmin#-111.00008392334#flowCore_$P28Rmax#4192505.75#flowCore_$P28Rmin#-111.00008392334#flowCore_$P29Rmax#4192505.75#flowCore_$P29Rmin#-111.00008392334#flowCore_$P2Rmax#4194303#flowCore_$P2Rmin#0#flowCore_$P30Rmax#4192505.75#flowCore_$P30Rmin#-111.00008392334#flowCore_$P31Rmax#4192505.75#flowCore_$P31Rmin#-111.00008392334#flowCore_$P32Rmax#4192505.75#flowCore_$P32Rmin#-111.00008392334#flowCore_$P33Rmax#4192505.75#flowCore_$P33Rmin#-111.00008392334#flowCore_$P34Rmax#4192505.75#flowCore_$P34Rmin#-111.00008392334#flowCore_$P35Rmax#4192505.75#flowCore_$P35Rmin#-111.00008392334#flowCore_$P36Rmax#4192505.75#flowCore_$P36Rmin#-111.00008392334#flowCore_$P37Rmax#4192505.75#flowCore_$P37Rmin#-111.00008392334#flowCore_$P38Rmax#4192505.75#flowCore_$P38Rmin#-111.00008392334#flowCore_$P39Rmax#4192505.75#flowCore_$P39Rmin#-111.00008392334#flowCore_$P3Rmax#4194303#flowCore_$P3Rmin#0#flowCore_$P40Rmax#4192505.75#flowCore_$P40Rmin#-111.00008392334#flowCore_$P41Rmax#4192505.75#flowCore_$P41Rmin#-111.00008392334#flowCore_$P42Rmax#4192505.75#flowCore_$P42Rmin#-111.00008392334#flowCore_$P43Rmax#4194303#flowCore_$P43Rmin#-111#flowCore_$P4Rmax#4194303#flowCore_$P4Rmin#0#flowCore_$P5Rmax#4194303#flowCore_$P5Rmin#0#flowCore_$P6Rmax#4194303#flowCore_$P6Rmin#0#flowCore_$P7Rmax#4194303#flowCore_$P7Rmin#0#flowCore_$P8Rmax#4194303#flowCore_$P8Rmin#0#flowCore_$P9Rmax#4194303#flowCore_$P9Rmin#0#FSC ASF#1.18#GROUPNAME#INF052#GUID#2025_07_26_AB_02_INF052_00_Ctrl.fcs#LASER1ASF#1.12#LASER1DELAY#-39.65#LASER1NAME#YellowGreen#LASER2ASF#1.09#LASER2DELAY#-19.825#LASER2NAME#Violet#LASER3ASF#1.15#LASER3DELAY#0#LASER3NAME#Blue#LASER4ASF#1.04#LASER4DELAY#20.3#LASER4NAME#Red#LASER5ASF#1.09#LASER5DELAY#39.8#LASER5NAME#UV#ORIGINALGUID#2025_07_26_AB_02_INF052_00_Ctrl#P10DISPLAY#LIN#P11DISPLAY#LOG#P12DISPLAY#LOG#P13DISPLAY#LOG#P14DISPLAY#LOG#P15DISPLAY#LOG#P16DISPLAY#LOG#P17DISPLAY#LOG#P18DISPLAY#LOG#P19DISPLAY#LOG#P1DISPLAY#LOG#P20DISPLAY#LOG#P21DISPLAY#LOG#P22DISPLAY#LOG#P23DISPLAY#LOG#P24DISPLAY#LOG#P25DISPLAY#LOG#P26DISPLAY#LOG#P27DISPLAY#LOG#P28DISPLAY#LOG#P29DISPLAY#LOG#P2DISPLAY#LIN#P30DISPLAY#LOG#P31DISPLAY#LOG#P32DISPLAY#LOG#P33DISPLAY#LOG#P34DISPLAY#LOG#P35DISPLAY#LOG#P36DISPLAY#LOG#P37DISPLAY#LOG#P38DISPLAY#LOG#P39DISPLAY#LOG#P3DISPLAY#LIN#P40DISPLAY#LOG#P41DISPLAY#LOG#P42DISPLAY#LOG#P43DISPLAY#LOG#P4DISPLAY#LIN#P5DISPLAY#LIN#P6DISPLAY#LIN#P7DISPLAY#LIN#P8DISPLAY#LIN#P9DISPLAY#LIN#THRESHOLD#(FSC,600000)#transformation#custom#TUBENAME#00_Ctrl#USERSETTINGNAME#DR_2025_AB_Nuclear#WINDOW EXTENSION#3#CI46H IWDI3zKII+I.HOH~FDXcCqCaEnG%D#ÖzC&F$ýdDGBDB&GF"D%xGɇC7yExBD#EtYCeCJÁG]CcHD-DgFTۉFRPEwD[I2>H II.e4I3II1H$@HwBH+G0}CpBEf`BDD̲G~gCzC%D.D(7FFĐAC^ßD#`CEFf@CtBBqZD.*D"EzClQEqD\IMBHHI.IIJ0Ip0I>.H6 HFEEK[{EAeG4DY{Da+~ G[qQDNĬDZG@zF`NQGݸC'EAzDD5͔ECNDiDڗġڪDgoBSFF*D]C(I1YH`I.TI0hTIIȆbI1AHIDd1FtӈCdsCEv7FGD0G@BQ, KCCG(`E\IC8}G0ЛDC
hD
IEmxCC_DBOCYFPEyE_D+I=|I#ISmI2IJ I7HnI/EKFFPCuC.GuIEXcDnhF3uCp