1. Write a program that calculates and prints out the base composition of the DNA sequence.
#Load Necessary Library
library(tidyverse)
#Construction of function
BC <- function(){
  print(str_count(dnaseq, "A")) #520
  print(str_count(dnaseq, "G")) #652
  print(str_count(dnaseq, "C")) #596
  print(str_count(dnaseq, "T")) #541
}
#Display of base composition 
BC()
[1] 520
[1] 652
[1] 596
[1] 541
  1. Write a program that prints out the reverse complement of the DNA sequence.
#Load Necessary Library 
library(devtools)
#Define the DNA sequence
dnaseq <- "TGCGAGTGTTGAAGTTCGGCGGTACATCAGTGGCAAATGCAGAACGTTTTCTGCGTGTTGCCGATATTCTGGAAAGCAATGCCAGGCAGGGGCAGGTGGCCACCGTCCTCTCTGCCCCCGCCAAAATCACCAACCACCTGGTGGCGATGATTGAAAAAACCATTAGCGGCCAGGATGCTTTACCCAATATCAGCGATGCCGAACGTATTTTTGCCGAACTTTTGACGGGACTCGCCGCCGCCCAGCCGGGGTTCCCGCTGGCGCAATTGAAAACTTTCGTCGATCAGGAATTTGCCCAAATAAAACATGTCCTGCATGGCATTAGTTTGTTGGGGCAGTGCCCGGATAGCATCAACGCTGCGCTGATTTGCCGTGGCGAGAAAATGTCGATCGCCATTATGGCCGGCGTATTAGAAGCGCGCGGTCACAACGTTACTGTTATCGATCCGGTCGAAAAACTGCTGGCAGTGGGGCATTACCTCGAATCTACCGTCGATATTGCTGAGTCCACCCGCCGTATTGCGGCAAGCCGCATTCCGGCTGATCACATGGTGCTGATGGCAGGTTTCACCGCCGGTAATGAAAAAGGCGAACTGGTGGTGCTTGGACGCAACGGTTCCGACTACTCTGCTGCGGTGCTGGCTGCCTGTTTACGCGCCGATTGTTGCGAGATTTGGACGGACGTTGACGGGGTCTATACCTGCGACCCGCGTCAGGTGCCCGATGCGAGGTTGTTGAAGTCGATGTCCTACCAGGAAGCGATGGAGCTTTCCTACTTCGGCGCTAAAGTTCTTCACCCCCGCAATGACGATGCCAACGAATCAATGCCCGTGGCGGATGCAGGTTCATCACATTACGCAAGAAACGCCGGATGTGTGGACGATTTCCCTGATTTGCCACGATTACTACCCATATCGCGCCGGGCAATATGCACTGGTCAGCGTGCGAAACTCAGCGGAAACGCTGCGTGCTTACACCATTTCCTCCACGCCAGGCGTGAGTGAATATATCACCCTGACCGTGCGGCGGATTGATGACGGTGTCGGCTCCCAGTGGCTGACGCGCGATGTAAAACGCGGTGATTATCTCTGGCTTTCGGACGCGATGGGGGAATTTACCTGCGACGATAAAGCAGAAGATAAATTCCTGTTGCTGGCGGCAGGCTGCGGCGTCACGCCGATTATGTCGATGCGTCGCTGGCTTGCGAAGAACCGTCCACAGGCCGATGTGCGGGTGATCTACAACGTGCGTACGCCGCAGGATGTTATTTTCGCCGATGAGTGGCGTAACTATCCGGTAACGCTGGTGGCAGAAAATAACGTTACCGAAGGCTTTATCGCTGGTCGTCTCACTCGCGAACTGCTGGCAGGTGTACCTGACTTAGCTTCACGTACCGTGATGACCTGCGGCCCGGCTCCGTATATGGATTGGGTAGAGCAGGAAGTGAAAGCGCTCGGCGTGACGCGTTTCTTTAAAGAGAAATTCTTCACCCCAGTAGCAGAAGCGGCGACCAGCGGTCTGAAATTCACCAAACTGCAACCGGCACGAGAATTTTACGCCCCGGTTGGCACCACGCTACTGGAGGCGCTGGAAAGCAATAACGTTCCGGTTGTCGCTGCCTGCCGTGCGGGTGTTTGCGGCTGCTGTAAGACAAAAGTGGTTTCCGGTGAATATACGGTGAGCAGCACAATGACGCTGACCGACGCCGAAATCGCTGAAGGTTACGTACTGGCCTGCTCCTGCCATCCGCAGGGGGATTTGGTTCTCGCATAACGTTGGCGGTGCGCTGCTGGAGCAACTGAAGCGTCAGCAAAGCTGGCTGAAGAATAAACATATCGACTTACGTGTCTGCGGTGTTGCCAACTCGAAGGCTCTGCTCACCAATGTACATGGCCTTAATCTGGAAAACTGGCAGGAAGAACTGGCGCAAGCCAAAGAGCCGTTTAATCTCGGGCGCTTAATTCGCCTCGTGAAAGAATATCATCTGCTGAACCCGGTCATTGTTGACTGCACTTCCAGCCAGGCAGTGGCGGATCAATATGCCGACTTCCTGCGCGAAGGTTTCCACGTTGTCACGCCGAACAAAAAGGCCAACACCTCGTCGATGGATTACTACCATCAGTTGCGTTATGCGGCGGAAAAATCGCGGCGTAAATTCCTCTATGACACCAACGTTGGGGCTGGATTACCGGTTATTGAGAACCTGCAAAATCTGCTCAATGCAGGTGATGAATTGATGAAGTTCTCCGGCATTCTTTCTGGTTCGCTTTCTTATATCTTCGGCAAGTTAGACGAAGGCATGAGTTTCT"
#Perform the Reverse Complement of the DNA Sequence
tktools::revcomp(dnaseq)
[1] "AGAAACTCATGCCTTCGTCTAACTTGCCGAAGATATAAGAAAGCGAACCAGAAAGAATGCCGGAGAACTTCATCAATTCATCACCTGCATTGAGCAGATTTTGCAGGTTCTCAATAACCGGTAATCCAGCCCCAACGTTGGTGTCATAGAGGAATTTACGCCGCGATTTTTCCGCCGCATAACGCAACTGATGGTAGTAATCCATCGACGAGGTGTTGGCCTTTTTGTTCGGCGTGACAACGTGGAAACCTTCGCGCAGGAAGTCGGCATATTGATCCGCCACTGCCTGGCTGGAAGTGCAGTCAACAATGACCGGGTTCAGCAGATGATATTCTTTCACGAGGCGAATTAAGCGCCCGAGATTAAACGGCTCTTTGGCTTGCGCCAGTTCTTCCTGCCAGTTTTCCAGATTAAGGCCATGTACATTGGTGAGCAGAGCCTTCGAGTTGGCAACACCGCAGACACGTAAGTCGATATGTTTATTCTTCAGCCAGCTTTGCTGACGCTTCAGTTGCTCCAGCAGCGCACCGCCAACGTTATGCGAGAACCAAATCCCCCTGCGGATGGCAGGAGCAGGCCAGTACGTAACCTTCAGCGATTTCGGCGTCGGTCAGCGTCATTGTGCTGCTCACCGTATATTCACCGGAAACCACTTTTGTCTTACAGCAGCCGCAAACACCCGCACGGCAGGCAGCGACAACCGGAACGTTATTGCTTTCCAGCGCCTCCAGTAGCGTGGTGCCAACCGGGGCGTAAAATTCTCGTGCCGGTTGCAGTTTGGTGAATTTCAGACCGCTGGTCGCCGCTTCTGCTACTGGGGTGAAGAATTTCTCTTTAAAGAAACGCGTCACGCCGAGCGCTTTCACTTCCTGCTCTACCCAATCCATATACGGAGCCGGGCCGCAGGTCATCACGGTACGTGAAGCTAAGTCAGGTACACCTGCCAGCAGTTCGCGAGTGAGACGACCAGCGATAAAGCCTTCGGTAACGTTATTTTCTGCCACCAGCGTTACCGGATAGTTACGCCACTCATCGGCGAAAATAACATCCTGCGGCGTACGCACGTTGTAGATCACCCGCACATCGGCCTGTGGACGGTTCTTCGCAAGCCAGCGACGCATCGACATAATCGGCGTGACGCCGCAGCCTGCCGCCAGCAACAGGAATTTATCTTCTGCTTTATCGTCGCAGGTAAATTCCCCCATCGCGTCCGAAAGCCAGAGATAATCACCGCGTTTTACATCGCGCGTCAGCCACTGGGAGCCGACACCGTCATCAATCCGCCGCACGGTCAGGGTGATATATTCACTCACGCCTGGCGTGGAGGAAATGGTGTAAGCACGCAGCGTTTCCGCTGAGTTTCGCACGCTGACCAGTGCATATTGCCCGGCGCGATATGGGTAGTAATCGTGGCAAATCAGGGAAATCGTCCACACATCCGGCGTTTCTTGCGTAATGTGATGAACCTGCATCCGCCACGGGCATTGATTCGTTGGCATCGTCATTGCGGGGGTGAAGAACTTTAGCGCCGAAGTAGGAAAGCTCCATCGCTTCCTGGTAGGACATCGACTTCAACAACCTCGCATCGGGCACCTGACGCGGGTCGCAGGTATAGACCCCGTCAACGTCCGTCCAAATCTCGCAACAATCGGCGCGTAAACAGGCAGCCAGCACCGCAGCAGAGTAGTCGGAACCGTTGCGTCCAAGCACCACCAGTTCGCCTTTTTCATTACCGGCGGTGAAACCTGCCATCAGCACCATGTGATCAGCCGGAATGCGGCTTGCCGCAATACGGCGGGTGGACTCAGCAATATCGACGGTAGATTCGAGGTAATGCCCCACTGCCAGCAGTTTTTCGACCGGATCGATAACAGTAACGTTGTGACCGCGCGCTTCTAATACGCCGGCCATAATGGCGATCGACATTTTCTCGCCACGGCAAATCAGCGCAGCGTTGATGCTATCCGGGCACTGCCCCAACAAACTAATGCCATGCAGGACATGTTTTATTTGGGCAAATTCCTGATCGACGAAAGTTTTCAATTGCGCCAGCGGGAACCCCGGCTGGGCGGCGGCGAGTCCCGTCAAAAGTTCGGCAAAAATACGTTCGGCATCGCTGATATTGGGTAAAGCATCCTGGCCGCTAATGGTTTTTTCAATCATCGCCACCAGGTGGTTGGTGATTTTGGCGGGGGCAGAGAGGACGGTGGCCACCTGCCCCTGCCTGGCATTGCTTTCCAGAATATCGGCAACACGCAGAAAACGTTCTGCATTTGCCACTGATGTACCGCCGAACTTCAACACTCGCA"
  1. Write a program to translate an open reading frame (ORF) into an amino acid sequence.

    Assuming the prompt is instructing the student to choose ONE ORF, I choose to translate the longest ORF in the first reading frame (bases 805 - 1773).

