1. load libraries

#Differential Expression Analysis # 2. load seurat object

#Load Seurat Object L7
load("../../../../0-IMP-OBJECTS/Harmony_integrated_All_samples_Merged_with_PBMC10x_with_harmony_clustering.Robj")


All_samples_Merged
An object of class Seurat 
64169 features across 59355 samples within 6 assays 
Active assay: SCT (27417 features, 3000 variable features)
 3 layers present: counts, data, scale.data
 5 other assays present: RNA, ADT, prediction.score.celltype.l1, prediction.score.celltype.l2, prediction.score.celltype.l3
 6 dimensional reductions calculated: integrated_dr, ref.umap, pca, umap, harmony, umap.harmony
DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "cell_line",label = T, label.box = T)

DimPlot(All_samples_Merged, reduction = "umap.harmony", group.by = "Harmony_snn_res.0.9",label = T, label.box = T)

#Celltype tables based on clusters

3. celltype_l1


library(dplyr)
library(pheatmap)
library(tidyr)

# List of annotations
annotations <- c("l1", "l2", "l3")

# Loop through each annotation to generate tables and heatmaps
for (annotation in annotations) {
    
    # Create the column name dynamically for the current annotation
    cell_type_column <- paste0("predicted.celltype.", annotation)
    
    # Check if the column exists in the metadata of the Seurat object
    if (!(cell_type_column %in% colnames(All_samples_Merged@meta.data))) {
        cat("Skipping annotation", annotation, "- Column not found in metadata!\n")
        next
    }
    
    # Create a table of cell line vs. cell types for the current annotation
    cell_line_celltype_table <- table(All_samples_Merged$cell_line, All_samples_Merged@meta.data[[cell_type_column]])
    
    # Print the table to check its structure
    cat("Cell_line vs Cell Type table for", annotation, "\n")
    print(cluster_celltype_table)
    
    # Save the table as a CSV file
    write.csv(cell_line_celltype_table, paste0("cell_line_celltype_", annotation, "_table.csv"))
    
    # Convert the table to a numeric matrix
    cell_line_celltype_matrix <- as.matrix(cell_line_celltype_table)
    
    # Display the heatmap inline in the notebook
    pheatmap(cell_line_celltype_matrix,
             cluster_rows = TRUE,
             cluster_cols = TRUE,
             display_numbers = TRUE,
             color = colorRampPalette(c("white", "red"))(50),
             main = paste("Cell_line vs Cell Type (", annotation, ") Heatmap"))
    
    # Save the heatmap as PNG (Optional)
    png(paste0("cell_line_celltype_", annotation, "_heatmap.png"), width = 1800, height = 800)
    pheatmap(cluster_celltype_matrix,
             cell_line_rows = TRUE,
             cell_line_cols = TRUE,
             display_numbers = TRUE,
             color = colorRampPalette(c("white", "red"))(50),
             main = paste("Cell_line vs Cell Type (", annotation, ") Heatmap"))
    dev.off()
    
    # Save the heatmap as PDF (Optional)
    pdf(paste0("cell_line_celltype_", annotation, "_heatmap.pdf"), width = 20, height = 10)
    pheatmap(cell_line_celltype_matrix,
             cell_line_rows = TRUE,
             cell_line_cols = TRUE,
             display_numbers = TRUE,
             color = colorRampPalette(c("white", "red"))(50),
             main = paste("Cell_line vs Cell Type (", annotation, ") Heatmap"))
    dev.off()
}
Cell_line vs Cell Type table for l1 
          
           ASDC_pDC B intermediate kappa B intermediate lambda B memory kappa B memory lambda B naive kappa B naive lambda
  L1              0                    0                     0              0               0             0              0
  L2              0                    0                     0              0               0             0              0
  L3              0                    0                     2              7               3             0              0
  L4              0                    1                    48              1              41             0             37
  L5              0                    0                     4              7               7             0              0
  L6              0                    0                     2             22              29             0              0
  L7              0                    0                     3             55              26             0              0
  PBMC            0                   75                   371             38             131           267            192
  PBMC_10x        4                   51                   129             42              30           645             48
          
           CD14 Mono CD16 Mono CD4 CTL CD4 Naive CD4 Proliferating CD4 TCM_1 CD4 TCM_2 CD4 TCM_3 CD4 TEM_1 CD4 TEM_2 CD4 TEM_3
  L1               0         0       0         0              2462      1932       652       436         1         0         0
  L2               0         0       0         0              2852         6       250        12         0         0         0
  L3               1         0       0         0              5452         6       870         4         0         0         0
  L4              15         0       0         9              5391        35       516         6         0         0         0
  L5               9         0       0         0              4732         0       165        13         0         0         0
  L6               0         0       0         0              4003         7       536         7         0         0         0
  L7              22         0       0         0              4115         3       482        26         0         0         0
  PBMC           755         2      27       528                 0      4057       265       267         4        17        50
  PBMC_10x      3043       124       1      1525                 6      1449       144       359         8        17         1
          
           CD8 Naive CD8 Naive_2 CD8 Proliferating CD8 TCM_1 CD8 TCM_2 CD8 TCM_3 CD8 TEM_1 CD8 TEM_2 CD8 TEM_3 CD8 TEM_4
  L1               0           0                 0         0       298         0         0         0         0         0
  L2               0           0                 0         8         6         1         0         0         0         0
  L3               0           0                 0         0         0         0         0         0         0         0
  L4               0           0                 0         0         0         0         0         0         0         0
  L5               0           1                 0         0         0         0         0         0         0         0
  L6               0           1                 1         0         0         0         0         1         0         0
  L7               0           0                 1         0         0         0         0         0         0         0
  PBMC           291          63                 0       137        80        77        91        32        17         2
  PBMC_10x       969          47                 0       115        43        17        67        62        15        12
          
           CD8 TEM_5 CD8 TEM_6 cDC1 cDC2_1 cDC2_2 dnT_2 gdT_1 gdT_3 HSPC  ILC MAIT NK Proliferating NK_1 NK_2 NK_3 NK_4
  L1               0         1    0      0      0     2     0     0    0    0    0               38    0    0    0    0
  L2               0        10    0      0      0     3     0     0    0    0    0             2785    0    0    0    0
  L3               0         0    0      0      1     0     0     0   62    1    0                6    0    0    0    0
  L4               0         0    1      1      3     2     0     0    7    3    0               24    0    0    0    0
  L5               0         1   17      1     12     2     0     0 1036    0    0               11    0    0    0    0
  L6               0         1   36      0      4     6     0     0  214    0    0              259    0    0    0    0
  L7               0         1   16      4     33     2     0     0  493    0    0               38    0    0    0    0
  PBMC            27         1   28      2     46    42    33     1   17    4   16                1   42   18   22    3
  PBMC_10x         1        36   13     40     83    31    52    15   12    3  229                5    7  386   20   30
          
           NK_CD56bright  pDC Plasma Platelet Treg Memory Treg Naive
  L1                   0    0      0        0           3          0
  L2                   0    0      0        0           2          0
  L3                   0    0      0        0          13          0
  L4                   0    0      0        0           9          0
  L5                   0    0      0        0           4          0
  L6                   0    0      0        0          19          0
  L7                   0    0      0        0          11          0
  PBMC                 1    0      9        1         200          4
  PBMC_10x            16   56     10       31          89         24
