My scripts:

  • rendered html versions: Rpubs/thomas-weissensteiner
  • .rmd files with executable code chunks: www.github.com/thomas-weissensteiner/portfolio/tree/main/

About myself: www.linkedin.com/in/ThomasWs-Mopfair




1. Background


1.1. Motivation


Adoptive transfer of T-cells which recognise and kill cells expressing tumor antigens is an emerging anti-cancer therapy. The cancer-killing potency of naturally occurring T-cells is generally low. Therefore, a promising strategy has been to equip them with a T-cell receptor (TCR) that has been genetically engineered to bind cancer-expressed antigens with high affinity. However, this manipulation also risks generating reactivity to antigens expressed by normal tissue, causing serious adverse events. Importantly, in-vitro assays and testing in animal models did not always detect such cross-reactivity due to cell culture and species-specific differences in the antigenic repertoire 1.

To mitigate the risk of off-target toxicities in future clinical trials, Adaptimmune developed an extensive in-vitro testing pipeline. A pivotal element was predicting the repertoire of peptides in the human proteome that cytotoxic T-cells with a candidate TCR might respond to 2.
Peptides of 9 amino-acids length are by far the largest category, whereas shorter or longer ones are much less likely to be recognised. However, even for a 9-mer peptide alone, the experimental testing of all possible combinations of natural amino-acids at all positions would be impractical (920 variants). Therefore, the repertoire of potentially recognised peptides was inferred by a combined in-vitro / in-silico approach:

  1. In-vitro assays were performed with peptides carrying sequential substitutions at each individual position (9 x 20 variants)

  2. Single amino-acid substitutions for which T-cell responses exceeded a certain threshold (expressed as percentage of response to the target, or index peptide) were defined as “tolerated”

  3. A table of tolerated amino-acid substitutions at each position of the 9-mer peptide was constructed (X-scan motif), and the human proteome searched for matches with all of its permutations. The results were treated as potential targets for T-cell reactivity against normal tissue, requiring further investigation

This strategy was implemented for prioritizing a candidate TCR for further extensive pre-clinical and clinical testing 3-5. Notably, the X-scan method allowed to discriminate between two TCRs which appeared to be equally optimal in conventional biochemical and cellular assays 2.

Subsequently, at least 6 other studies have used the same method but no code was made available in any of the publications 2,3,6-10. I set myself a challenge to reproduce the X-scan results in Figures 5 and 6 of our paper 2. The task included evaluating matches in the human proteome for > 10 million peptide sequences, under 126 different conditions.


1.2. Workflow overview


The following steps were chosen:

  1. Manual scanning of the published barchart to generate a table of in-vitro T-cell responses against the index peptide and its single amino-acid substitution variants

  2. Calculating the ratios of responses to variants vs. responses to the index peptide, and their confidence intervals

  3. Generating a list of permutation matrices for amino-acid substitutions tolerated by the two candidate TCRs at different cut-offs of the variant/index response ratio

    1. Generating a table for the canonical X-scan motif, displaying its amino-acids and their properties (corresponding to Fig. 5B and C in ref. 2)

    2. Plotting X-scan motif sizes against cut-offs for comparing the specificity of the two TCRs across variant/index response ratios

    3. Computing a non-redundant set of amino-acid sequences that represents all 9-mer peptides that are potentially recognised by one or both of the two TCRs at any threshold

  4. Searching the human proteome for matches with the peptide sequences generated in 4c

  5. Combining the search results with permutation matrices generated in step 3 to filter out proteome matches for each TCR at different response cut-off levels (plot corresponding to Fig. 6A in ref. 2)

  6. Combining results of steps 6 and 4b (alternative visualisation to Fig. 6B in ref. 2)


2. Code and results


2.1. Required R packages and data


TCRs c765 and c796 were genetically engineered to recognise the peptide GLYDGMEHL (“index peptide”) when presented by the human lymphocyte antigen (HLA) allele A*02:01. A total of 180 peptides, representing the index and all of its natural amino-acid single substitution variants, were tested experimentally for their ability to stimulate TCR c765 or TCR c796 transduced T-cells (interferon-gamma spot count).

Because the original raw data were unavailable for this analysis, I scanned the barchart figure S2 in ref. 2 using PlotDigitizer 11.

# -- Chunk 1                                     -- #

## Load required R libraries and data

# Libraries, package versions, and functions used when writing the script

library(dplyr)        # version 1.1.4  # general grammar
library(purrr)        # version 1.0.2  # set_names, reduce, list_rbind
library(tidyr)        # version 1.3.1  # pivot_longer, pivot_wider
library(tibble)       # version 3.2.1  # tibble, as_tibble, column_to_rownames
library(biomartr)     # version 1.0.7  # getProteome, read_proteome
library(Biostrings)   # version 2.68.0 # vmatchPattern
library(parallel)     # part of R4.3.3 # parallel processing
library(progress)     # version 1.2.3  # monitoring progress of proteome searches
library(ggplot2)      # version 3.5.1  # plots


# Human proteome data (NCBI RefSeq, release date 2022-02-03, accessed on 10/09/24)

HS.proteome.refseq <- 
  getProteome( 
    db = "refseq", organism = "Homo sapiens",
    gunzip = FALSE,
    path = file.path("_ncbi_downloads","proteomes")
    )

human_proteome <- 
  read_proteome( file = HS.proteome.refseq)


# T-cell response data (tab-delimited .csv document)

Xscan <- 
  read.delim ("https://raw.githubusercontent.com/thomas-weissensteiner/portfolio/main/Xscan_MAGEA10/Xscan_c796c756.csv")

Xscan


Experimental T-cell response data.
In the column names, “position” means amino-acid position in the 9-mer peptide, “aa”: amino-acid (one letter code), “count”: interferon gamma spot count (~ number of responding T-cells), “SE”: standard error of the mean, “index”: an amino-acid of the index peptide if the value is “1”.



2.2. Generation of permutation matrices that define potentially recognised peptides for different cut-offs of the T-cell response


The original study used the ranges of count ratios obtained from triplicate experiments for computing the X-scan motifs. However, only the means and their standard errors (SE) were reported. When setting out to replicate the figures with the published data, I therefore decided to use 95% confidence intervals (CIs) instead.
Although CIs are wider than SEs, they ought to be well suited here for two reasons. Firstly, we should be concerned about the ranges of responses rather than the precision of their means (SE). Secondly, CIs allow for easy error propagation when transforming counts to count ratios, and eventually to probabilities for peptide matches in the human genome.

# -- Chunk 2                                     -- #
# -- Requires object generated by chunk 1: Xscan -- #


## Data cleaning and transformation

# Replace all NAs with 0s

Xscan <- 
  Xscan %>% 
  replace(is.na(.), 0)

# Convert T-cell response counts + SE to counts +/- 95% CI

Xscan <- 
  Xscan %>%
  mutate(
    c796count_CI = (c796count_SE - c796count) * 1.96, 
    c756count_CI = (c756count_SE - c756count) * 1.96
    ) %>% 
  mutate(
    c796count_CIlow  = c796count - c796count_CI, 
    c796count_CIhigh = c796count + c796count_CI,
    c756count_CIlow  = c756count - c756count_CI, 
    c756count_CIhigh = c756count + c756count_CI
    ) %>% 
  select(
    aa_position, aa, 
    c796count, c796count_CIlow, c796count_CIhigh,
    c756count, c756count_CIlow, c756count_CIhigh,
    Index
    )

# Filter counts for responses to the index peptide

indexCounts <- Xscan %>% 
  filter (Index == 1) %>% 
  .[1, 
    c("c796count", "c796count_CIlow", "c796count_CIhigh", 
      "c756count", "c756count_CIlow", "c756count_CIhigh") ] 

# Generate a dataframe of T-cell response values divided by the response to the index peptide

Xscan_norm <- Xscan %>% 
  mutate(
    c796        = c796count/indexCounts$c796count,
    c796_CIlow  =  c796count_CIlow/ indexCounts$c796count_CIhigh,
    c796_CIhigh =  c796count_CIhigh/ indexCounts$c796count_CIlow,  
    c756        = c756count/indexCounts$c796count,
    c756_CIlow  =  c756count_CIlow/ indexCounts$c796count_CIhigh,
    c756_CIhigh =  c756count_CIhigh/ indexCounts$c796count_CIlow 
    ) %>% 
  select(
    aa_position, aa,
    c796, c796_CIlow, c796_CIhigh,  
    c756, c756_CIlow, c756_CIhigh
    ) 


## Generate logical tables of amino-acid substitutions that are tolerated at various fractions of the response to the index peptide

cut_off <- seq(0.02, 0.4, 0.02) 

Xmotifs_list <- 
  lapply (cut_off, 
    function (x) {

# Categorise response ratios according to being equal or greater than each cut-off value
    Xscan_norm %>% 
      mutate(
        across (!c(aa, aa_position), ~. >= x )) %>%
        
# Convert logical values to binary numbers:
      mutate(
        across (!c(aa, aa_position), ~+.))         
    } 
  ) %>% 
  set_names( cut_off)