#Load Necessary Library
library(seqinr)
#Selection of what ORF I want to Translate 
substring(dnaseq,805,1773)
[1] "ATGACGATGCCAACGAATCAATGCCCGTGGCGGATGCAGGTTCATCACATTACGCAAGAAACGCCGGATGTGTGGACGATTTCCCTGATTTGCCACGATTACTACCCATATCGCGCCGGGCAATATGCACTGGTCAGCGTGCGAAACTCAGCGGAAACGCTGCGTGCTTACACCATTTCCTCCACGCCAGGCGTGAGTGAATATATCACCCTGACCGTGCGGCGGATTGATGACGGTGTCGGCTCCCAGTGGCTGACGCGCGATGTAAAACGCGGTGATTATCTCTGGCTTTCGGACGCGATGGGGGAATTTACCTGCGACGATAAAGCAGAAGATAAATTCCTGTTGCTGGCGGCAGGCTGCGGCGTCACGCCGATTATGTCGATGCGTCGCTGGCTTGCGAAGAACCGTCCACAGGCCGATGTGCGGGTGATCTACAACGTGCGTACGCCGCAGGATGTTATTTTCGCCGATGAGTGGCGTAACTATCCGGTAACGCTGGTGGCAGAAAATAACGTTACCGAAGGCTTTATCGCTGGTCGTCTCACTCGCGAACTGCTGGCAGGTGTACCTGACTTAGCTTCACGTACCGTGATGACCTGCGGCCCGGCTCCGTATATGGATTGGGTAGAGCAGGAAGTGAAAGCGCTCGGCGTGACGCGTTTCTTTAAAGAGAAATTCTTCACCCCAGTAGCAGAAGCGGCGACCAGCGGTCTGAAATTCACCAAACTGCAACCGGCACGAGAATTTTACGCCCCGGTTGGCACCACGCTACTGGAGGCGCTGGAAAGCAATAACGTTCCGGTTGTCGCTGCCTGCCGTGCGGGTGTTTGCGGCTGCTGTAAGACAAAAGTGGTTTCCGGTGAATATACGGTGAGCAGCACAATGACGCTGACCGACGCCGAAATCGCTGAAGGTTACGTACTGGCCTGCTCCTGCCATCCGCAGGGGGATTTGGTTCTCGCATAA"
#Preparing Selected ORF for Translation
TRANSORF <- s2c("ATGACGATGCCAACGAATCAATGCCCGTGGCGGATGCAGGTTCATCACATTACGCAAGAAACGCCGGATGTGTGGACGATTTCCCTGATTTGCCACGATTACTACCCATATCGCGCCGGGCAATATGCACTGGTCAGCGTGCGAAACTCAGCGGAAACGCTGCGTGCTTACACCATTTCCTCCACGCCAGGCGTGAGTGAATATATCACCCTGACCGTGCGGCGGATTGATGACGGTGTCGGCTCCCAGTGGCTGACGCGCGATGTAAAACGCGGTGATTATCTCTGGCTTTCGGACGCGATGGGGGAATTTACCTGCGACGATAAAGCAGAAGATAAATTCCTGTTGCTGGCGGCAGGCTGCGGCGTCACGCCGATTATGTCGATGCGTCGCTGGCTTGCGAAGAACCGTCCACAGGCCGATGTGCGGGTGATCTACAACGTGCGTACGCCGCAGGATGTTATTTTCGCCGATGAGTGGCGTAACTATCCGGTAACGCTGGTGGCAGAAAATAACGTTACCGAAGGCTTTATCGCTGGTCGTCTCACTCGCGAACTGCTGGCAGGTGTACCTGACTTAGCTTCACGTACCGTGATGACCTGCGGCCCGGCTCCGTATATGGATTGGGTAGAGCAGGAAGTGAAAGCGCTCGGCGTGACGCGTTTCTTTAAAGAGAAATTCTTCACCCCAGTAGCAGAAGCGGCGACCAGCGGTCTGAAATTCACCAAACTGCAACCGGCACGAGAATTTTACGCCCCGGTTGGCACCACGCTACTGGAGGCGCTGGAAAGCAATAACGTTCCGGTTGTCGCTGCCTGCCGTGCGGGTGTTTGCGGCTGCTGTAAGACAAAAGTGGTTTCCGGTGAATATACGGTGAGCAGCACAATGACGCTGACCGACGCCGAAATCGCTGAAGGTTACGTACTGGCCTGCTCCTGCCATCCGCAGGGGGATTTGGTTCTCGCATAA")
#Translating the ORF
translate(seq=TRANSORF)
  [1] "M" "T" "M" "P" "T" "N" "Q" "C" "P" "W" "R" "M" "Q" "V" "H" "H" "I" "T" "Q" "E" "T" "P" "D" "V" "W" "T" "I" "S"
 [29] "L" "I" "C" "H" "D" "Y" "Y" "P" "Y" "R" "A" "G" "Q" "Y" "A" "L" "V" "S" "V" "R" "N" "S" "A" "E" "T" "L" "R" "A"
 [57] "Y" "T" "I" "S" "S" "T" "P" "G" "V" "S" "E" "Y" "I" "T" "L" "T" "V" "R" "R" "I" "D" "D" "G" "V" "G" "S" "Q" "W"
 [85] "L" "T" "R" "D" "V" "K" "R" "G" "D" "Y" "L" "W" "L" "S" "D" "A" "M" "G" "E" "F" "T" "C" "D" "D" "K" "A" "E" "D"