Cell_line vs Cell Type table for l2 
          
           ASDC_pDC B intermediate kappa B intermediate lambda B memory kappa B memory lambda B naive kappa B naive lambda
  L1              0                    0                     0              0               0             0              0
  L2              0                    0                     0              0               0             0              0
  L3              0                    0                     2              7               3             0              0
  L4              0                    1                    48              1              41             0             37
  L5              0                    0                     4              7               7             0              0
  L6              0                    0                     2             22              29             0              0
  L7              0                    0                     3             55              26             0              0
  PBMC            0                   75                   371             38             131           267            192
  PBMC_10x        4                   51                   129             42              30           645             48
          
           CD14 Mono CD16 Mono CD4 CTL CD4 Naive CD4 Proliferating CD4 TCM_1 CD4 TCM_2 CD4 TCM_3 CD4 TEM_1 CD4 TEM_2 CD4 TEM_3
  L1               0         0       0         0              2462      1932       652       436         1         0         0
  L2               0         0       0         0              2852         6       250        12         0         0         0
  L3               1         0       0         0              5452         6       870         4         0         0         0
  L4              15         0       0         9              5391        35       516         6         0         0         0
  L5               9         0       0         0              4732         0       165        13         0         0         0
  L6               0         0       0         0              4003         7       536         7         0         0         0
  L7              22         0       0         0              4115         3       482        26         0         0         0
  PBMC           755         2      27       528                 0      4057       265       267         4        17        50
  PBMC_10x      3043       124       1      1525                 6      1449       144       359         8        17         1
          
           CD8 Naive CD8 Naive_2 CD8 Proliferating CD8 TCM_1 CD8 TCM_2 CD8 TCM_3 CD8 TEM_1 CD8 TEM_2 CD8 TEM_3 CD8 TEM_4
  L1               0           0                 0         0       298         0         0         0         0         0
  L2               0           0                 0         8         6         1         0         0         0         0
  L3               0           0                 0         0         0         0         0         0         0         0
  L4               0           0                 0         0         0         0         0         0         0         0
  L5               0           1                 0         0         0         0         0         0         0         0
  L6               0           1                 1         0         0         0         0         1         0         0
  L7               0           0                 1         0         0         0         0         0         0         0
  PBMC           291          63                 0       137        80        77        91        32        17         2
  PBMC_10x       969          47                 0       115        43        17        67        62        15        12
          
           CD8 TEM_5 CD8 TEM_6 cDC1 cDC2_1 cDC2_2 dnT_2 gdT_1 gdT_3 HSPC  ILC MAIT NK Proliferating NK_1 NK_2 NK_3 NK_4
  L1               0         1    0      0      0     2     0     0    0    0    0               38    0    0    0    0
  L2               0        10    0      0      0     3     0     0    0    0    0             2785    0    0    0    0
  L3               0         0    0      0      1     0     0     0   62    1    0                6    0    0    0    0
  L4               0         0    1      1      3     2     0     0    7    3    0               24    0    0    0    0
  L5               0         1   17      1     12     2     0     0 1036    0    0               11    0    0    0    0
  L6               0         1   36      0      4     6     0     0  214    0    0              259    0    0    0    0
  L7               0         1   16      4     33     2     0     0  493    0    0               38    0    0    0    0
  PBMC            27         1   28      2     46    42    33     1   17    4   16                1   42   18   22    3
  PBMC_10x         1        36   13     40     83    31    52    15   12    3  229                5    7  386   20   30
          
           NK_CD56bright  pDC Plasma Platelet Treg Memory Treg Naive
  L1                   0    0      0        0           3          0
  L2                   0    0      0        0           2          0
  L3                   0    0      0        0          13          0
  L4                   0    0      0        0           9          0
  L5                   0    0      0        0           4          0
  L6                   0    0      0        0          19          0
  L7                   0    0      0        0          11          0
  PBMC                 1    0      9        1         200          4
  PBMC_10x            16   56     10       31          89         24