2.2. Canonical X-scan motifs of TCRs c796 and c756: amino-acids and their properties


The canonical X-scan motif comprises all permutations of single amino-acid substitutions that are tolerated at 10% of the response generated by the index peptide. The product of the numbers of tolerated residues at each position is the size of the X-scan motif, equivalent to the number of peptide sequences that are potentially recognised by a TCR.
This estimate discounts compensatory, additive or synergistic effects that might arise from interactions between several amino-acid substitutions. Predicting such effects is an ongoing topic of research. However, it can be argued that a TCR with a small motif size is likely to have greater specificity than a TCR with a large one.

The following code chunk generates a table of amino acids and their properties for comparing the canonical X-scan motifs of the two TCRs.


# -- Requires object generated by chunk 2: Xmotifs_list -- #

## Plot details for amino-acids  (X-scan motif, ref.2)

# Generate a table of amino acid variants tolerated with a 10% cut-off for variant/index response
Fig5_aas <-  
  Xmotifs_list$"0.1" %>% 
    select(
      aa_position, aa, c796, c756) %>% 
    pivot_longer(
      cols = c(c796, c756), 
      names_to = "TCR"
      ) %>%
    pivot_wider(
      names_from = c(aa_position), 
      values_from = value
      ) %>% 
    mutate(
      across (c(p1, p2, p3, p4, p5, p6, p7, p8, p9), 
      ~ ifelse( . == 1, aa, "") ) 
      ) %>% 
       
  # Add a column for amino-acid properties 
    mutate(
      aa_property = aa, .before = aa
      ) %>% 
    mutate(
      aa_property = case_when (
        aa_property %in% c("D", "E")                ~ "Negative charge",
        aa_property %in% c("H", "K", "R")           ~ "Positive charge",
        aa_property %in% c("N", "Q", "S", "T", "C") ~ "Polar",
        aa_property %in% c("A", "G", "P")           ~ "Small, non-polar",
        aa_property %in% c("Y", "W", "F")           ~ "Aromatic, uncharged",
        aa_property %in% c("M", "L", "V", "I")      ~ "Alipathic"
      ) %>% 
      factor(
        levels = c("Negative charge", "Positive charge", "Polar", 
                "Small, non-polar", "Aromatic, uncharged", "Alipathic") 
      )
    ) %>% 
  select (!aa) %>% 
  group_by( aa_property, TCR) %>%
    summarise( 
      across(c(p1, p2, p3, p4, p5, p6, p7, p8, p9), 
      function (x) paste( unique(x[x != ""]), collapse = ", ") ), 
      .groups = 'drop'
      )

# For each position, calculate the total of all tolerated amino-acids
Fig5_sums <- 
  Xmotifs_list$"0.1" %>%         
  select( c(aa_position, aa, c756, c796)) %>% 
  group_by( aa_position) %>% 
  summarise( c756 = sum(c756),
             c796 = sum(c796)
             ) %>% 
  pivot_longer( 
    cols = c(c756, c796), 
    names_to = "TCR"
    ) %>% 
  arrange("TCR") %>% 
  pivot_wider( 
    names_from = c(aa_position), 
    values_from = value
    ) %>% 
  {cbind (aa_property = c("Total", "Total"), .)}

# Show results (optional: add formatting for html display)
rbind( Fig5_aas, Fig5_sums) %>% 
  data.frame() %>% 
  kable("html") %>% 
  kable_styling( 
    bootstrap_options = c("striped", "condensed", "responsive") 
    ) %>%     
  row_spec( c(13,14), bold = T)
aa_property TCR p1 p2 p3 p4 p5 p6 p7 p8 p9
Negative charge c756 D, E D E
Negative charge c796 D, E D E
Positive charge c756 H, K, R H H, R
Positive charge c796 H, K, R H, R
Polar c756 C, N, Q, S, T C, N, Q, S, T C, N S, T Q C, N, Q, S, T C, T
Polar c796 C, N, Q, S, T C, N, Q, S, T C S, T Q C, Q C, Q, T
Small, non-polar c756 A, G, P A, G A, G, P G, P A, G, P
Small, non-polar c796 A, G, P A, G A, G P A
Aromatic, uncharged c756 F, W, Y Y F, Y F
Aromatic, uncharged c796 F, W, Y F F, Y Y F
Alipathic c756 I, L, M, V I, L, M, V M I, L L, M I, L, M, V I, L, M, V
Alipathic c796 I, L, M, V I, L, M, V M L, M, V I, L, M, V
Total c756 20 11 1 4 8 4 2 16 7
Total c796 20 12 2 2 4 2 2 8 9


This table is in agreement with Figure 5 2 which I generated for the publication in Excel:


Amino-acid substitutions tolerated by TCRs c756 and c796 (canonical X-scan motif).
aa_property: amino-acid property; TCR: T-cell receptor; p1-9: amino-acid positions in the 9-mer peptide.
Published figure: (A) Pie areas are proportional to the number of tolerated amino-acids, including the index. Pie segments represent a breakdown of tolerated amino-acids into groups with similar physico-chemical properties 12. The area within the outer circle corresponds to all 20 amino-acids being tolerated at a 10% threshold; the circle color indicates the property of the index peptide. (B) Comparison of the X-scan search motifs for c756 and c796 at a response threshold of 10%. (C) Total number of tolerated residues at each peptide position, including the index. The number of residues that would be identified as potentially tolerated by an alanine scan is shown for comparison.



2.3. TCR c796 has smaller X-scan motif sizes than TCR c756 at all response cut-offs, suggesting higher specificity


The canonical X-scan motif considers amino-acid substitutions as “tolerated” when the mutant peptides elicit in-vitro responses of at least 10% of that of the index. However, the thresholds for clinically relevant T-cell reactivity against different tissues in-vivo are unknown. Therefore, I suggested to compare the specificity of the two TCRs candidates over a range of cut-off values.

# -- Chunk 4                                             -- #  
# -- Requires objects generated in chunk 2: Xmotifs_list -- #  


## Plot dependence of X-scan motif size on response cut-off

# Generate a dataframe of X-scan motif sizes for each TCR (column) and cut-off value (row)
Xmotif_sizes <- 
  Xmotifs_list %>% 
    lapply( 
      function(x) {
        x %>% 
        group_by(aa_position) %>% 
        summarise (
          across (where (is.numeric), ~ sum(.))
          ) %>%
        select (!aa_position)
        }
      )

Xmotif_sizes <- 
  Xmotif_sizes %>% 
    lapply (
      function (x) apply (x, 2, prod)) %>% 
    cbind.data.frame()

# Generate a log scale with unlabeled minor breaks
ymin_log10 <-  
  min(Xmotif_sizes) %>% 
  log10() %>% 
  as.integer() - 1
ymax_log10  <- 
  max(Xmotif_sizes) %>% 
  log10() %>% 
  as.integer() + 1

breaks <- 
  10^c(ymin_log10:ymax_log10)
minor_breaks <- 
  rep( 1:9, ymax_log10 - ymin_log10 + 1)*
    (10^rep (ymin_log10:ymax_log10, each = 9) 
    )

# Re-arrange table of motif sizes
Xmotif_sizes %>% 
  rownames_to_column ("TCR") %>% 
  separate(
    TCR, into = c("TCR", "CI"), sep = "_", fill = "right"
    ) %>%
  mutate(
    CI = ifelse(is.na(CI), "Mean", CI)
    ) %>% 
  pivot_longer(
    cols = -c(TCR, CI),
    names_to = "cut_off",
    values_to = "motif_size"
    ) %>% 
  pivot_wider(
    names_from = CI,
    values_from = motif_size
    ) %>%

# Plot X-scan motif sizes vs. cut-off values
  ggplot(
    aes(
      x = cut_off, y = Mean, 
      group = TCR, color = TCR, fill = TCR)
    ) +
    geom_line() +
    geom_ribbon(
      aes(
        ymin = CIlow, ymax = CIhigh), 
      linetype = 0, alpha = 0.3
    ) +
    scale_colour_manual(
      values = c(c756 = "#435daf", c796 = "#e53935")
      ) +
    scale_fill_manual(
      values = c(c756 = "#435daf", c796 = "#e53935")
      ) +
    scale_y_log10(
      breaks = breaks, minor_breaks = minor_breaks
      ) + 
     annotation_logticks(sides = "l") +
      scale_x_discrete(
        breaks = seq(0, 0.4, by = 0.1), 
        labels = seq(0, 0.4, by = 0.1)
        ) +
    geom_vline(
      aes( xintercept = as.numeric (
        factor (0.1, levels = levels (as.factor(cut_off)))
        ),
      linetype = "Cut-off of the \ncanonical \nX-scan motif"), 
      col = "#00838f", lwd = 1.3, alpha = 0.3
      ) +
    labs(linetype = NULL) +
    xlab("Response cut-off") + 
    ylab("X-scan motif size (number of peptides)") +
    theme_minimal () + 
    theme(
      axis.line = element_line(color = "darkgrey"),
      axis.ticks = element_line(color = "black"),
      axis.ticks.length = unit(0.2, "cm")
    )