[113] "K" "F" "L" "L" "L" "A" "A" "G" "C" "G" "V" "T" "P" "I" "M" "S" "M" "R" "R" "W" "L" "A" "K" "N" "R" "P" "Q" "A"
[141] "D" "V" "R" "V" "I" "Y" "N" "V" "R" "T" "P" "Q" "D" "V" "I" "F" "A" "D" "E" "W" "R" "N" "Y" "P" "V" "T" "L" "V"
[169] "A" "E" "N" "N" "V" "T" "E" "G" "F" "I" "A" "G" "R" "L" "T" "R" "E" "L" "L" "A" "G" "V" "P" "D" "L" "A" "S" "R"
[197] "T" "V" "M" "T" "C" "G" "P" "A" "P" "Y" "M" "D" "W" "V" "E" "Q" "E" "V" "K" "A" "L" "G" "V" "T" "R" "F" "F" "K"
[225] "E" "K" "F" "F" "T" "P" "V" "A" "E" "A" "A" "T" "S" "G" "L" "K" "F" "T" "K" "L" "Q" "P" "A" "R" "E" "F" "Y" "A"
[253] "P" "V" "G" "T" "T" "L" "L" "E" "A" "L" "E" "S" "N" "N" "V" "P" "V" "V" "A" "A" "C" "R" "A" "G" "V" "C" "G" "C"
[281] "C" "K" "T" "K" "V" "V" "S" "G" "E" "Y" "T" "V" "S" "S" "T" "M" "T" "L" "T" "D" "A" "E" "I" "A" "E" "G" "Y" "V"
[309] "L" "A" "C" "S" "C" "H" "P" "Q" "G" "D" "L" "V" "L" "A" "*"
  1. Write a program that searches for EcoRI sites (GAATTC) and reports their position in the
    sequence.