Cell_line vs Cell Type table for l3 
          
           ASDC_pDC B intermediate kappa B intermediate lambda B memory kappa B memory lambda B naive kappa B naive lambda
  L1              0                    0                     0              0               0             0              0
  L2              0                    0                     0              0               0             0              0
  L3              0                    0                     2              7               3             0              0
  L4              0                    1                    48              1              41             0             37
  L5              0                    0                     4              7               7             0              0
  L6              0                    0                     2             22              29             0              0
  L7              0                    0                     3             55              26             0              0
  PBMC            0                   75                   371             38             131           267            192
  PBMC_10x        4                   51                   129             42              30           645             48
          
           CD14 Mono CD16 Mono CD4 CTL CD4 Naive CD4 Proliferating CD4 TCM_1 CD4 TCM_2 CD4 TCM_3 CD4 TEM_1 CD4 TEM_2 CD4 TEM_3
  L1               0         0       0         0              2462      1932       652       436         1         0         0
  L2               0         0       0         0              2852         6       250        12         0         0         0
  L3               1         0       0         0              5452         6       870         4         0         0         0
  L4              15         0       0         9              5391        35       516         6         0         0         0
  L5               9         0       0         0              4732         0       165        13         0         0         0
  L6               0         0       0         0              4003         7       536         7         0         0         0
  L7              22         0       0         0              4115         3       482        26         0         0         0
  PBMC           755         2      27       528                 0      4057       265       267         4        17        50
  PBMC_10x      3043       124       1      1525                 6      1449       144       359         8        17         1
          
           CD8 Naive CD8 Naive_2 CD8 Proliferating CD8 TCM_1 CD8 TCM_2 CD8 TCM_3 CD8 TEM_1 CD8 TEM_2 CD8 TEM_3 CD8 TEM_4
  L1               0           0                 0         0       298         0         0         0         0         0
  L2               0           0                 0         8         6         1         0         0         0         0
  L3               0           0                 0         0         0         0         0         0         0         0
  L4               0           0                 0         0         0         0         0         0         0         0
  L5               0           1                 0         0         0         0         0         0         0         0
  L6               0           1                 1         0         0         0         0         1         0         0
  L7               0           0                 1         0         0         0         0         0         0         0
  PBMC           291          63                 0       137        80        77        91        32        17         2
  PBMC_10x       969          47                 0       115        43        17        67        62        15        12
          
           CD8 TEM_5 CD8 TEM_6 cDC1 cDC2_1 cDC2_2 dnT_2 gdT_1 gdT_3 HSPC  ILC MAIT NK Proliferating NK_1 NK_2 NK_3 NK_4
  L1               0         1    0      0      0     2     0     0    0    0    0               38    0    0    0    0
  L2               0        10    0      0      0     3     0     0    0    0    0             2785    0    0    0    0
  L3               0         0    0      0      1     0     0     0   62    1    0                6    0    0    0    0
  L4               0         0    1      1      3     2     0     0    7    3    0               24    0    0    0    0
  L5               0         1   17      1     12     2     0     0 1036    0    0               11    0    0    0    0
  L6               0         1   36      0      4     6     0     0  214    0    0              259    0    0    0    0
  L7               0         1   16      4     33     2     0     0  493    0    0               38    0    0    0    0
  PBMC            27         1   28      2     46    42    33     1   17    4   16                1   42   18   22    3
  PBMC_10x         1        36   13     40     83    31    52    15   12    3  229                5    7  386   20   30
          
           NK_CD56bright  pDC Plasma Platelet Treg Memory Treg Naive
  L1                   0    0      0        0           3          0
  L2                   0    0      0        0           2          0
  L3                   0    0      0        0          13          0
  L4                   0    0      0        0           9          0
  L5                   0    0      0        0           4          0
  L6                   0    0      0        0          19          0
  L7                   0    0      0        0          11          0
  PBMC                 1    0      9        1         200          4
  PBMC_10x            16   56     10       31          89         24