Numbers of peptides which are potentially recognised by the two candidate TCRs, at different cut-offs for the T-cell response.
Coloured lines represent the X-scan motif sizes based on the mean response to peptides with single amino-acid substitutions. Shaded areas indicate the 95% CIs. Blue: TCR c756, red: TCR c796. The cyan vertical line marks the cut-off used to define the canonical X-scan motifs.


The plot confirms that TCR c796 had higher specificity than TCR c756 at all cut-off values. Differences in the size of the X-scan motifs became significant when amino-acid substitutions generating responses ≤ 12% of responses to the index were included. At the 10% cut-off for the canonical X-scan motif TCR c756 is predicted to recognise ~ 10x the number of peptides recognised by TCR c796.

2.4. Searching for peptides in the human genome that match the X-scan motif and are potential causes for T-cell responses against healthy tissue


It was highly likely that a vast majority of peptides from the X-scan motifs would not be expressed by human tissues. For a clinically more meaningful comparison of TCR specificity, we therefore looked for matching sequences in the human proteome.
In order to reproduce figure 6 of the published paper 2, 126 different sets of proteome matches had to be generated (2 TCRs, 3 summary statistics, 21 cut-offs). To avoid time-consuming redundant searches, I decided to first generate a set of unique peptides from the combined permutations of the two largest X-scan motifs. This set included all other sets that had to be analysed. I then computed results for the smaller sets by multiplying their permutation matrices with a similarly formatted matrix derived from the proteome matches, as outlined below.

# -- Chunk 5                                             -- #
# -- Required objects generated in chunk 2: Xmotifs_list -- #

## Generate a non-redundant set of potentially tolerated peptides from the combined permutations of the largest X-scan motifs of both TCRs

Xmotif_max <- 
  Xmotifs_list %>% 
  .[[min(names(.))]] %>% 
  select(
    aa_position, aa, c756_CIhigh, c796_CIhigh
    ) %>% 
  pivot_longer(
    c(c756_CIhigh, c796_CIhigh), 
    names_to = "TCR"
    ) %>% 
  split( .$TCR) %>% 
  lapply( 
    function (df) 
      pivot_wider(
        df, 
        names_from = "aa_position", 
        values_from = value
        ) 
      ) %>% 
    lapply (
      function (df) 
        apply(df, 2, 
          function(x) df$aa[x>0]
          ) %>% 
    .[setdiff(names(.), c("TCR", "aa"))]
    ) %>% 
  lapply(
    function (df) expand.grid(df, stringsAsFactors = F) ) %>% 
  {full_join(.[[1]], .[[2]])}

The next step implemented parallel processing. With an optimal number of cores, this decreased computing time to 1/4 compared to time required for normal serial processing (s. Appendix for details).
Be warned that running this chunk on an ordinary PC still took several days. Accidental interruptions of the program during this time could have caused a very annoying loss of results. Therefore, I implemented a loop that can back up interim results at chosen intervals. In addition, this loop served as a coarse-step monitor for progress of the parallel computing, which did not seem easy to implement otherwise. There was a comparatively very small increase in computing time for each iteration of the loop, but I considered it a price worth paying. If you do not agree, simply set n <- 1 in the script below.

# -- Chunk 6                                             -- #
# -- Required objects generated in chunk 5: Xmotifs_list -- # 

## Perform search in n chunks and backup intermediate results (search may take several days on a PC, even with parallel processing) 

# Function for performing (human) proteome searches with X-scan motifs
# Input: dataframe of amino-acids in the different positions (columns) of each peptide (rows)
# Output: list of the number of matches (value) for each peptide found in the proteome, shown by its row index in the input file (name)
  
findMatches <- 
  function (Xmotif, ome = human_proteome) {
    pep <- 
      paste(Xmotif, collapse = "")
    pepMatch <- 
      vmatchPattern (pep, ome) %>% elementNROWS() %>% sum
    if( pepMatch > 0) { 
        pepMatch <- c(pepMatch, rownames(Xmotif)) 
        return( pepMatch)
      } 
    }

# Set up PC (Windows OS) for parallel processing of peptide searches in the human proteome
# Make sure to turn off automatic "sleep" in your PC's settings

# See appendix for determination of the optimal number of cores
cl <- makeCluster(12)

clusterExport(
  cl, 
  c("human_proteome", "Xmotif_max", "findMatches")
  )

clusterEvalQ(
  cl,
  {library(dplyr)
   library(purrr)
   library(Biostrings)
   } 
  )

# Set up a sub-directory for backing up partial search results
dir.create(
  file.path( paste(getwd()), paste( "Xmotif_matches") )
  )

# Determine number of times partial search results will be saved (nrow(Xmotif_max)/n must be an integer!)
n <- 160

# Initialise progress bar and list of search results
pb <- 
  progress_bar$new(
    format = "[Estimated time: elapsed > :elapsedfull, remaining < :eta]",
    total = n,
    clear = F,        # don't clear bar when finished
    )

# Loop through proteome searches with sequential subsets of the combined maximum X-scan motif, backup cumulative results
Xmotif_matches <- list()

for (i in 1:n) {
  Xmotif_matches [[i]] <- 
    Xmotif_max %>%  
    .[( (i-1)*nrow(.)/n + 1 ) : (i*nrow(.)/n), ] %>% 
    parApply(cl, ., 1, findMatches) %>% unlist 
    write.csv(
      Xmotif_matches %>% unlist,             
      "./Xmotif_matches/Xmotif_matches.csv")
    pb$tick()
  }


# Reset to serial processing
stopCluster(cl)


Xmotif_matches <- 
  Xmotif_matches %>% unlist



2.5. Computing peptide matches


2.5.1. Transformation of matching peptide sequences into a (0,1) matrix of the same format as the X-scan permutation matrices from chunk 2

Having retrieved the proteome matches for the combined maximum peptide set, the next task was to filter the results for the peptides of individual X-scan motifs. The most straightforward and intuitive approach might seem to generate the 126 sets of peptide sequences from the permutations of each motif, followed by looking for overlap with the maximum set. I felt that the same could be achieved more efficiently through multiplying the numerical values of the (0,1) permutation matrices with the numbers of proteome matches.

# -- Chunk 7                                                           -- #
# -- Required objects generated in chunk 2: Xmotifs_list                -- # 
# -- Required objects generated in chunk 6: Xmotif_max, Xmotifs_matches -- #


# Alternatively, download proteome search results from GitHub:

Xmotif_matches <- 
  read.csv(
    "https://raw.githubusercontent.com/thomas-weissensteiner/portfolio/main/Xscan_MAGEA10/Xmotif_matches_c756c796_max.csv") %>% 
  deframe()

## Extract table of amino-acids from Xmotif_max for peptides with human proteome matches, and join it with Xmotif_matches

matches_index <- 
  Xmotif_matches %>% 
  names %>% as.numeric()

Xmotif_matches <- 
  full_join( 
    Xmotif_max[matches_index, ] %>% 
      cbind( matches_index = rownames(.),. ),
    Xmotif_matches %>% cbind.data.frame() %>% 
      cbind( matches_index = rownames(.),. ) %>% 
      set_names( "matches_index", "pep_matches")
    ) %>% 
  select(!matches_index)

# -- Optional: show table before reformatting in rendered html document -- #
Before <- 
  Xmotif_matches %>% 
  kable(., 200, format = "html") %>%
  kable_styling(full_width = FALSE) %>%
  scroll_box(height = "200px")
# ------------------------------------------------------------------------ #

##  Wrangle Xmotif_matches into a dataframe of  the same format as the dataframes in Xmotifs_list

# Reformat table and show results
Xmotif_matches <- 
  Xmotif_matches  %>%     

  # Collapse tolerated amino-acids to generate peptide names
  rowwise() %>% 
    mutate( 
      peptide = paste( c_across(!pep_matches), collapse = "")
      ) %>% 

# Pivot amino-acid positions to column "aa_position" and their values into a new column "aa" for amino-acids
  pivot_longer(
    cols = !c(peptide, pep_matches), 
    names_to = "aa_position", 
    values_to = "aa"
    ) %>%
  pivot_wider(
    names_from = !c(peptide, aa), 
    values_from = pep_matches
    ) %>% 
  split(.$peptide) %>% 
    map (., function (x) 
      pivot_longer(
        x, 
        cols = !c(peptide, aa),
        names_to = c("x", "aa_position"), names_sep = "_",
        values_to = "pep_matches",
        values_drop_na = T
        )    
      ) %>% 
  list_rbind() %>% select(!x) %>% 