#Load Necessary Library
library(stringr)
#Convert DNA Sequence to String 
DNA__1 <- toString(dnaseq)
#Search and Report EcoRI Site
hitcounter <- function() {

if (DNA__1=="GAATTC")

return(1) & which(strsplit(DNA__1,"")[[1]]=="GAATTC")

else 

return(0)

}

#Print Results 
print(hitcounter())
[1] 0

According to my code, there are zero EcoRI sites present in the data sequence.

LS0tCnRpdGxlOiAiUklDSEFSRFNPTi5MYWI2RXhjZXJjaXNlcyIKYXV0aG9yOiBKYW52aWVyIFJpY2hhcmRzb24gCmRhdGU6IDI1IE9jdG9iZXIsIDIwMjIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKMS4gICpXcml0ZSBhIHByb2dyYW0gdGhhdCBjYWxjdWxhdGVzIGFuZCBwcmludHMgb3V0IHRoZSBiYXNlIGNvbXBvc2l0aW9uIG9mIHRoZSBETkEgc2VxdWVuY2UuKgoKYGBge3J9CiNMb2FkIE5lY2Vzc2FyeSBMaWJyYXJ5CmxpYnJhcnkodGlkeXZlcnNlKQojQ29uc3RydWN0aW9uIG9mIGZ1bmN0aW9uCkJDIDwtIGZ1bmN0aW9uKCl7CiAgcHJpbnQoc3RyX2NvdW50KGRuYXNlcSwgIkEiKSkgIzUyMAogIHByaW50KHN0cl9jb3VudChkbmFzZXEsICJHIikpICM2NTIKICBwcmludChzdHJfY291bnQoZG5hc2VxLCAiQyIpKSAjNTk2CiAgcHJpbnQoc3RyX2NvdW50KGRuYXNlcSwgIlQiKSkgIzU0MQp9CiNEaXNwbGF5IG9mIGJhc2UgY29tcG9zaXRpb24gCkJDKCkKYGBgCgoyLiAgKldyaXRlIGEgcHJvZ3JhbSB0aGF0IHByaW50cyBvdXQgdGhlIHJldmVyc2UgY29tcGxlbWVudCBvZiB0aGUgRE5BIHNlcXVlbmNlLioKCmBgYHtyfQojTG9hZCBOZWNlc3NhcnkgTGlicmFyeSAKbGlicmFyeShkZXZ0b29scykKI0RlZmluZSB0aGUgRE5BIHNlcXVlbmNlCmRuYXNlcSA8LSAiVEdDR0FHVEdUVEdBQUdUVENHR0NHR1RBQ0FUQ0FHVEdHQ0FBQVRHQ0FHQUFDR1RUVFRDVEdDR1RHVFRHQ0NHQVRBVFRDVEdHQUFBR0NBQVRHQ0NBR0dDQUdHR0dDQUdHVEdHQ0NBQ0NHVENDVENUQ1RHQ0NDQ0NHQ0NBQUFBVENBQ0NBQUNDQUNDVEdHVEdHQ0dBVEdBVFRHQUFBQUFBQ0NBVFRBR0NHR0NDQUdHQVRHQ1RUVEFDQ0NBQVRBVENBR0NHQVRHQ0NHQUFDR1RBVFRUVFRHQ0NHQUFDVFRUVEdBQ0dHR0FDVENHQ0NHQ0NHQ0NDQUdDQ0dHR0dUVENDQ0dDVEdHQ0dDQUFUVEdBQUFBQ1RUVENHVENHQVRDQUdHQUFUVFRHQ0NDQUFBVEFBQUFDQVRHVENDVEdDQVRHR0NBVFRBR1RUVEdUVEdHR0dDQUdUR0NDQ0dHQVRBR0NBVENBQUNHQ1RHQ0dDVEdBVFRUR0NDR1RHR0NHQUdBQUFBVEdUQ0dBVENHQ0NBVFRBVEdHQ0NHR0NHVEFUVEFHQUFHQ0dDR0NHR1RDQUNBQUNHVFRBQ1RHVFRBVENHQVRDQ0dHVENHQUFBQUFDVEdDVEdHQ0FHVEdHR0dDQVRUQUNDVENHQUFUQ1RBQ0NHVENHQVRBVFRHQ1RHQUdUQ0NBQ0NDR0NDR1RBVFRHQ0dHQ0FBR0NDR0NBVFRDQ0dHQ1RHQVRDQUNBVEdHVEdDVEdBVEdHQ0FHR1RUVENBQ0NHQ0NHR1RBQVRHQUFBQUFHR0NHQUFDVEdHVEdHVEdDVFRHR0FDR0NBQUNHR1RUQ0NHQUNUQUNUQ1RHQ1RHQ0dHVEdDVEdHQ1RHQ0NUR1RUVEFDR0NHQ0NHQVRUR1RUR0NHQUdBVFRUR0dBQ0dHQUNHVFRHQUNHR0dHVENUQVRBQ0NUR0NHQUNDQ0dDR1RDQUdHVEdDQ0NHQVRHQ0dBR0dUVEdUVEdBQUdUQ0dBVEdUQ0NUQUNDQUdHQUFHQ0dBVEdHQUdDVFRUQ0NUQUNUVENHR0NHQ1RBQUFHVFRDVFRDQUNDQ0NDR0NBQVRHQUNHQVRHQ0NBQUNHQUFUQ0FBVEdDQ0NHVEdHQ0dHQVRHQ0FHR1RUQ0FUQ0FDQVRUQUNHQ0FBR0FBQUNHQ0NHR0FUR1RHVEdHQUNHQVRUVENDQ1RHQVRUVEdDQ0FDR0FUVEFDVEFDQ0NBVEFUQ0dDR0NDR0dHQ0FBVEFUR0NBQ1RHR1RDQUdDR1RHQ0dBQUFDVENBR0NHR0FBQUNHQ1RHQ0dUR0NUVEFDQUNDQVRUVENDVENDQUNHQ0NBR0dDR1RHQUdUR0FBVEFUQVRDQUNDQ1RHQUNDR1RHQ0dHQ0dHQVRUR0FUR0FDR0dUR1RDR0dDVENDQ0FHVEdHQ1RHQUNHQ0dDR0FUR1RBQUFBQ0dDR0dUR0FUVEFUQ1RDVEdHQ1RUVENHR0FDR0NHQVRHR0dHR0FBVFRUQUNDVEdDR0FDR0FUQUFBR0NBR0FBR0FUQUFBVFRDQ1RHVFRHQ1RHR0NHR0NBR0dDVEdDR0dDR1RDQUNHQ0NHQVRUQVRHVENHQVRHQ0dUQ0dDVEdHQ1RUR0NHQUFHQUFDQ0dUQ0NBQ0FHR0NDR0FUR1RHQ0dHR1RHQVRDVEFDQUFDR1RHQ0dUQUNHQ0NHQ0FHR0FUR1RUQVRUVFRDR0NDR0FUR0FHVEdHQ0dUQUFDVEFUQ0NHR1RBQUNHQ1RHR1RHR0NBR0FBQUFUQUFDR1RUQUNDR0FBR0dDVFRUQVRDR0NUR0dUQ0dUQ1RDQUNUQ0dDR0FBQ1RHQ1RHR0NBR0dUR1RBQ0NUR0FDVFRBR0NUVENBQ0dUQUNDR1RHQVRHQUNDVEdDR0dDQ0NHR0NUQ0NHVEFUQVRHR0FUVEdHR1RBR0FHQ0FHR0FBR1RHQUFBR0NHQ1RDR0dDR1RHQUNHQ0dUVFRDVFRUQUFBR0FHQUFBVFRDVFRDQUNDQ0NBR1RBR0NBR0FBR0NHR0NHQUNDQUdDR0dUQ1RHQUFBVFRDQUNDQUFBQ1RHQ0FBQ0NHR0NBQ0dBR0FBVFRUVEFDR0NDQ0NHR1RUR0dDQUNDQUNHQ1RBQ1RHR0FHR0NHQ1RHR0FBQUdDQUFUQUFDR1RUQ0NHR1RUR1RDR0NUR0NDVEdDQ0dUR0NHR0dUR1RUVEdDR0dDVEdDVEdUQUFHQUNBQUFBR1RHR1RUVENDR0dUR0FBVEFUQUNHR1RHQUdDQUdDQUNBQVRHQUNHQ1RHQUNDR0FDR0NDR0FBQVRDR0NUR0FBR0dUVEFDR1RBQ1RHR0NDVEdDVENDVEdDQ0FUQ0NHQ0FHR0dHR0FUVFRHR1RUQ1RDR0NBVEFBQ0dUVEdHQ0dHVEdDR0NUR0NUR0dBR0NBQUNUR0FBR0NHVENBR0NBQUFHQ1RHR0NUR0FBR0FBVEFBQUNBVEFUQ0dBQ1RUQUNHVEdUQ1RHQ0dHVEdUVEdDQ0FBQ1RDR0FBR0dDVENUR0NUQ0FDQ0FBVEdUQUNBVEdHQ0NUVEFBVENUR0dBQUFBQ1RHR0NBR0dBQUdBQUNUR0dDR0NBQUdDQ0FBQUdBR0NDR1RUVEFBVENUQ0dHR0NHQ1RUQUFUVENHQ0NUQ0dUR0FBQUdBQVRBVENBVENUR0NUR0FBQ0NDR0dUQ0FUVEdUVEdBQ1RHQ0FDVFRDQ0FHQ0NBR0dDQUdUR0dDR0dBVENBQVRBVEdDQ0dBQ1RUQ0NUR0NHQ0dBQUdHVFRUQ0NBQ0dUVEdUQ0FDR0NDR0FBQ0FBQUFBR0dDQ0FBQ0FDQ1RDR1RDR0FUR0dBVFRBQ1RBQ0NBVENBR1RUR0NHVFRBVEdDR0dDR0dBQUFBQVRDR0NHR0NHVEFBQVRUQ0NUQ1RBVEdBQ0FDQ0FBQ0dUVEdHR0dDVEdHQVRUQUNDR0dUVEFUVEdBR0FBQ0NUR0NBQUFBVENUR0NUQ0FBVEdDQUdHVEdBVEdBQVRUR0FUR0FBR1RUQ1RDQ0dHQ0FUVENUVFRDVEdHVFRDR0NUVFRDVFRBVEFUQ1RUQ0dHQ0FBR1RUQUdBQ0dBQUdHQ0FUR0FHVFRUQ1QiCiNQZXJmb3JtIHRoZSBSZXZlcnNlIENvbXBsZW1lbnQgb2YgdGhlIEROQSBTZXF1ZW5jZQp0a3Rvb2xzOjpyZXZjb21wKGRuYXNlcSkKYGBgCgozLiAgKldyaXRlIGEgcHJvZ3JhbSB0byB0cmFuc2xhdGUgKiphbiBvcGVuIHJlYWRpbmcgZnJhbWUqKiAoT1JGKSBpbnRvIGFuIGFtaW5vIGFjaWQgc2VxdWVuY2UuKgoKICAgIEFzc3VtaW5nIHRoZSBwcm9tcHQgaXMgaW5zdHJ1Y3RpbmcgdGhlIHN0dWRlbnQgdG8gY2hvb3NlICoqT05FKiogT1JGLCBJIGNob29zZSB0byB0cmFuc2xhdGUgdGhlIGxvbmdlc3QgT1JGIGluIHRoZSBmaXJzdCByZWFkaW5nIGZyYW1lIChiYXNlcyA4MDUgLSAxNzczKS4KCmBgYHtyfQojTG9hZCBOZWNlc3NhcnkgTGlicmFyeQpsaWJyYXJ5KHNlcWlucikKI1NlbGVjdGlvbiBvZiB3aGF0IE9SRiBJIHdhbnQgdG8gVHJhbnNsYXRlIApzdWJzdHJpbmcoZG5hc2VxLDgwNSwxNzczKQojUHJlcGFyaW5nIFNlbGVjdGVkIE9SRiBmb3IgVHJhbnNsYXRpb24KVFJBTlNPUkYgPC0gczJjKCJBVEdBQ0dBVEdDQ0FBQ0dBQVRDQUFUR0NDQ0dUR0dDR0dBVEdDQUdHVFRDQVRDQUNBVFRBQ0dDQUFHQUFBQ0dDQ0dHQVRHVEdUR0dBQ0dBVFRUQ0NDVEdBVFRUR0NDQUNHQVRUQUNUQUNDQ0FUQVRDR0NHQ0NHR0dDQUFUQVRHQ0FDVEdHVENBR0NHVEdDR0FBQUNUQ0FHQ0dHQUFBQ0dDVEdDR1RHQ1RUQUNBQ0NBVFRUQ0NUQ0NBQ0dDQ0FHR0NHVEdBR1RHQUFUQVRBVENBQ0NDVEdBQ0NHVEdDR0dDR0dBVFRHQVRHQUNHR1RHVENHR0NUQ0NDQUdUR0dDVEdBQ0dDR0NHQVRHVEFBQUFDR0NHR1RHQVRUQVRDVENUR0dDVFRUQ0dHQUNHQ0dBVEdHR0dHQUFUVFRBQ0NUR0NHQUNHQVRBQUFHQ0FHQUFHQVRBQUFUVENDVEdUVEdDVEdHQ0dHQ0FHR0NUR0NHR0NHVENBQ0dDQ0dBVFRBVEdUQ0dBVEdDR1RDR0NUR0dDVFRHQ0dBQUdBQUNDR1RDQ0FDQUdHQ0NHQVRHVEdDR0dHVEdBVENUQUNBQUNHVEdDR1RBQ0dDQ0dDQUdHQVRHVFRBVFRUVENHQ0NHQVRHQUdUR0dDR1RBQUNUQVRDQ0dHVEFBQ0dDVEdHVEdHQ0FHQUFBQVRBQUNHVFRBQ0NHQUFHR0NUVFRBVENHQ1RHR1RDR1RDVENBQ1RDR0NHQUFDVEdDVEdHQ0FHR1RHVEFDQ1RHQUNUVEFHQ1RUQ0FDR1RBQ0NHVEdBVEdBQ0NUR0NHR0NDQ0dHQ1RDQ0dUQVRBVEdHQVRUR0dHVEFHQUdDQUdHQUFHVEdBQUFHQ0dDVENHR0NHVEdBQ0dDR1RUVENUVFRBQUFHQUdBQUFUVENUVENBQ0NDQ0FHVEFHQ0FHQUFHQ0dHQ0dBQ0NBR0NHR1RDVEdBQUFUVENBQ0NBQUFDVEdDQUFDQ0dHQ0FDR0FHQUFUVFRUQUNHQ0NDQ0dHVFRHR0NBQ0NBQ0dDVEFDVEdHQUdHQ0dDVEdHQUFBR0NBQVRBQUNHVFRDQ0dHVFRHVENHQ1RHQ0NUR0NDR1RHQ0dHR1RHVFRUR0NHR0NUR0NUR1RBQUdBQ0FBQUFHVEdHVFRUQ0NHR1RHQUFUQVRBQ0dHVEdBR0NBR0NBQ0FBVEdBQ0dDVEdBQ0NHQUNHQ0NHQUFBVENHQ1RHQUFHR1RUQUNHVEFDVEdHQ0NUR0NUQ0NUR0NDQVRDQ0dDQUdHR0dHQVRUVEdHVFRDVENHQ0FUQUEiKQojVHJhbnNsYXRpbmcgdGhlIE9SRgp0cmFuc2xhdGUoc2VxPVRSQU5TT1JGKQpgYGAKCjQuICAqV3JpdGUgYSBwcm9ncmFtIHRoYXQgc2VhcmNoZXMgZm9yIEVjb1JJIHNpdGVzIChHQUFUVEMpIGFuZCByZXBvcnRzIHRoZWlyIHBvc2l0aW9uIGluIHRoZVwKICAgIHNlcXVlbmNlLioKCmBgYHtyfQojTG9hZCBOZWNlc3NhcnkgTGlicmFyeQpsaWJyYXJ5KHN0cmluZ3IpCiNDb252ZXJ0IEROQSBTZXF1ZW5jZSB0byBTdHJpbmcgCkROQV9fMSA8LSB0b1N0cmluZyhkbmFzZXEpCiNTZWFyY2ggYW5kIFJlcG9ydCBFY29SSSBTaXRlCmhpdGNvdW50ZXIgPC0gZnVuY3Rpb24oKSB7CgppZiAoRE5BX18xPT0iR0FBVFRDIikKCnJldHVybigxKSAmIHdoaWNoKHN0cnNwbGl0KEROQV9fMSwiIilbWzFdXT09IkdBQVRUQyIpCgplbHNlIAoKcmV0dXJuKDApCgp9CgojUHJpbnQgUmVzdWx0cyAKcHJpbnQoaGl0Y291bnRlcigpKQpgYGAKCkFjY29yZGluZyB0byBteSBjb2RlLCB0aGVyZSBhcmUgKip6ZXJvKiogRWNvUkkgc2l0ZXMgcHJlc2VudCBpbiB0aGUgZGF0YSBzZXF1ZW5jZS4K