LS0tCnRpdGxlOiAiVGFibGVzIG9mIGNlbGx0eXBlcyBiYXNlZCBvbiBjZWxsX2xpbmVzIgphdXRob3I6IE5hc2lyIE1haG1vb2QgQWJiYXNpCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogICMgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgIyB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CiAgIyBodG1sX2RvY3VtZW50OiBkZWZhdWx0CiAgI3JtZGZvcm1hdHM6OnJlYWR0aGVkb3duCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfY29sbGFwc2VkOiB0cnVlCi0tLQoKIyAxLiBsb2FkIGxpYnJhcmllcwpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkocGhlYXRtYXApCmxpYnJhcnkoY2x1c3RlclByb2ZpbGVyKQpsaWJyYXJ5KG9yZy5Icy5lZy5kYikKbGlicmFyeShlbnJpY2hwbG90KQpsaWJyYXJ5KGVucmljaHBsb3QpCmxpYnJhcnkoRW5oYW5jZWRWb2xjYW5vKQoKYGBgCgojRGlmZmVyZW50aWFsIEV4cHJlc3Npb24gQW5hbHlzaXMKIyAyLiBsb2FkIHNldXJhdCBvYmplY3QKYGBge3IgbG9hZF9zZXVyYXR9CiNMb2FkIFNldXJhdCBPYmplY3QgTDcKbG9hZCgiLi4vLi4vLi4vLi4vMC1JTVAtT0JKRUNUUy9IYXJtb255X2ludGVncmF0ZWRfQWxsX3NhbXBsZXNfTWVyZ2VkX3dpdGhfUEJNQzEweF93aXRoX2hhcm1vbnlfY2x1c3RlcmluZy5Sb2JqIikKCgpBbGxfc2FtcGxlc19NZXJnZWQKCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiY2VsbF9saW5lIixsYWJlbCA9IFQsIGxhYmVsLmJveCA9IFQpCkRpbVBsb3QoQWxsX3NhbXBsZXNfTWVyZ2VkLCByZWR1Y3Rpb24gPSAidW1hcC5oYXJtb255IiwgZ3JvdXAuYnkgPSAiSGFybW9ueV9zbm5fcmVzLjAuOSIsbGFiZWwgPSBULCBsYWJlbC5ib3ggPSBUKQoKYGBgCgojQ2VsbHR5cGUgdGFibGVzIGJhc2VkIG9uIGNsdXN0ZXJzCgojIDMuIGNlbGx0eXBlX2wxCmBgYHtyIFQxLCBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xMn0KCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkocGhlYXRtYXApCmxpYnJhcnkodGlkeXIpCgojIExpc3Qgb2YgYW5ub3RhdGlvbnMKYW5ub3RhdGlvbnMgPC0gYygibDEiLCAibDIiLCAibDMiKQoKIyBMb29wIHRocm91Z2ggZWFjaCBhbm5vdGF0aW9uIHRvIGdlbmVyYXRlIHRhYmxlcyBhbmQgaGVhdG1hcHMKZm9yIChhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAKICAgICMgQ3JlYXRlIHRoZSBjb2x1bW4gbmFtZSBkeW5hbWljYWxseSBmb3IgdGhlIGN1cnJlbnQgYW5ub3RhdGlvbgogICAgY2VsbF90eXBlX2NvbHVtbiA8LSBwYXN0ZTAoInByZWRpY3RlZC5jZWxsdHlwZS4iLCBhbm5vdGF0aW9uKQogICAgCiAgICAjIENoZWNrIGlmIHRoZSBjb2x1bW4gZXhpc3RzIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgU2V1cmF0IG9iamVjdAogICAgaWYgKCEoY2VsbF90eXBlX2NvbHVtbiAlaW4lIGNvbG5hbWVzKEFsbF9zYW1wbGVzX01lcmdlZEBtZXRhLmRhdGEpKSkgewogICAgICAgIGNhdCgiU2tpcHBpbmcgYW5ub3RhdGlvbiIsIGFubm90YXRpb24sICItIENvbHVtbiBub3QgZm91bmQgaW4gbWV0YWRhdGEhXG4iKQogICAgICAgIG5leHQKICAgIH0KICAgIAogICAgIyBDcmVhdGUgYSB0YWJsZSBvZiBjZWxsIGxpbmUgdnMuIGNlbGwgdHlwZXMgZm9yIHRoZSBjdXJyZW50IGFubm90YXRpb24KICAgIGNlbGxfbGluZV9jZWxsdHlwZV90YWJsZSA8LSB0YWJsZShBbGxfc2FtcGxlc19NZXJnZWQkY2VsbF9saW5lLCBBbGxfc2FtcGxlc19NZXJnZWRAbWV0YS5kYXRhW1tjZWxsX3R5cGVfY29sdW1uXV0pCiAgICAKICAgICMgUHJpbnQgdGhlIHRhYmxlIHRvIGNoZWNrIGl0cyBzdHJ1Y3R1cmUKICAgIGNhdCgiQ2VsbF9saW5lIHZzIENlbGwgVHlwZSB0YWJsZSBmb3IiLCBhbm5vdGF0aW9uLCAiXG4iKQogICAgcHJpbnQoY2x1c3Rlcl9jZWxsdHlwZV90YWJsZSkKICAgIAogICAgIyBTYXZlIHRoZSB0YWJsZSBhcyBhIENTViBmaWxlCiAgICB3cml0ZS5jc3YoY2VsbF9saW5lX2NlbGx0eXBlX3RhYmxlLCBwYXN0ZTAoImNlbGxfbGluZV9jZWxsdHlwZV8iLCBhbm5vdGF0aW9uLCAiX3RhYmxlLmNzdiIpKQogICAgCiAgICAjIENvbnZlcnQgdGhlIHRhYmxlIHRvIGEgbnVtZXJpYyBtYXRyaXgKICAgIGNlbGxfbGluZV9jZWxsdHlwZV9tYXRyaXggPC0gYXMubWF0cml4KGNlbGxfbGluZV9jZWxsdHlwZV90YWJsZSkKICAgIAogICAgIyBEaXNwbGF5IHRoZSBoZWF0bWFwIGlubGluZSBpbiB0aGUgbm90ZWJvb2sKICAgIHBoZWF0bWFwKGNlbGxfbGluZV9jZWxsdHlwZV9tYXRyaXgsCiAgICAgICAgICAgICBjbHVzdGVyX3Jvd3MgPSBUUlVFLAogICAgICAgICAgICAgY2x1c3Rlcl9jb2xzID0gVFJVRSwKICAgICAgICAgICAgIGRpc3BsYXlfbnVtYmVycyA9IFRSVUUsCiAgICAgICAgICAgICBjb2xvciA9IGNvbG9yUmFtcFBhbGV0dGUoYygid2hpdGUiLCAicmVkIikpKDUwKSwKICAgICAgICAgICAgIG1haW4gPSBwYXN0ZSgiQ2VsbF9saW5lIHZzIENlbGwgVHlwZSAoIiwgYW5ub3RhdGlvbiwgIikgSGVhdG1hcCIpKQogICAgCiAgICAjIFNhdmUgdGhlIGhlYXRtYXAgYXMgUE5HIChPcHRpb25hbCkKICAgIHBuZyhwYXN0ZTAoImNlbGxfbGluZV9jZWxsdHlwZV8iLCBhbm5vdGF0aW9uLCAiX2hlYXRtYXAucG5nIiksIHdpZHRoID0gMTgwMCwgaGVpZ2h0ID0gODAwKQogICAgcGhlYXRtYXAoY2x1c3Rlcl9jZWxsdHlwZV9tYXRyaXgsCiAgICAgICAgICAgICBjZWxsX2xpbmVfcm93cyA9IFRSVUUsCiAgICAgICAgICAgICBjZWxsX2xpbmVfY29scyA9IFRSVUUsCiAgICAgICAgICAgICBkaXNwbGF5X251bWJlcnMgPSBUUlVFLAogICAgICAgICAgICAgY29sb3IgPSBjb2xvclJhbXBQYWxldHRlKGMoIndoaXRlIiwgInJlZCIpKSg1MCksCiAgICAgICAgICAgICBtYWluID0gcGFzdGUoIkNlbGxfbGluZSB2cyBDZWxsIFR5cGUgKCIsIGFubm90YXRpb24sICIpIEhlYXRtYXAiKSkKICAgIGRldi5vZmYoKQogICAgCiAgICAjIFNhdmUgdGhlIGhlYXRtYXAgYXMgUERGIChPcHRpb25hbCkKICAgIHBkZihwYXN0ZTAoImNlbGxfbGluZV9jZWxsdHlwZV8iLCBhbm5vdGF0aW9uLCAiX2hlYXRtYXAucGRmIiksIHdpZHRoID0gMjAsIGhlaWdodCA9IDEwKQogICAgcGhlYXRtYXAoY2VsbF9saW5lX2NlbGx0eXBlX21hdHJpeCwKICAgICAgICAgICAgIGNlbGxfbGluZV9yb3dzID0gVFJVRSwKICAgICAgICAgICAgIGNlbGxfbGluZV9jb2xzID0gVFJVRSwKICAgICAgICAgICAgIGRpc3BsYXlfbnVtYmVycyA9IFRSVUUsCiAgICAgICAgICAgICBjb2xvciA9IGNvbG9yUmFtcFBhbGV0dGUoYygid2hpdGUiLCAicmVkIikpKDUwKSwKICAgICAgICAgICAgIG1haW4gPSBwYXN0ZSgiQ2VsbF9saW5lIHZzIENlbGwgVHlwZSAoIiwgYW5ub3RhdGlvbiwgIikgSGVhdG1hcCIpKQogICAgZGV2Lm9mZigpCn0KCgpgYGAKCgo=