# Generate rows for a each individual amino-acid at each peptide position, first by swapping rownames in column "peptide" with column names indicating peptide position,  filling missing values with "NA" ...
  pivot_wider (
    names_from = "peptide", 
    values_from = "pep_matches") %>% 
# ... then adding rows of "NA"s for the amino acids not present in the peptide ... 
  split (.$aa_position) %>% 
  map (
    function (x) 
      full_join(x, 
        Xmotifs_list %>% .[[1]] %>% 
        filter (aa_position == "p1") %>% select ("aa")
        ) %>%
    mutate(
      aa_position = na.omit (.$aa_position) %>% 
        unique ()
      ) %>% 
    arrange (aa) 
    ) %>% 
  list_rbind() %>% 
# ... and finally replacin "NA"s with 0s
  replace(is.na(.), 0)
  
# -- Optional: show tables before and after reformatting in rendered html document -- #
After <- 
  Xmotif_matches %>% 
  kable(., 200, format = "html") %>%
  kable_styling(full_width = FALSE) %>%
  scroll_box(height = "200px")

cat("###### Before \n")
Before
cat(as.character(Before))
p1 p2 p3 p4 p5 p6 p7 p8 p9 pep_matches
Q S Y C L L E A A 4
C T Y D L P E G A 7
E Q Y D P P E L A 32
V L Y D S L Q L A 5
Q G Y D I M E P A 35
F N Y C G L E R A 1
L V Y N A L E T A 1
S L Y N S L E T A 4
D I Y C P P E T A 6
E I Y C P P E T A 7
Y V Y M L L E A C 10
Y L Y M L M E A C 4
W C Y M L L Q A C 13
K F Y D P L Q H C 1
C I Y C S G E I C 8
T S Y C G P Q P C 4
K I Y N P L E Q C 5
W T Y N P L E Q C 2
S A Y N T G E S C 12
L S Y D T L Q Y C 2
D L Y M A L Q A F 2
Q G Y D P P E G F 9
Q M Y M H L E L F 2
Y I Y D I P E M F 39
C A Y D H L E V F 2
P A Y D S P E V F 7
E N Y C L P E A I 4
V N Y M P P E A I 5
L S Y N A L Q C I 1
R G Y D L P E H I 4
L Q Y M A P E I I 18
N L Y N H P Q L I 2
E V Y D T P E N I 14
P A Y D G G Q P I 1
K L Y M S P E Q I 4
A A Y M A P E R I 4
N A Y M A P E R I 3
S N Y M A L Q R I 25
P C Y M S L E S I 4
K F Y N T L E S I 1
E I Y N L P E S I 3
V N Y C G L E T I 12
V A Y D H G Q T I 7
A A Y M A P E V I 5
P I Y M A P E V I 55
P M Y M A P E V I 8
E I Y M S P E V I 9
P L Y M G P E Y I 10
A I Y D T M Q Y I 2
L S Y N A L E A L 5
T A Y M A P E A L 19
L C Y D L L E C L 9
V I Y D L L E C L 14
T C Y D A G E G L 1
T Q Y N I L E G L 2
I C Y D G L Q G L 3
G S Y D S G E H L 9
G L Y D G M E H L 3
C G Y D S L Q H L 9
L V Y C S L E I L 1
L G Y N S L E I L 6
P G Y C A P E I L 6
N G Y M A P E I L 2
E I Y C H G E L L 2
M A Y C S L E L L 1
A S Y C H P Q L L 14
M A Y C A L E N L 5
V I Y D A L Q N L 9
N L Y D I G E Q L 31
L T Y C G L Q Q L 1
F S Y C I L E R L 4
R S Y M A P E R L 2
R S Y M S P E R L 4
R I Y M L L Q R L 1
S L Y N A L Q S L 15
E L Y D L L E T L 2
H G Y M A P E V L 7
V G Y M A P E V L 1
L Q Y M A P E V L 1
V N Y D A P Q Y L 1
I G Y N L M Q A M 1
K L Y N H L E C M 10
T T Y D G L E Q M 2
I I Y N S G E F Q 9
I L Y N P L Q G Q 1
I T Y C S L Q L Q 2
L A Y C L G Q M Q 3
V F Y D I L E P Q 9
Y G Y D P L Q R Q 1
E C Y N S P Q V Q 1
G S Y N P L Q Y Q 1
Y G Y N A G E A T 15
S G Y D I P E G T 7
D S Y M H L E I T 13
I L Y N G P E I T 2
V L Y N P L Q I T 5
H I Y N H G Q L T 8
H N Y M P G Q L T 1
D N Y N T L E S T 6
E G Y N S L E V T 2
T T Y C S P E Y T 4
V M Y C L L E A V 11
A A Y N P G Q A V 5
L I Y N L L Q A V 1
G C Y D P G Q H V 1
D S Y N A M E L V 13
P L Y M S P E L V 7
P L Y M A P E M V 12
S C Y D S G E P V 4
F N Y N T L E R V 2
A Q Y C P P E R V 5
P I Y N P G Q R V 5
A G Y N S L E S V 5
S I Y D T L E S V 4
R N Y D A P E T V 9
M T Y N T G Q T V 4
V G Y M A P E V V 30
H N Y N I L Q V V 7
F L Y M L M E Y V 1
A I F D S M Q M A 6
R G F C L P Q H C 1
F L F M L P Q L F 3
A I F D P P Q Q F 1
E F F D A P E I I 1
H I F C A M E Q I 3
S I F D L P Q Q I 4
A Q F D S P E I L 10
T T F D L M Q I L 2
P G F M A P E L L 2
S F F D L P Q Q L 4
P I F D L P Q Q L 11
P C F C S P Q R L 3
I A F M A P E V L 3
Y N F M T P Q H M 1
F S F D G P E I M 9
I T F C T M Q I M 2
L V Y M T P E Q S 6
F I F D L M E Y S 7
P L F D L M E R V 5
cat("\n\n###### After \n'")
After

cat(as.character(After))
aa aa_position AAYMAPERI AAYMAPEVI AAYNPGQAV AGYNSLESV AIFDPPQQF AIFDSMQMA AIYDTMQYI AQFDSPEIL AQYCPPERV ASYCHPQLL CAYDHLEVF CGYDSLQHL CIYCSGEIC CTYDLPEGA DIYCPPETA DLYMALQAF DNYNTLEST DSYMHLEIT DSYNAMELV ECYNSPQVQ EFFDAPEII EGYNSLEVT EIYCHGELL EIYCPPETA EIYMSPEVI EIYNLPESI ELYDLLETL ENYCLPEAI EQYDPPELA EVYDTPENI FIFDLMEYS FLFMLPQLF FLYMLMEYV FNYCGLERA FNYNTLERV FSFDGPEIM FSYCILERL GCYDPGQHV GLYDGMEHL GSYDSGEHL GSYNPLQYQ HGYMAPEVL HIFCAMEQI HIYNHGQLT HNYMPGQLT HNYNILQVV IAFMAPEVL ICYDGLQGL IGYNLMQAM IIYNSGEFQ ILYNGPEIT ILYNPLQGQ ITFCTMQIM ITYCSLQLQ KFYDPLQHC KFYNTLESI KIYNPLEQC KLYMSPEQI KLYNHLECM LAYCLGQMQ LCYDLLECL LGYNSLEIL LIYNLLQAV LQYMAPEII LQYMAPEVL LSYDTLQYC LSYNALEAL LSYNALQCI LTYCGLQQL LVYCSLEIL LVYMTPEQS LVYNALETA MAYCALENL MAYCSLELL MTYNTGQTV NAYMAPERI NGYMAPEIL NLYDIGEQL NLYNHPQLI PAYDGGQPI PAYDSPEVF PCFCSPQRL PCYMSLESI PGFMAPELL PGYCAPEIL PIFDLPQQL PIYMAPEVI PIYNPGQRV PLFDLMERV PLYMAPEMV PLYMGPEYI PLYMSPELV PMYMAPEVI QGYDIMEPA QGYDPPEGF QMYMHLELF QSYCLLEAA RGFCLPQHC RGYDLPEHI RIYMLLQRL RNYDAPETV RSYMAPERL RSYMSPERL SAYNTGESC SCYDSGEPV SFFDLPQQL SGYDIPEGT SIFDLPQQI SIYDTLESV SLYNALQSL SLYNSLETA SNYMALQRI TAYMAPEAL TCYDAGEGL TQYNILEGL TSYCGPQPC TTFDLMQIL TTYCSPEYT TTYDGLEQM VAYDHGQTI VFYDILEPQ VGYMAPEVL VGYMAPEVV VIYDALQNL VIYDLLECL VLYDSLQLA VLYNPLQIT VMYCLLEAV VNYCGLETI VNYDAPQYL VNYMPPEAI WCYMLLQAC WTYNPLEQC YGYDPLQRQ YGYNAGEAT YIYDIPEMF YLYMLMEAC YNFMTPQHM YVYMLLEAC
A p1 4 5 5 5 1 6 2 10 5 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p1 0 0 0 0 0 0 0 0 0 0 2 9 8 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 2 6 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 2 7 9 3 2 4 32 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 3 1 1 2 9 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 3 8 1 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 1 9 2 1 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 5 4 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 9 6 1 18 1 2 5 1 1 1 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
N p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 31 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 3 4 2 6 11 55 5 5 12 10 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 9 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4 1 9 2 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 4 4 7 4 4 15 4 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 1 2 4 2 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 9 1 30 9 14 5 5 11 12 1 5 0 0 0 0 0 0 0 0
W p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 2 0 0 0 0 0 0
Y p1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 15 39 4 1 10
A p2 4 5 5 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 5 1 0 3 0 0 0 1 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0
D p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p2 0 0 0 5 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 2 6 0 0 0 0 0 0 0 0 35 9 0 0 1 4 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 30 0 0 0 0 0 0 0 0 0 0 1 15 0 0 0 0
H p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p2 0 0 0 0 1 6 2 0 0 0 0 0 8 0 6 0 0 0 0 0 0 0 2 7 9 3 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 3 8 0 0 0 0 0 9 0 0 0 0 0 0 5 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 55 5 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 14 0 0 0 0 0 0 0 0 0 0 39 0 0 0
K p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 3 1 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 2 1 0 0 0 0 0 4 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 2 0 0 0 0 0 0 0 0 0 5 12 10 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 0 0 0 0 0 0 0 0 0 4 0 0
M p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0
N p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 1 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 1 5 0 0 0 0 0 0 1 0
P p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p2 0 0 0 0 0 0 0 10 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p2 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 13 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 4 0 0 9 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 2 4 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p2 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 4 2 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
V p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 6 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10
W p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p3 0 0 0 0 1 6 0 10 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 7 3 0 0 0 9 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 2 0 11 0 0 5 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
G p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
N p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p3 4 5 5 5 0 0 2 0 5 14 2 9 8 7 6 2 6 13 13 1 0 2 2 7 9 3 2 4 32 14 0 0 1 1 2 0 4 1 3 9 1 7 0 8 1 7 0 3 1 9 2 1 0 2 1 1 5 4 10 3 9 6 1 18 1 2 5 1 1 1 6 1 5 1 4 3 2 31 2 1 7 0 4 0 6 0 55 5 0 12 10 7 8 35 9 2 4 0 4 1 9 2 4 12 4 0 7 0 4 15 4 25 19 1 2 4 0 4 2 7 9 1 30 9 14 5 5 11 12 1 5 13 2 1 15 39 4 0 10
A p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p4 0 0 0 0 0 0 0 0 5 14 0 0 8 0 6 0 0 0 0 0 0 0 2 7 0 0 0 4 0 0 0 0 0 1 0 0 4 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1 1 0 0 5 1 0 0 0 0 0 0 0 3 0 0 6 0 0 0 0 0 0 0 0 0 0 0 4 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 11 12 0 0 0 0 0 0 0 0 0 0
D p4 0 0 0 0 1 6 2 10 0 0 2 9 0 7 0 0 0 0 0 0 1 0 0 0 0 0 2 0 32 14 7 0 0 0 0 9 0 1 3 9 0 0 0 0 0 0 0 3 0 0 0 0 0 0 1 0 0 0 0 0 9 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 31 0 1 7 0 0 0 0 11 0 0 5 0 0 0 0 35 9 0 0 0 4 0 9 0 0 0 4 4 7 4 4 0 0 0 0 1 0 0 2 0 2 7 9 0 0 9 14 5 0 0 0 1 0 0 0 1 0 39 0 0 0
E p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M p4 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 13 0 0 0 0 0 0 9 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 7 0 0 1 0 3 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 18 1 0 0 0 0 0 6 0 0 0 0 3 2 0 0 0 0 0 4 2 0 0 55 0 0 12 10 7 8 0 0 2 0 0 0 1 0 2 4 0 0 0 0 0 0 0 0 25 19 0 0 0 0 0 0 0 0 1 30 0 0 0 0 0 0 0 5 13 0 0 0 0 4 1 10
N p4 0 0 5 5 0 0 0 0 0 0 0 0 0 0 0 0 6 0 13 1 0 2 0 0 0 3 0 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 8 0 7 0 0 1 9 2 1 0 0 0 1 5 0 10 0 0 6 1 0 0 0 5 1 0 0 0 1 0 0 4 0 0 0 2 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 15 4 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 2 0 15 0 0 0 0
P p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A p5 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 13 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 3 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 1 0 5 1 0 0 0 1 5 0 0 3 2 0 0 0 0 0 0 2 6 0 55 0 0 12 0 0 8 0 0 0 0 0 0 0 9 2 0 0 0 0 0 0 0 15 0 25 19 1 0 0 0 0 0 0 0 1 30 9 0 0 0 0 0 1 0 0 0 0 15 0 0 0 0
C p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 9 0 0 3 0 0 0 0 0 0 0 0 3 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 2 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0
H p5 0 0 0 0 0 0 0 0 0 14 2 0 0 0 0 0 0 13 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 2 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0
K p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p5 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 3 2 4 0 0 7 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 3 9 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 5 0 0 0 0 0 0 0 4 1 4 1 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 14 0 0 11 0 0 0 13 0 0 0 0 4 0 10
M p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
N p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p5 0 0 5 0 1 0 0 0 5 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 0 0 32 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 5 0 2 1 0 0 0 0 0
Q p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p5 0 0 0 5 0 6 0 10 0 0 0 9 8 0 0 0 0 0 0 1 0 2 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 9 0 0 0 2 0 0 0 4 0 0 0 6 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 7 3 4 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 4 0 0 0 0 0 0 4 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0
T p5 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 6 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
V p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p6 0 0 5 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 9 0 0 0 8 1 0 0 0 0 9 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 31 0 1 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 4 0 0 0 0 0 0 0 0 1 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 0 0 0 0
H p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p6 0 0 0 5 0 0 0 0 0 0 2 9 0 0 0 2 6 13 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 1 2 0 4 0 0 0 1 0 0 0 0 7 0 3 0 0 0 1 0 2 1 1 5 0 10 0 9 6 1 0 0 2 5 1 1 1 0 1 5 1 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 2 4 0 0 1 0 0 0 0 0 0 0 0 4 15 4 25 0 0 2 0 0 0 2 0 9 0 0 9 14 5 5 11 12 0 0 13 2 1 0 0 0 0 10
M p6 0 0 0 0 0 6 2 0 0 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 3 0 0 0 3 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0
N p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p6 4 5 0 0 1 0 0 10 5 14 0 0 0 7 6 0 0 0 0 1 1 0 0 7 9 3 0 4 32 14 0 3 0 0 0 9 0 0 0 0 0 7 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 4 0 0 0 0 0 18 1 0 0 0 0 0 6 0 0 0 0 3 2 0 2 0 7 3 0 2 6 11 55 0 0 12 10 7 8 0 9 0 0 1 4 0 9 2 4 0 0 4 7 4 0 0 0 0 19 0 0 4 0 4 0 0 0 1 30 0 0 0 0 0 0 1 5 0 0 0 0 39 0 1 0
Q p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
R p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p7 4 5 0 5 0 0 0 10 5 0 2 0 8 7 6 0 6 13 13 0 1 2 2 7 9 3 2 4 32 14 7 0 1 1 2 9 4 0 3 9 0 7 3 0 0 0 3 0 0 9 2 0 0 0 0 1 5 4 10 0 9 6 0 18 1 0 5 0 0 1 6 1 5 1 0 3 2 31 0 0 7 0 4 2 6 0 55 0 5 12 10 7 8 35 9 2 4 0 4 0 9 2 4 12 4 0 7 0 4 0 4 0 19 1 2 0 0 4 2 0 9 1 30 0 14 0 0 11 12 0 5 0 2 0 15 39 4 0 10
F p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
K p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
N p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p7 0 0 5 0 1 6 2 0 0 14 0 9 0 0 0 2 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 1 0 0 1 0 0 8 1 7 0 3 1 0 0 1 2 2 1 0 0 0 0 3 0 0 1 0 0 2 0 1 1 0 0 0 0 0 4 0 0 0 2 1 0 3 0 0 0 11 0 5 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 4 0 4 0 15 0 25 0 0 0 4 2 0 0 7 0 0 0 9 0 5 5 0 0 1 0 13 0 1 0 0 0 1 0
R p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
V p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A p8 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 5 13 0 0 15 0 4 0 10
C p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 9 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G p8 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p8 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
I p8 0 0 0 0 0 0 0 10 0 0 0 0 8 0 0 0 0 13 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 0 6 0 18 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0
K p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p8 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 13 0 0 0 2 0 0 0 0 0 32 0 0 3 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 7 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0
M p8 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0
N p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p8 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 5 4 0 0 0 0 0 0 0 0 0 0 1 0 6 0 0 0 0 0 0 31 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
R p8 4 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 3 0 0 0 0 0 5 5 0 0 0 0 0 0 0 0 0 0 1 0 2 4 0 0 0 0 0 0 0 0 25 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
S p8 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 0 4 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 7 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0
V p8 0 5 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 0 2 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 7 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 55 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
W p8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p8 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
A p9 0 0 0 0 0 6 0 0 0 0 0 0 0 7 6 0 0 0 0 0 0 0 0 7 0 0 0 0 32 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0
C p9 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 5 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 12 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 13 2 0 0 0 4 0 10
D p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F p9 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 9 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 39 0 0 0
G p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I p9 4 5 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 9 3 0 4 0 14 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 1 0 4 0 0 0 0 0 18 0 0 0 1 0 0 0 0 0 0 0 3 0 0 2 1 0 0 4 0 0 0 55 0 0 0 10 0 8 0 0 0 0 0 4 0 0 0 0 0 0 0 0 4 0 0 0 25 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 12 0 5 0 0 0 0 0 0 0 0
K p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
L p9 0 0 0 0 0 0 0 10 0 14 0 9 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 4 0 3 9 0 7 0 0 0 0 3 3 0 0 0 0 0 0 0 0 0 0 0 0 9 6 0 0 1 0 5 0 1 1 0 0 5 1 0 0 2 31 0 0 0 3 0 2 6 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 4 0 0 4 0 0 0 15 0 0 19 1 2 0 2 0 0 0 0 1 0 9 14 0 0 0 0 1 0 0 0 0 0 0 0 0 0
M p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
N p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 9 0 1 0 2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
R p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 13 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 15 0 0 0 0
V p9 0 0 5 5 0 0 0 0 5 0 0 0 0 0 0 0 0 0 13 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 2 0 0 1 0 0 0 0 0 0 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 5 5 12 0 7 0 0 0 0 0 0 0 0 9 0 0 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0 0 0 0 11 0 0 0 0 0 0 0 0 0 0 0
W p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Y p9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
cat("\n\n")

Table of the proteome search results before and after reformatting
Before: A total of 139 peptides were identified as potential targets of TCRs c756 and/or c796 at weakest level of response (2% cut-off, upper 95% CI limit). These included the index GLYDGMEHL with 3 matches. Columns named p1 - p9: amino-acid positions, pep_matches: number of human proteome matches After: Columns named aa and aa position represent amino acids and their position, respectively. Columns labelled with peptide sequences show their number of proteome matches when a tolerated amino acid exists (aa, aa_position), otherwise the value is 0.


2.5.2. Calculation of the total numbers of peptide matches at different response cut-offs

To compute the numbers of peptides tolerated by individual TCRs and at higher levels of stringency, the following chunk multiplies the binary values of Xmotif_list with the number of matches of peptides where all amino-acids are tolerated.

# -- Chunk 8                                              -- #
# -- Requires object generated in chunk 2: Xmotifs_list   -- #
# -- Requires object generated in chunk 7: Xmotif_matches -- # 

## Generate a table of proteome matches for peptides potentially recognised by the two different TCRs

peptide_names <- 
  names( Xmotif_matches) %>% 
  .[!.== "aa" & !.== "aa_position"]
response_names <- 
  names( Xmotifs_list [[1]]) %>% 
  .[!.== "aa" & !.== "aa_position"] 
combinations <- 
  expand.grid( peptide = peptide_names, TCR_response = response_names)

Xmotif_matches_tbl <-  
  Xmotifs_list %>% 

# Multiply the binary values that define the X-scan motifs at different cut-offs in Xmotifs_list with numbers of proteome matches for each peptide  
  lapply(., function (x) {
    { cbind(
      select (x, c(aa, aa_position) ), 
      select (x, where (is.numeric)) %>%
        { apply(
            combinations, 1, function(row) {
              peptide <- Xmotif_matches [[row["peptide"]]]
              TCR_response <- .[[row["TCR_response"]]]
              peptide * TCR_response
              } 
            )
          } %>% 
      as_tibble() %>% 
      set_names(
        apply (
          combinations, 1, function (row) {
            paste ( row ["peptide"], row["TCR_response"], sep = "_")
            } 
          ) 
        )
      )
    } %>% 
      
# Summarise the total number of matches across all peptides
group_by( aa_position) %>% 
summarise( ., across( !c(aa), 
  function(x) sum(x))
  ) %>% 
select( !aa_position) %>% 
apply( ., 2, 
  function (x) ifelse( min(x) > 0, sum(x)/9, 0)
  ) %>% 
enframe() %>% set_names( "names", "matches") %>% 
separate( 
  names, into = c( "peptide", "TCR"), sep = "_", extra = "merge") %>% 
select( !peptide) %>% 
group_by( TCR) %>% 
summarise( 
  !!paste( names(Xmotifs_list [1]) ) := sum( matches) 
  )
} 
) %>% 
  
# For all dataframes in the list: change name of the column containing numbers of matches to names of the dataframe, join dataframes
  imap (., 
    function(df, name) {
      colnames(df)[-1] <- paste0(name)
      return(df)
    }
  ) %>% 
purrr::reduce( ., 
  function(x, y) full_join(x, y, by = "TCR")
  )

# -- Optional: show results, formatted for html display   -- #

Xmotif_matches_tbl %>% 
  kable( ., "html") %>% 
  kable_styling( 
    bootstrap_options = c( "striped", "condensed", "responsive")
    ) %>% 
  row_spec (1, background = "#dfe4f6") %>% 
  row_spec (4, background = "#f6dfdf") %>% 
  row_spec (c(2:3,5:6), background = "#fbfbfb")
TCR 0.02 0.04 0.06 0.08 0.1 0.12 0.14 0.16 0.18 0.2 0.22 0.24 0.26 0.28 0.3 0.32 0.34 0.36 0.38 0.4
c756 844 713 713 713 713 563 323 282 282 282 156 156 143 143 88 88 88 40 40 18
c756_CIhigh 844 742 742 713 713 713 713 563 563 296 296 282 282 282 282 282 156 156 156 143
c756_CIlow 817 713 713 713 309 309 129 129 129 48 48 48 17 4 4 4 4 4 3 3
c796 331 331 67 29 29 29 29 29 29 29 3 3 3 3 3 3 3 3 3 3
c796_CIhigh 331 331 331 331 133 29 29 29 29 29 29 29 29 29 7 7 7 7 7 3
c796_CIlow 283 29 29 22 22 22 22 22 3 3 3 3 3 3 3 3 3 3 3 3
Numbers of proteome matches of peptide variants potentially tolerated by TCRs c756 and c796 at response cut-offs between 2 - 40% of the response to the index peptide. c756 or c796, CIhigh, CIlow: values based on the mean, upper and lower 95% CI, respectively, of the experimental data.


2.5.3. TCR c796 has smaller of potentially recognised peptides with matches in the human proteome suggesting higher specificity is clinically relevant
# -- Chunk 9                                                  -- #
# -- Requires object generated in chunk 8: Xmotif_matches_tbl -- #


# Generate log scale with unlabeled minor breaks

ymin_log10 <-  Xmotif_matches_tbl %>% select (!TCR) %>% 
  min() %>% log10() %>% as.integer() -1
ymax_log10  <- Xmotif_matches_tbl %>% select (!TCR) %>% 
  max() %>% log10() %>% as.integer() + 1

breaks <- 10^c(ymin_log10:ymax_log10)
minor_breaks <- 
  rep(1:9, ymax_log10 - ymin_log10 + 1)*
  (10^rep (ymin_log10:ymax_log10, each = 9) )

# Generate plot

Xmotif_matches_tbl %>% 

separate(TCR, into = c("TCR", "CI"), sep = "_", fill = "right") %>%
  mutate(CI = ifelse(is.na(CI), "Mean", CI)) %>% 
  pivot_longer (
    cols = -c(TCR, CI),
    names_to = "cut_off",
    values_to = "motif_size"
    ) %>% 
  pivot_wider (
    names_from = CI,
    values_from = motif_size) %>%
    
# Plot numbers of peptide matches vs. cut-off values

ggplot (aes(x = cut_off, y = Mean, group = TCR, color = TCR, fill = TCR) ) +
  geom_line() +
  geom_ribbon(aes(ymin = CIlow, ymax = CIhigh), linetype = 0, alpha = 0.3) +
  scale_colour_manual(values = c(c756 = "#435daf", c796 = "#e53935")) +
  scale_fill_manual(values = c(c756 = "#435daf", c796 = "#e53935")) +
  scale_y_log10 (breaks = breaks, minor_breaks = minor_breaks) + 
    annotation_logticks(sides = "l") +
  scale_x_discrete (breaks = seq(0, 0.4, by = 0.1), 
                    labels = seq(0, 0.4, by = 0.1)) +
  geom_vline(
    aes( xintercept = as.numeric (
      factor (0.1, levels = levels (as.factor(cut_off)))
      ),
    linetype = "Cut-off of the \ncanonical \nX-scan motif"), 
    col = "#00838f", lwd = 1.3, alpha = 0.3
    ) +
  labs(linetype = NULL) +
  xlab("Response cut-off") + 
  ylab("Number of human proteome matches") +
  theme_minimal () + 
  theme(
    axis.line = element_line(color = "darkgrey"),
    axis.ticks = element_line(color = "black"),
    axis.ticks.length = unit(0.2, "cm")
  )

Numbers of human proteome matches for peptides which are potentially recognised by the two candidate TCRs.
Coloured lines represent numbers of matches for peptides comprising the X-scan motif at different cut-offs of for the T-cell response. Shaded areas indicate the 95% CIs. Blue: TCR c756, red: TCR c796. The cyan vertical line marks the cut-off used to define the canonical X-scan motifs.


The plot confirms that TCR c796 had higher specificity than TCR c756 at all cut-off values. Differences in the size of the X-scan motifs became significant when amino-acid substitutions generating responses ≤ 25% of responses to the index were included. At the 10% cut-off defining the canonical X-can motif, TCR c756 was predicted to tolerate ~ 24x as many targets in the human proteome compared to TCR c796.

These results are in qualitative agreement with the published Figure 6A. Figure 6A

However, the present search retrieved a considerably larger number of matches. This might have been due to the use of a different human proteome database (NCBI reference vs. UniProtKB/Swiss-Prot with splice variants). Moreover, the number of known proteome sequences might have increased in the 6 years since the paper was published. Errors in the published figure were based on the range of experimental values for each data point. By contrast, the 95% CIs are shown here which have larger margins.

2.6. Probabilities of tolerated peptides having matching sequences in the human proteome


Comparing the last figure with the corresponding plot for X-scan motif size (chunk 4) suggests that in addition to TCR c796 having a smaller repertoire of potentially recognised peptides, these also tend to have fewer matches in the human proteome. Together, this results in an even greater difference between the predicted specificities of the two TCRs.

# -- Chunk 10                                                  -- #
# -- Requires object generated in chunk  8: Xmotif_matches_tbl -- #
# -- Requires object generated in chunk 10: Xmotif_sizes       -- #


# Calculate proportions of X-scan motif peptides that have proteome matches

Xmotif_matches_prop <- 
  Xmotif_matches_tbl %>% 
  column_to_rownames(., "TCR")/Xmotif_sizes

# Generate log scale with unlabeled minor breaks

ymin_log10 <-  
  Xmotif_matches_prop %>% 
  min() %>% 
  log10() %>% as.integer() - 1
ymax_log10  <- 
  Xmotif_matches_prop %>% 
  max() %>% 
  log10() %>% as.integer() + 1

breaks <- 
  10^c(ymin_log10:ymax_log10)
minor_breaks <- 
  rep(1:9, ymax_log10 - ymin_log10 + 1)*
  (10^rep (ymin_log10:ymax_log10, each = 9) )

# Generate plot

Xmotif_matches_prop %>% 
  rownames_to_column ("TCR") %>% 
  separate(TCR, into = c("TCR", "CI"), 
           sep = "_", fill = "right") %>%
  mutate(CI = ifelse(is.na(CI), "Mean", CI)) %>% 
  pivot_longer (
    cols = -c(TCR, CI),
    names_to = "cut_off",
    values_to = "motif_size"
    ) %>% 
  pivot_wider (
    names_from = CI,
    values_from = motif_size) %>%
    
# Plot numbers of peptide matches vs. cut-off values

ggplot (
  aes( x = cut_off, y = Mean, group = TCR, color = TCR, fill = TCR) ) +
  geom_line() +
  geom_ribbon( 
    aes( ymin = CIlow, ymax = CIhigh), linetype = 0, alpha = 0.3) +
  scale_colour_manual(
    values = c(c756 = "#435daf", c796 = "#e53935")) +
  scale_fill_manual(
    values = c(c756 = "#435daf", c796 = "#e53935")) +
  scale_y_log10 (
    breaks = breaks, minor_breaks = minor_breaks) + 
  annotation_logticks(sides = "l") +
  scale_x_discrete (breaks = seq(0, 0.4, by = 0.1), 
                    labels = seq(0, 0.4, by = 0.1)) +
  geom_vline(
    aes( xintercept = as.numeric (
      factor (0.1, levels = levels (as.factor(cut_off)))
      ),
    linetype = "Cut-off of the \ncanonical \nX-scan motif"), 
    col = "#00838f", lwd = 1.3, alpha = 0.3
    ) +
  labs(linetype = NULL) +
  xlab("Response cut-off") + 
  ylab("Proportion of matches") +
  theme_minimal () + 
  theme(
    axis.line = element_line(color = "darkgrey"),
    axis.ticks = element_line(color = "black"),
    axis.ticks.length = unit(0.2, "cm")
  )


Here, I plotted the proportion of matches and its CIs against the T-cell response cut-off. It confirmed that peptide sequences derived from the X-scan motifs associated with TCR c756 were more likely to have matches in the human proteome than peptides associated with TCR c796. The difference was significant for peptides predicted to generate responses of ≤ 18% relative to the index peptide.

Figure 6B in the published paper illustrated this point using a different metric. The naïve probability of identifying matching sequences within the proteome was defined as \[ p(Match) = \prod_{i=1}^{n}( \frac{r_i}{20}) \] This is equivalent to the X-scan motif size (product of all ri = number of tolerated residues at position i within the sequence) of size, divided by the number of all possible variants of a peptide of the length n (20n).
The results showed that with increasing probability of a match, peptide sequences derived from the X-scan motifs associated with TCR c756 were present in the human proteome more often than TCR c796-associated peptides 2.

3. Discussion


3.1. Alternatives and variants of the X-scan


The X-scan involved substitutions at all positions of the peptide. By contrast, some studies have restricted mutagenesis to amino-acids which are commonly not involved in HLA binding (“anchor residues”), under the assumption that any substitutions at these positions were likely to be deleterious 10. However, most TCRs appear to tolerate a limited repertoire of amino-acids, or show flexibility regarding which residues are used as anchors.

Other positional amino-acid scans have been used to study TCR specificity. In the earliest reports, substitutions were limited to alanine, or alanine and glycine. It is now widely accepted, that these were unable to assess the full range of potential TCR cross-reactvity ^2, 14^.

Comprehensive substitution scans involving all 20 natural amino-acids can be grouped according to experimental and scoring methods. Combinatorial peptide libraries (CPL) attempt to cover all or most of the possible amino-acid permutations by assaying library mixtures in which the peptides have a common amino-acid one position, and any of the other amino acids elsewhere ^14, 15^. Their strength compared to the X-scan is that they can detect effects arising from the interaction of multiple amino-acid substitutions in the same peptide. However, this advantage is offset by a much lower sensitivity for variants causing weak responses because of the huge number of peptides in each library mix.

In addition to experimental differences, different scoring methods have been employed to determine whether a peptide might be tolerated. Most X-scans have regarded the response to a peptide as limited by the amino-acid substitution with the weakest response, independent of the effect(s) of any other substitution(s) that might be present. By contrast, CPL and some variants of the X-scan have assumed an additive effect when more than one amino-acid was replaced ^10, 14, 15^.

An interesting recent development are phage libraries displaying ~ 10^11 peptide variants in complex with an HLA molecule. Phage panning detected fewer tolerated variants than predicted by the X-scan, but also some that the latter had missed 16.

Finally, pure in silico approaches have been developed for predicting cross-reactivity, based on scoring biochemical similarities between amino-acids, weighted by amino-acid position ^17, 18^.

With the above exception, few side-by-side comparisons of these methods seem to have been performed.

3.2. Possible improvements of the search algorithm used in this script


An interesting alternative to Biostrings for peptide matching would have been the AhoCorasickTrie package. Its algorithm has been shown to yield much faster results when searching for exact matches.

Time could also be saved by omitting from the proteome search any peptides containing 6-mer sequences that are known to be absent from the human transcriptome 13. Unfortunately, a complete list of these >56 million so-called human “null-peptides” was not easily obtainable from public sources.

4. Citation


Please quote as: Weissensteiner, Thomas. Computing T-Cell Receptor Recognition Motifs and Their Matches in the Human Proteome. RPubs, 15 Sept. 2024. https://rpubs.com/thomas-weissensteiner/1221376.

5. References


1 Identification of a Titin-derived HLA-A1-presented peptide as a cross-reactive target for engineered MAGE A3-directed T cells
Cameron BJ, Gerry AB, Dukes J, Harper JV, Kannan V, Bianchi FC, Grand F, Brewer JE, Gupta M, Plesa G, Bossi G, Vuidepot A, Powlesland AS, Legg A, Adams KJ, Bennett AD, Pumphrey NJ, Williams DD, Binder-Scholl G, Kulikovskaya I, Levine BL, Riley JL, Varela-Rohena A, Stadtmauer EA, Rapoport AP, Linette GP, June CH, Hassan NJ, Kalos M, Jakobsen BK. Sci Transl Med. 2013 Aug 7;5(197):197ra103

2 Affinity-enhanced T-cell receptors for adoptive T-cell therapy targeting MAGE-A10: strategy for selection of an optimal candidate
Border EC, Sanderson JP, Weissensteiner T, Gerry AB, Pumphrey NJ. Oncoimmunology. 2018 Nov 20;8(2):e1532759

3 Preclinical evaluation of an affinity-enhanced MAGE-A4-specific T-cell receptor for adoptive T-cell therapy
Sanderson JP, Crowley DJ, Wiedermann GE, Quinn LL, Crossland KL, Tunbridge HM, Cornforth TV, Barnes CS, Ahmed T, Howe K, Saini M, Abbott RJ, Anderson VE, Tavano B, Maroto M, Gerry AB. Oncoimmunology. 2019 Nov 24;9(1):1682381

4 Phase 1 Clinical Trial Evaluating the Safety and Anti-Tumor Activity of ADP-A2M10 SPEAR T-Cells in Patients With MAGE-A10+ Head and Neck, Melanoma, or Urothelial Tumors
Hong DS, Butler MO, Pachynski RK, Sullivan R, Kebriaei P, Boross-Harmer S, Ghobadi A, Frigault MJ, Dumbrava EE, Sauer A, Brophy F, Navenot JM, Fayngerts S, Wolchinsky Z, Broad R, Batrakou DG, Wang R, Solis LM, Duose DY, Sanderson JP, Gerry AB, Marks D, Bai J, Norry E, Fracasso PM. Front Oncol. 2022 Mar 18;12:818679

5 Phase I clinical trial evaluating the safety and efficacy of ADP-A2M10 SPEAR T cells in patients with MAGE-A10+ advanced non-small cell lung cancer
Blumenschein GR, Devarakonda S, Johnson M, Moreno V, Gainor J, Edelman MJ, Heymach JV, Govindan R, Bachier C, Doger de Spéville B, Frigault MJ, Olszanski AJ, Lam VK, Hyland N, Navenot JM, Fayngerts S, Wolchinsky Z, Broad R, Batrakou D, Pentony MM, Sanderson JP, Gerry A, Marks D, Bai J, Holdich T, Norry E, Fracasso PM. J Immunother Cancer. 2022 Jan;10(1):e003581

6 Tuning T-Cell Receptor Affinity to Optimize Clinical Risk-Benefit When Targeting Alpha-Fetoprotein-Positive Liver Cancer
Docta RY, Ferronha T, Sanderson JP, Weissensteiner T, Pope GR, Bennett AD, Pumphrey NJ, Ferjentsik Z, Quinn LL, Wiedermann GE, Anderson VE, Saini M, Maroto M, Norry E, Gerry AB. Hepatology. 2019 May;69(5):2061-2075

7 Preclinical Studies of the Off-Target Reactivity of AFP(158)-Specific TCR Engineered T Cells
Cai L, Caraballo Galva LD, Peng Y, Luo X, Zhu W, Yao Y, Ji Y, He Y.Front Immunol. 2020 Apr 27;11:607

8 T cells targeted to TdT kill leukemic lymphoblasts while sparing normal lymphocytes
Ali M, Giannakopoulou E, Li Y, Lehander M, Virding Culleton S, Yang W, Knetter C, Odabasi MC, Bollineni RC, Yang X, Foldvari Z, Böschen ML, Taraldsrud E, Strønen E, Toebes M, Hillen A, Mazzi S, de Ru AH, Janssen GMC, Kolstad A, Tjønnfjord GE, Lie BA, Griffioen M, Lehmann S, Osnes LT, Buechner J, Garcia KC, Schumacher TN, van Veelen PA, Leisegang M, Jacobsen SEW, Woll P, Olweus J. Nat Biotechnol. 2022 Apr;40(4):488-498

9 A systematic safety pipeline for selection of T-cell receptors to enter clinical use
Foldvari Z, Knetter C, Yang W, Gjerdingen TJ, Bollineni RC, Tran TT, Lund-Johansen F, Kolstad A, Drousch K, Klopfleisch R, Leisegang M, Olweus J. NPJ Vaccines. 2023 Aug 22;8(1):126

10 Enhanced T cell receptor specificity through framework engineering
Rosenberg AM, Ayres CM, Medina-Cucurella AV, Whitehead TA, Baker BM. Front Immunol. 2024 Mar 12;15:1345368

11 PlotDigitizer, 3.1.5, 2024, plotdigitizer.com

12 Introduction to Bioinformatics
Lesk A. Oxford University Press. 4th ed. 2014. ISBN-13 978-0199651566

13 kmerDB: A database encompassing the set of genomic and proteomic sequence information for each species
Mouratidis I, Baltoumas FA, Chantzi N, Patsakis M, Chan CSY, Montgomery A, Konnaris MA, Aplakidou E, Georgakopoulos GC, Das A, Chartoumpekis DV, Kovac J, Pavlopoulos GA, Georgakopoulos-Soares I. Comput Struct Biotechnol J. 2024 Apr 21;23:1919-1928.

14 TCR Fingerprinting and Off-Target Peptide Identification
Karapetyan AR, Chaipan C, Winkelbach K, Wimberger S, Jeong JS, Joshi B, Stein RB, Underwood D, Castle JC, van Dijk M, Seibert V. Front Immunol. 2019 Oct 22;10:2501. doi: 10.3389/fimmu.2019.02501

15 Preclinical Strategies to Identify Off-Target Toxicity of High-Affinity TCRs
Bijen HM, van der Steen DM, Hagedoorn RS, Wouters AK, Wooldridge L, Falkenburg JHF, Heemskerk MHM. Mol Ther. 2018 May 2;26(5):1206-1214

16 TCRs with Distinct Specificity Profiles Use Different Binding Modes to Engage an Identical Peptide-HLA Complex
Coles CH, Mulvaney RM, Malla S, Walker A, Smith KJ, Lloyd A, Lowe KL, McCully ML, Martinez Hague R, Aleksic M, Harper J, Paston SJ, Donnellan Z, Chester F, Wiederhold K, Robinson RA, Knox A, Stacey AR, Dukes J, Baston E, Griffin S, Jakobsen BK, Vuidepot A, Harper S. J Immunol. 2020 Apr 1;204(7):1943-1953

17 PepSim: T-cell cross-reactivity prediction via comparison of peptide sequence and peptide-HLA structure
Hall-Swan S, Slone J, Rigo MM, Antunes DA, Lizée G, Kavraki LE. Front Immunol. 2023 Apr 28;14:1108303

18 CrossDome: an interactive R package to predict cross-reactivity risk using immunopeptidomics databases
Fonseca AF, Antunes DA. Front Immunol. 2023 Jun 12;14:1142573

6. Appendix: Optimizing the number of cores for parallel computing


## This script can be run to determine the optimal number of cores for parallel processing in chunk 6

# The test file is a dataframe where each row represents a peptide, columns amino-acid positions, and values amino-acid names in single letter code (here: 500 peptides from Xmotif_max)
Xmotif_test <- Xmotif_max[3648201: 3648700, ]

cores = c(1: detectCores())

t_sys <- list()

for (j in cores) {

  cl <- makeCluster(j)

  clusterExport(cl, c("human_proteome", "Xmotif_max", "findMatches"))

  clusterEvalQ( cl,
    { library(dplyr)
      library(purrr)
      library(Biostrings)
    } )

  n = 1
  Xmotif_matches <- list()

  t_sys[[j]] <- 
  system.time(
    for (i in 1:n) {
      Xmotif_matches[[i]] <- 
        Xmotif_test %>%  
        .[( (i-1)*nrow(.)/n + 1 ) : (i*nrow(.)/n), ] %>% 
        parApply(cl, ., 1, findMatches) %>% unlist 
    }
  ) %>% 
  unlist %>% t %>% as.data.frame.array

stopCluster(cl)
}

t_sys %>% 
  list_rbind() %>% 
  select(., "Time[s]" = elapsed) %>%  cbind ("Cores" = cores, .)

Cores Time[sec]
1 120.36
2 60.93
3 42.57
4 36.83
5 32.21
6 24.99
7 22.29
8 21.67
9 23.41
10 21.32
11 26.87
12 19.89
13 27.05
14 26.03
15 31.58
16 31.59


Trade-off between CPU and memory usage means that the relationship between the number of cores and elapsed time can be complex. With the PC and test file used here, the elapsed time running the test with maximum number of 16 cores was 31.6 s. However, the two settings with the fastest performance were 10 cores (21.3 s) and 12 cores (19.9 s).

PC used in this work: Intel(R) Core(TM) i7-10700T CPU @ 2.00GHz, 16GB RAM OS: Windows 11 Pro