References and resources

Sequencing data is of an individual (NA12892) from the 1000 genome project.

http://www.internationalgenome.org/1000-genomes-browsers/

Machine

Google Cloud Platform (GCP), 4 vCPUs, 15 GB RAM

Google Cloud Platform (GCP), 8 vCPUs, 30 GB RAM

Google Cloud Platform (GCP), 24 vCPUs, 32 GB RAM

AWS: c5.18xlarge (72 vCPUs, 144 GB RAM)

AWS: m5.24xlarge (96 vCPUs, 384 GiB RAM)

Voltage-gated sodium channel subunit genes

There are 14 voltage-gated sodium channel subunit genes in humans.

Ten of them code for alpha subunits.

Four of them code for beta subunits.

Chromosomal co-ordinates of voltage-gated sodium channel subunits

scn1a/Nav1.1            Chromosome 2, NC_000002.12 (165989160..166149216, complement)

scn2a/Nav1.2            Chromosome 2, NC_000002.12 (165208056..165392310)

scn3a/Nav1.3            Chromosome 2, NC_000002.12 (165087520..165204295, complement)

scn4a/Nav1.4            Chromosome 17, NC_000017.11 (63938554..63972918, complement)

scn5a/Nav1.5            Chromosome 3, NC_000003.12 (38548061..38649673, complement)

scn7a/Nax               Chromosome 2, NC_000002.12 (166403573..166494264, complement)

scn8a/Nav1.6            Chromosome 12, NC_000012.12 (51589958..51812864)

scn9a/Nav1.7            Chromosome 2, NC_000002.12 (166195185..166375987, complement)

scn10a/Nav1.8           Chromosome 3, NC_000003.12 (38697110..38794010, complement)

scn11a/Nav1.9           Chromosome 3, NC_000003.12 (38845764..39051945, complement)


scn1b                   Chromosome 19, NC_000019.10 (35030688..35040449)

scn2b                   Chromosome 11, NC_000011.10 (118162804..118176622, complement)

scn3b                   Chromosome 11, NC_000011.10 (123629187..123654607, complement)

scn4b                   Chromosome 11, NC_000011.10 (118133377..118152915, complement)

Chromosome-wise voltage-gated sodium channel subunits

scn1a           Chromosome 2, NC_000002.12 (165989160..166149216, complement)
scn2a               Chromosome 2, NC_000002.12 (165208056..165392310)
scn3a               Chromosome 2, NC_000002.12 (165087520..165204295, complement)
scn7a              Chromosome 2, NC_000002.12 (166403573..166494264, complement)
scn9a               Chromosome 2, NC_000002.12 (166195185..166375987, complement)

scn5a               Chromosome 3, NC_000003.12 (38548061..38649673, complement)
scn10a       Chromosome 3, NC_000003.12 (38697110..38794010, complement)
scn11a              Chromosome 3, NC_000003.12 (38845764..39051945, complement)

scn2b              Chromosome 11, NC_000011.10 (118162804..118176622, complement)
scn3b              Chromosome 11, NC_000011.10 (123629187..123654607, complement)
scn4b              Chromosome 11, NC_000011.10 (118133377..118152915, complement)

scn8a               Chromosome 12, NC_000012.12 (51589958..51812864)

scn4a               Chromosome 17, NC_000017.11 (63938554..63972918, complement)

scn1b           Chromosome 19, NC_000019.10 (35030688..35040449)

Download analysis datasets (for individual NA12892) from 1000 genome project site

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR622/SRR622459/SRR622459_1.fastq.gz

~/gatk-data-ref$ wget -bqc ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR622/SRR622459/SRR622459_2.fastq.gz

Directory content

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 68029335546 Apr 30 15:50 SRR622459_1.fastq.gz

-rw-rw-r– 1 ubuntu ubuntu 69219443789 Apr 30 15:54 SRR622459_2.fastq.gz

Check data content

~/gatk-data-ref$ zcat SRR622459_1.fastq.gz | head -n 2

@SRR622459.1 1/1

GTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGTTAGGGAGATCGGAAG

~/gatk-data-ref$ zcat SRR622459_2.fastq.gz | head -n 2

@SRR622459.1 1/2

CCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACCCTAACAGATCGGAAG

Download reference (fasta, fasta index, dictionary) and BWA index (.alt, .amb, .ann, .bwt, .pac and .sa) files

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta .

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.dict .

        ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.fai .


 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.alt .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.amb .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.ann .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.bwt .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.pac .

 
 ~/gatk-data-ref$ aws s3 cp s3://broad-references/hg38/v0/Homo_sapiens_assembly38.fasta.64.sa .

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 581712 Jan 6 2016 Homo_sapiens_assembly38.dict

-rw-rw-r– 1 ubuntu ubuntu 3249912778 Jan 5 2016 Homo_sapiens_assembly38.fasta

-rw-rw-r– 1 ubuntu ubuntu 487553 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.alt

-rw-rw-r– 1 ubuntu ubuntu 20199 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.amb

-rw-rw-r– 1 ubuntu ubuntu 455474 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.ann

-rw-rw-r– 1 ubuntu ubuntu 3217347004 Nov 6 23:47 Homo_sapiens_assembly38.fasta.64.bwt

-rw-rw-r– 1 ubuntu ubuntu 804336731 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.pac

-rw-rw-r– 1 ubuntu ubuntu 1608673512 Nov 6 23:48 Homo_sapiens_assembly38.fasta.64.sa

-rw-rw-r– 1 ubuntu ubuntu 160928 Dec 1 2016 Homo_sapiens_assembly38.fasta.fai

Align the sequences to the reference genome sequence using BWA

Alignment (bwa mem) will lead to a SAM (sequence alignment file) file, that will be converted to a BAM file (using samtools view).

~/gatk-data-ref$ bwa mem -M -t 96 -R ‘@RG:SRR622459:Q:illumina:FCC1H7WACXX:NA12892’ Homo_sapiens_assembly38.fasta SRR622459_1.fastq.gz SRR622459_2.fastq.gz | samtools view -Sbh -o SRR622459_1.bam

main] Version: 0.7.17-r1188

[main] CMD: bwa mem -M -t 96 -R @RG:SRR622459:Q:illumina:FCC1H7WACXX:NA12892 Homo_sapiens_assembly38.fasta SRR622459_1.fastq.gz SRR622459_2.fastq.gz

[main] Real time: 22680.497 sec; CPU: 1393622.442 sec

Generate alignment statistics

~/gatk-data-ref$ sambamba flagstat -p SRR622459_1.bam

sambamba 0.6.9 by Artem Tarasov and Pjotr Prins (C) 2012-2019

2467570854 + 0 in total (QC-passed reads + QC-failed reads)

10585005 + 0 secondary

11607447 + 0 supplementary

0 + 0 duplicates

2364732708 + 0 mapped (95.83%:N/A)

2445378402 + 0 paired in sequencing

1222689201 + 0 read1

1222689201 + 0 read2

2254822518 + 0 properly paired (92.21%:N/A)

2313333564 + 0 with itself and mate mapped

29206692 + 0 singletons (1.19%:N/A)

27935066 + 0 with mate mapped to a different chr

16234878 + 0 with mate mapped to a different chr (mapQ>=5)

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 200710884147 May 2 11:47 SRR622459_1.bam

-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai

-rw-rw-r– 1 ubuntu ubuntu 4257061759 May 2 15:43 SRR622459_1.sorted.chr20.bam

Sort and index the BAM file

~/gatk-data-ref$ samtools sort -@ 96 -m 3G SRR622459_1.bam -o SRR622459_1.sorted.bam

[bam_sort_core] merging from 192 files and 96 in-memory blocks…

~/gatk-data-ref$ samtools index -@ 96 SRR622459_1.sorted.bam

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 192007490886 May 2 13:42 SRR622459_1.sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 9775584 May 2 14:05 SRR622459_1.sorted.bam.bai

Validate the BAM file (for GATK analysis)

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -M SUMMARY -O summary-SRR622459_1.sorted

~/gatk-data-ref$ cat summary-SRR622459_1.sorted

## HISTOGRAM    java.lang.String

Error Type                          Count

ERROR:INVALID_TAG_NM            245,444

Fix the error reported above

~/gatk-data-ref$ gatk SetNmMdAndUqTags -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.bam -O SRR622459_1.sorted.NmMdTqTgs.bam

Using GATK jar /home/b0d2647/miniconda3/share/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar

validate the BAM file again and create an index

~/gatk-data-ref$ gatk ValidateSamFile -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.bam -M SUMMARY -O summary-SRR622459_1.sorted.NmMdTqTgs

[Sat May 04 19:07:58 UTC 2019] picard.sam.ValidateSamFile done. Elapsed time: 331.75 minutes.

…………..

Tool returned: 0

~/gatk-data-ref$ cat summary-SRR622459_1.sorted.NmMdTqTgs

No errors found

~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.bam

Mark duplicates and index the BAM file created

~/gatk-data-ref$ nohup gatk MarkDuplicates -I SRR622459_1.sorted.NmMdTqTgs.bam -O SRR622459_1.sorted.NmMdTqTgs.mdup.bam -M SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt >& 59_1.fxNm.log &

~/gatk-data-ref$ tail 59_1.fxNm.log

……………..

[Sun May 05 05:03:29 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 680.30 minutes.

Runtime.totalMemory()=3481796608

Tool returned: 0

Using GATK jar /home/b0d2647/miniconda3/share/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar

Running: java -Dsamjdk.use_async_io_read_samtools=false -Dsamjdk.use_async_io_write_samtools=true -Dsamjdk.use_async_io_write_tribble=false -Dsamjdk.compression_level=2 -jar /home/b0d2647/miniconda3/sha re/gatk4-4.1.2.0-0/gatk-package-4.1.2.0-local.jar MarkDuplicates -I SRR622459_1.sorted.NmMdTqTgs.bam -O SRR622459_1.sorted.NmMdTqTgs.mdup.bam -M SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt

~/gatk-data-ref$ head SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt


LIBRARY UNPAIRED_READS_EXAMINED READ_PAIRS_EXAMINED     SECONDARY_OR_SUPPLEMENTARY_RDS  UNMAPPED_READS  UNPAIRED_READ_DUPLICATES        READ_PAIR_DUPLICATES    READ_PAIR_OPTICAL_DUPLICATES    PERCENT_DUPLICATION  ESTIMATED_LIBRARY_SIZE

Q       29206692        1156666782      22192452        102838146       14050105        58665347        0       0.056085        11013720153

~/gatk-data-ref$ samtools index SRR622459_1.sorted.NmMdTqTgs.bam

Additional directory contents

~/gatk-data-ref$ ls -l

-rw-rw-r– 1 b0d2647 b0d2647 691071 May 5 05:03 59_1.fxNm.log

-rw-rw-r– 1 b0d2647 b0d2647 260704633123 May 4 10:23 SRR622459_1.sorted.NmMdTqTgs.bam

-rw-rw-r– 1 b0d2647 b0d2647 9786952 May 4 18:05 SRR622459_1.sorted.NmMdTqTgs.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 5565 May 5 05:03 SRR622459_1.sorted.NmMdTqTgs.dupMetrics.txt

-rw-rw-r– 1 b0d2647 b0d2647 263473284570 May 5 05:03 SRR622459_1.sorted.NmMdTqTgs.mdup.bam

-rw-rw-r– 1 b0d2647 b0d2647 9817616 May 5 09:59 SRR622459_1.sorted.NmMdTqTgs.mdup.bam.bai

-rw-rw-r– 1 b0d2647 b0d2647 16 May 4 19:07 summary-SRR622459_1.sorted.NmMdTqTgs

Base Recalibration

The duplicate marked BAM file is not base recalibrated (before haplotype calling, see below) using gatk BaseRecalibrator and gatk ApplyBQSR as it is time exhaustive.

Haplotype the BAM files as needed using the bash script given below for detecting variation in voltage gated sodium channel subunits

#!/bin/bash

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr2:165989160-166149216 -O SRR622459_1.sorted.NmM
dTqTgs.mdup.scn1a.vcf &> hcall.59_1.scn1a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr2:165208056-165392310 -O SRR622459_1.sorted.NmM
dTqTgs.mdup.scn2a.vcf &> hcall.59_1.scn2a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr2:165087520-165204295 -O SRR622459_1.sorted.NmM
dTqTgs.mdup.scn3a.vcf &> hcall.59_1.scn3a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr2:166403573-166494264 -O SRR622459_1.sorted.NmM
dTqTgs.mdup.scn7a.vcf &> hcall.59_1.scn7a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr2:166195185-166375987 -O SRR622459_1.sorted.NmM
dTqTgs.mdup.scn9a.vcf &> hcall.59_1.scn9a.log &



gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr3:38548061-38649673 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf &> hcall.59_1.scn5a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr3:38697110-38794010 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf &> hcall.59_1.scn10a.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr3:38845764-39051945 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf &> hcall.59_1.scn11a.log &



gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr11:118162804-118176622 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf &> hcall.59_1.scn2b.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr11:123629187-123654607 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf &> hcall.59_1.scn3b.log &

gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr11:118133377-118152915 -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf &> hcall.59_1.scn4b.log &



gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr12:51589958-51812864  -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf &> hcall.59_1.scn8a.log &


gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr17:63938554-63972918  -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf &> hcall.59_1.scn4a.log &


gatk HaplotypeCaller -R Homo_sapiens_assembly38.fasta -I SRR622459_1.sorted.NmMdTqTgs.mdup.bam -L chr19:35030688-35040449  -O SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf &> hcall.59_1.scn1b.log &

Additional directory contents

~/gatk-data-ref$ ls -l


-rw-rw-r-- 1 b0d2647 b0d2647       204909 May  5 14:47 SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       123814 May  5 14:47 SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       242692 May  5 14:49 SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       123875 May  5 14:49 SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       259643 May  5 11:54 SRR622459_1.sorted.NmMdTqTgs.mdup.scn1a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       197187 May  5 11:54 SRR622459_1.sorted.NmMdTqTgs.mdup.scn1a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       177291 May  5 14:54 SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       114343 May  5 14:54 SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       236893 May  5 11:57 SRR622459_1.sorted.NmMdTqTgs.mdup.scn2a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       155459 May  5 11:57 SRR622459_1.sorted.NmMdTqTgs.mdup.scn2a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       177127 May  5 14:50 SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       115006 May  5 14:50 SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       178557 May  5 11:58 SRR622459_1.sorted.NmMdTqTgs.mdup.scn3a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       115402 May  5 11:58 SRR622459_1.sorted.NmMdTqTgs.mdup.scn3a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       189976 May  5 14:52 SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       115073 May  5 14:52 SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       182634 May  5 14:58 SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       114612 May  5 14:58 SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       183280 May  5 14:53 SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       114991 May  5 14:53 SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       212612 May  5 14:44 SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       123771 May  5 14:44 SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       198907 May  5 11:59 SRR622459_1.sorted.NmMdTqTgs.mdup.scn7a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       134920 May  5 11:59 SRR622459_1.sorted.NmMdTqTgs.mdup.scn7a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       226542 May  5 14:56 SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       120588 May  5 14:56 SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf.idx

-rw-rw-r-- 1 b0d2647 b0d2647       250724 May  5 12:00 SRR622459_1.sorted.NmMdTqTgs.mdup.scn9a.vcf
-rw-rw-r-- 1 b0d2647 b0d2647       197300 May  5 12:00 SRR622459_1.sorted.NmMdTqTgs.mdup.scn9a.vcf.idx

SCN1a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn1a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn1a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn1a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key                                  [4]value
SN      0       number of samples:                      1
SN      0       number of records:                      424
SN      0       number of no-ALTs:                      0
SN      0       number of SNPs:                         351
SN      0       number of MNPs:                         0
SN      0       number of indels:                       73
SN      0       number of others:                       0
SN      0       number of multiallelic sites:           6
SN      0       number of multiallelic SNP sites:       3

SCN2a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn2a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn2a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn2a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      276
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 228
SN      0       number of MNPs: 0
SN      0       number of indels:       48
SN      0       number of others:       0
SN      0       number of multiallelic sites:   2
SN      0       number of multiallelic SNP sites:       0

SCN3a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn3a.vcf | less

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn3a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn3a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key                                  [4]value
SN      0       number of samples:      1
SN      0       number of records:      16
SN      0       number of no-ALTs:      0
SN      0       number of SNPs:                         10
SN      0       number of MNPs: 0
SN      0       number of indels:       6
SN      0       number of others:       0
SN      0       number of multiallelic sites:   1
SN      0       number of multiallelic SNP sites:       0

SCN4a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn4a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      38
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 28
SN      0       number of MNPs: 0
SN      0       number of indels:       10
SN      0       number of others:       0
SN      0       number of multiallelic sites:   0
SN      0       number of multiallelic SNP sites:       0

SCN5a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn5a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      183
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 156
SN      0       number of MNPs: 0
SN      0       number of indels:       27
SN      0       number of others:       0
SN      0       number of multiallelic sites:   4
SN      0       number of multiallelic SNP sites:       0

SCN7a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn7a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn7a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn7a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      105
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 90
SN      0       number of MNPs: 0
SN      0       number of indels:       15
SN      0       number of others:       0
SN      0       number of multiallelic sites:   1
SN      0       number of multiallelic SNP sites:       0

SCN8a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn8a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      226
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 183
SN      0       number of MNPs: 0
SN      0       number of indels:       44
SN      0       number of others:       0
SN      0       number of multiallelic sites:   3
SN      0       number of multiallelic SNP sites:       0

SCN9a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn9a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn9a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn9a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      376
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 306
SN      0       number of MNPs: 0
SN      0       number of indels:       72
SN      0       number of others:       1
SN      0       number of multiallelic sites:   10
SN      0       number of multiallelic SNP sites:       0

SCN10a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn10a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      137
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 122
SN      0       number of MNPs: 0
SN      0       number of indels:       15
SN      0       number of others:       0
SN      0       number of multiallelic sites:   3
SN      0       number of multiallelic SNP sites:       1

SCN11a gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn11a.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      308
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 258
SN      0       number of MNPs: 0
SN      0       number of indels:       51
SN      0       number of others:       0
SN      0       number of multiallelic sites:   3
SN      0       number of multiallelic SNP sites:       1

SCN1b gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn1b.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      10
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 8
SN      0       number of MNPs: 0
SN      0       number of indels:       2
SN      0       number of others:       0
SN      0       number of multiallelic sites:   0
SN      0       number of multiallelic SNP sites:       0

SCN2b gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn2b.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      9
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 7
SN      0       number of MNPs: 0
SN      0       number of indels:       2
SN      0       number of others:       0
SN      0       number of multiallelic sites:   0
SN      0       number of multiallelic SNP sites:       0

SCN3b gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn3b.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      66
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 58
SN      0       number of MNPs: 0
SN      0       number of indels:       8
SN      0       number of others:       1
SN      0       number of multiallelic sites:   1
SN      0       number of multiallelic SNP sites:       0

SCN4b gene variants

~/gatk-data-ref$ bcftools stats SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf

# This file was produced by bcftools stats (1.9+htslib-1.9) and can be plotted using plot-vcfstats.
# The command line was: bcftools stats  SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf
#
# Definition of sets:
# ID    [2]id   [3]tab-separated file names
ID      0       SRR622459_1.sorted.NmMdTqTgs.mdup.scn4b.vcf
# SN, Summary numbers:
#   number of records   .. number of data rows in the VCF
#   number of no-ALTs   .. reference-only sites, ALT is either "." or identical to REF
#   number of SNPs      .. number of rows with a SNP
#   number of MNPs      .. number of rows with a MNP, such as CC>TT
#   number of indels    .. number of rows with an indel
#   number of others    .. number of rows with other type, for example a symbolic allele or
#                          a complex substitution, such as ACT>TCGA
#   number of multiallelic sites     .. number of rows with multiple alternate alleles
#   number of multiallelic SNP sites .. number of rows with multiple alternate alleles, all SNPs
# 
#   Note that rows containing multiple types will be counted multiple times, in each
#   counter. For example, a row with a SNP and an indel increments both the SNP and
#   the indel counter.
# 
# SN    [2]id   [3]key  [4]value
SN      0       number of samples:      1
SN      0       number of records:      37
SN      0       number of no-ALTs:      0
SN      0       number of SNPs: 32
SN      0       number of MNPs: 0
SN      0       number of indels:       5
SN      0       number of others:       0
SN      0       number of multiallelic sites:   0
SN      0       number of multiallelic SNP sites:       0
LS0tDQp0aXRsZTogIkdlcm1saW5lIHZhcmlhdGlvbnMgaW4gdm9sdGFnZS1nYXRlZCBzb2RpdW0gY2hhbm5lbCBzdWJ1bml0IGdlbmVzIChTQ04vTmF2KSBvZiBhbiBpbmRpdmlkdWFsIg0KYXV0aG9yOiAiQmhhZ2lyYXRoaSBEYXNoIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyMgUmVmZXJlbmNlcyBhbmQgcmVzb3VyY2VzDQoNClNlcXVlbmNpbmcgZGF0YSBpcyBvZiBhbiBpbmRpdmlkdWFsIChOQTEyODkyKSBmcm9tIHRoZSAxMDAwIGdlbm9tZSBwcm9qZWN0Lg0KDQpodHRwOi8vd3d3LmludGVybmF0aW9uYWxnZW5vbWUub3JnLzEwMDAtZ2Vub21lcy1icm93c2Vycy8NCg0KDQoNCg0KIyMgTWFjaGluZQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDQgdkNQVXMsIDE1IEdCIFJBTQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDggdkNQVXMsIDMwIEdCIFJBTQ0KDQpHb29nbGUgQ2xvdWQgUGxhdGZvcm0gKEdDUCksIDI0IHZDUFVzLCAzMiBHQiBSQU0NCg0KQVdTOiBjNS4xOHhsYXJnZSAoNzIgdkNQVXMsIDE0NCBHQiBSQU0pDQoNCkFXUzogbTUuMjR4bGFyZ2UgKDk2IHZDUFVzLCAzODQgR2lCIFJBTSkNCg0KDQoNCiMjIFZvbHRhZ2UtZ2F0ZWQgc29kaXVtIGNoYW5uZWwgc3VidW5pdCBnZW5lcw0KDQoNClRoZXJlIGFyZSAxNCB2b2x0YWdlLWdhdGVkIHNvZGl1bSBjaGFubmVsIHN1YnVuaXQgZ2VuZXMgaW4gaHVtYW5zLg0KDQpUZW4gb2YgdGhlbSBjb2RlIGZvciBhbHBoYSBzdWJ1bml0cy4NCg0KRm91ciBvZiB0aGVtIGNvZGUgZm9yIGJldGEgc3VidW5pdHMuIA0KDQoNCiMjIENocm9tb3NvbWFsIGNvLW9yZGluYXRlcyBvZiB2b2x0YWdlLWdhdGVkIHNvZGl1bSBjaGFubmVsIHN1YnVuaXRzDQoNCg0KYGBgDQpzY24xYS9OYXYxLjEgICAgICAgICAgICBDaHJvbW9zb21lIDIsIE5DXzAwMDAwMi4xMiAoMTY1OTg5MTYwLi4xNjYxNDkyMTYsIGNvbXBsZW1lbnQpDQoNCnNjbjJhL05hdjEuMiAgICAgICAgICAgIENocm9tb3NvbWUgMiwgTkNfMDAwMDAyLjEyICgxNjUyMDgwNTYuLjE2NTM5MjMxMCkNCg0Kc2NuM2EvTmF2MS4zICAgICAgICAgICAgQ2hyb21vc29tZSAyLCBOQ18wMDAwMDIuMTIgKDE2NTA4NzUyMC4uMTY1MjA0Mjk1LCBjb21wbGVtZW50KQ0KDQpzY240YS9OYXYxLjQgICAgICAgICAgICBDaHJvbW9zb21lIDE3LCBOQ18wMDAwMTcuMTEgKDYzOTM4NTU0Li42Mzk3MjkxOCwgY29tcGxlbWVudCkNCg0Kc2NuNWEvTmF2MS41ICAgICAgICAgICAgQ2hyb21vc29tZSAzLCBOQ18wMDAwMDMuMTIgKDM4NTQ4MDYxLi4zODY0OTY3MywgY29tcGxlbWVudCkNCg0Kc2NuN2EvTmF4ICAgICAgICAgICAgICAgQ2hyb21vc29tZSAyLCBOQ18wMDAwMDIuMTIgKDE2NjQwMzU3My4uMTY2NDk0MjY0LCBjb21wbGVtZW50KQ0KDQpzY244YS9OYXYxLjYgICAgICAgICAgICBDaHJvbW9zb21lIDEyLCBOQ18wMDAwMTIuMTIgKDUxNTg5OTU4Li41MTgxMjg2NCkNCg0Kc2NuOWEvTmF2MS43ICAgICAgICAgICAgQ2hyb21vc29tZSAyLCBOQ18wMDAwMDIuMTIgKDE2NjE5NTE4NS4uMTY2Mzc1OTg3LCBjb21wbGVtZW50KQ0KDQpzY24xMGEvTmF2MS44ICAgICAgICAgICBDaHJvbW9zb21lIDMsIE5DXzAwMDAwMy4xMiAoMzg2OTcxMTAuLjM4Nzk0MDEwLCBjb21wbGVtZW50KQ0KDQpzY24xMWEvTmF2MS45ICAgICAgICAgICBDaHJvbW9zb21lIDMsIE5DXzAwMDAwMy4xMiAoMzg4NDU3NjQuLjM5MDUxOTQ1LCBjb21wbGVtZW50KQ0KDQoNCnNjbjFiICAgICAgICAgICAgICAgICAgIENocm9tb3NvbWUgMTksIE5DXzAwMDAxOS4xMCAoMzUwMzA2ODguLjM1MDQwNDQ5KQ0KDQpzY24yYiAgICAgICAgICAgICAgICAgICBDaHJvbW9zb21lIDExLCBOQ18wMDAwMTEuMTAgKDExODE2MjgwNC4uMTE4MTc2NjIyLCBjb21wbGVtZW50KQ0KDQpzY24zYiAgICAgICAgICAgICAgICAgICBDaHJvbW9zb21lIDExLCBOQ18wMDAwMTEuMTAgKDEyMzYyOTE4Ny4uMTIzNjU0NjA3LCBjb21wbGVtZW50KQ0KDQpzY240YiAgICAgICAgICAgICAgICAgICBDaHJvbW9zb21lIDExLCBOQ18wMDAwMTEuMTAgKDExODEzMzM3Ny4uMTE4MTUyOTE1LCBjb21wbGVtZW50KQ0KDQpgYGANCg0KIyMgQ2hyb21vc29tZS13aXNlIHZvbHRhZ2UtZ2F0ZWQgc29kaXVtIGNoYW5uZWwgc3VidW5pdHMNCg0KYGBgDQpzY24xYSAgICAgICAgICAgQ2hyb21vc29tZSAyLCBOQ18wMDAwMDIuMTIgKDE2NTk4OTE2MC4uMTY2MTQ5MjE2LCBjb21wbGVtZW50KQ0Kc2NuMmEgICAgICAgICAgICAgICBDaHJvbW9zb21lIDIsIE5DXzAwMDAwMi4xMiAoMTY1MjA4MDU2Li4xNjUzOTIzMTApDQpzY24zYSAgICAgICAgICAgICAgIENocm9tb3NvbWUgMiwgTkNfMDAwMDAyLjEyICgxNjUwODc1MjAuLjE2NTIwNDI5NSwgY29tcGxlbWVudCkNCnNjbjdhICAgICAgICAgICAgICBDaHJvbW9zb21lIDIsIE5DXzAwMDAwMi4xMiAoMTY2NDAzNTczLi4xNjY0OTQyNjQsIGNvbXBsZW1lbnQpDQpzY245YSAgICAgICAgICAgICAgIENocm9tb3NvbWUgMiwgTkNfMDAwMDAyLjEyICgxNjYxOTUxODUuLjE2NjM3NTk4NywgY29tcGxlbWVudCkNCg0Kc2NuNWEgICAgICAgICAgICAgICBDaHJvbW9zb21lIDMsIE5DXzAwMDAwMy4xMiAoMzg1NDgwNjEuLjM4NjQ5NjczLCBjb21wbGVtZW50KQ0Kc2NuMTBhICAgICAgIENocm9tb3NvbWUgMywgTkNfMDAwMDAzLjEyICgzODY5NzExMC4uMzg3OTQwMTAsIGNvbXBsZW1lbnQpDQpzY24xMWEgICAgICAgICAgICAgIENocm9tb3NvbWUgMywgTkNfMDAwMDAzLjEyICgzODg0NTc2NC4uMzkwNTE5NDUsIGNvbXBsZW1lbnQpDQoNCnNjbjJiICAgICAgICAgICAgICBDaHJvbW9zb21lIDExLCBOQ18wMDAwMTEuMTAgKDExODE2MjgwNC4uMTE4MTc2NjIyLCBjb21wbGVtZW50KQ0Kc2NuM2IgICAgICAgICAgICAgIENocm9tb3NvbWUgMTEsIE5DXzAwMDAxMS4xMCAoMTIzNjI5MTg3Li4xMjM2NTQ2MDcsIGNvbXBsZW1lbnQpDQpzY240YiAgICAgICAgICAgICAgQ2hyb21vc29tZSAxMSwgTkNfMDAwMDExLjEwICgxMTgxMzMzNzcuLjExODE1MjkxNSwgY29tcGxlbWVudCkNCg0Kc2NuOGEgICAgICAgICAgICAgICBDaHJvbW9zb21lIDEyLCBOQ18wMDAwMTIuMTIgKDUxNTg5OTU4Li41MTgxMjg2NCkNCg0Kc2NuNGEgICAgICAgICAgICAgICBDaHJvbW9zb21lIDE3LCBOQ18wMDAwMTcuMTEgKDYzOTM4NTU0Li42Mzk3MjkxOCwgY29tcGxlbWVudCkNCg0Kc2NuMWIgICAgICAgICAgIENocm9tb3NvbWUgMTksIE5DXzAwMDAxOS4xMCAoMzUwMzA2ODguLjM1MDQwNDQ5KQ0KDQoNCmBgYA0KDQoNCiMjIERvd25sb2FkIGFuYWx5c2lzIGRhdGFzZXRzIChmb3IgaW5kaXZpZHVhbCBOQTEyODkyKSBmcm9tIDEwMDAgZ2Vub21lIHByb2plY3Qgc2l0ZQ0KDQp+L2dhdGstZGF0YS1yZWYkIHdnZXQgLWJxYyBmdHA6Ly9mdHAuc3JhLmViaS5hYy51ay92b2wxL2Zhc3RxL1NSUjYyMi9TUlI2MjI0NTkvU1JSNjIyNDU5XzEuZmFzdHEuZ3oNCg0Kfi9nYXRrLWRhdGEtcmVmJCB3Z2V0IC1icWMgZnRwOi8vZnRwLnNyYS5lYmkuYWMudWsvdm9sMS9mYXN0cS9TUlI2MjIvU1JSNjIyNDU5L1NSUjYyMjQ1OV8yLmZhc3RxLmd6DQoNCg0KDQoNCiMjIERpcmVjdG9yeSBjb250ZW50DQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSA2ODAyOTMzNTU0NiBBcHIgMzAgMTU6NTAgU1JSNjIyNDU5XzEuZmFzdHEuZ3oNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgNjkyMTk0NDM3ODkgQXByIDMwIDE1OjU0IFNSUjYyMjQ1OV8yLmZhc3RxLmd6DQoNCg0KDQojIyBDaGVjayBkYXRhIGNvbnRlbnQNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCB6Y2F0IFNSUjYyMjQ1OV8xLmZhc3RxLmd6IHwgaGVhZCAtbiAyDQoNCkBTUlI2MjI0NTkuMSAxLzENCg0KR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR1RUQUdHR0FHQVRDR0dBQUcNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgemNhdCBTUlI2MjI0NTlfMi5mYXN0cS5neiB8IGhlYWQgLW4gMg0KDQpAU1JSNjIyNDU5LjEgMS8yDQoNCkNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNDQ1RBQUNBR0FUQ0dHQUFHDQoNCg0KDQoNCg0KDQojIyBEb3dubG9hZCByZWZlcmVuY2UgKGZhc3RhLCBmYXN0YSBpbmRleCwgZGljdGlvbmFyeSkgYW5kIEJXQSBpbmRleCAoLmFsdCwgLmFtYiwgLmFubiwgLmJ3dCwgLnBhYyBhbmQgLnNhKSBmaWxlcw0KDQpgYGANCiAgICAgICAgfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLg0KDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QgLg0KDQogICAgICAgIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaSAuDQoNCg0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFsdCAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbWIgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uIC4NCg0KIA0KIH4vZ2F0ay1kYXRhLXJlZiQgYXdzIHMzIGNwIHMzOi8vYnJvYWQtcmVmZXJlbmNlcy9oZzM4L3YwL0hvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmJ3dCAuDQoNCiANCiB+L2dhdGstZGF0YS1yZWYkIGF3cyBzMyBjcCBzMzovL2Jyb2FkLXJlZmVyZW5jZXMvaGczOC92MC9Ib21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5wYWMgLg0KDQogDQogfi9nYXRrLWRhdGEtcmVmJCBhd3MgczMgY3AgczM6Ly9icm9hZC1yZWZlcmVuY2VzL2hnMzgvdjAvSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2EgLg0KDQpgYGANCg0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgICAgIH4vZ2F0ay1kYXRhLXJlZiQgbHMgLWwNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICA1ODE3MTIgSmFuICA2ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmRpY3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDMyNDk5MTI3NzggSmFuICA1ICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgNDg3NTUzIE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5hbHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgMjAxOTkgTm92ICA2IDIzOjQ3IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LmFtYg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDQ1NTQ3NCBOb3YgIDYgMjM6NDcgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuYW5uDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAzMjE3MzQ3MDA0IE5vdiAgNiAyMzo0NyBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YS42NC5id3QNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICA4MDQzMzY3MzEgTm92ICA2IDIzOjQ4IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLjY0LnBhYw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTYwODY3MzUxMiBOb3YgIDYgMjM6NDggSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEuNjQuc2ENCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAxNjA5MjggRGVjICAxICAyMDE2IEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhLmZhaQ0KDQoNCg0KIyMgQWxpZ24gdGhlIHNlcXVlbmNlcyB0byB0aGUgcmVmZXJlbmNlIGdlbm9tZSBzZXF1ZW5jZSB1c2luZyBCV0EgDQoNCkFsaWdubWVudCAoYndhIG1lbSkgd2lsbCBsZWFkIHRvIGEgU0FNIChzZXF1ZW5jZSBhbGlnbm1lbnQgZmlsZSkgZmlsZSwgdGhhdCB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIEJBTSBmaWxlICh1c2luZyBzYW10b29scyB2aWV3KS4NCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGJ3YSBtZW0gLU0gLXQgOTYgLVIgJ0BSR1x0SUQ6U1JSNjIyNDU5XHRMQjpRXHRQTDppbGx1bWluYVx0UFU6RkNDMUg3V0FDWFhcdFNNOk5BMTI4OTInIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIFNSUjYyMjQ1OV8xLmZhc3RxLmd6IFNSUjYyMjQ1OV8yLmZhc3RxLmd6IHwgc2FtdG9vbHMgdmlldyAtU2JoIC1vIFNSUjYyMjQ1OV8xLmJhbQ0KDQptYWluXSBWZXJzaW9uOiAwLjcuMTctcjExODgNCg0KW21haW5dIENNRDogYndhIG1lbSAtTSAtdCA5NiAtUiBAUkdcdElEOlNSUjYyMjQ1OVx0TEI6UVx0UEw6aWxsdW1pbmFcdFBVOkZDQzFIN1dBQ1hYXHRTTTpOQTEyODkyIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIFNSUjYyMjQ1OV8xLmZhc3RxLmd6IFNSUjYyMjQ1OV8yLmZhc3RxLmd6DQoNClttYWluXSBSZWFsIHRpbWU6IDIyNjgwLjQ5NyBzZWM7IENQVTogMTM5MzYyMi40NDIgc2VjDQoNCg0KIyMgR2VuZXJhdGUgYWxpZ25tZW50IHN0YXRpc3RpY3MNCg0KIyMjIyAgfi9nYXRrLWRhdGEtcmVmJCBzYW1iYW1iYSBmbGFnc3RhdCAtcCBTUlI2MjI0NTlfMS5iYW0gDQoNCnNhbWJhbWJhIDAuNi45IGJ5IEFydGVtIFRhcmFzb3YgYW5kIFBqb3RyIFByaW5zIChDKSAyMDEyLTIwMTkNCg0KYGBgDQoyNDY3NTcwODU0ICsgMCBpbiB0b3RhbCAoUUMtcGFzc2VkIHJlYWRzICsgUUMtZmFpbGVkIHJlYWRzKQ0KDQoxMDU4NTAwNSArIDAgc2Vjb25kYXJ5DQoNCjExNjA3NDQ3ICsgMCBzdXBwbGVtZW50YXJ5DQoNCjAgKyAwIGR1cGxpY2F0ZXMNCg0KMjM2NDczMjcwOCArIDAgbWFwcGVkICg5NS44MyU6Ti9BKQ0KDQoyNDQ1Mzc4NDAyICsgMCBwYWlyZWQgaW4gc2VxdWVuY2luZw0KDQoxMjIyNjg5MjAxICsgMCByZWFkMQ0KDQoxMjIyNjg5MjAxICsgMCByZWFkMg0KDQoyMjU0ODIyNTE4ICsgMCBwcm9wZXJseSBwYWlyZWQgKDkyLjIxJTpOL0EpDQoNCjIzMTMzMzM1NjQgKyAwIHdpdGggaXRzZWxmIGFuZCBtYXRlIG1hcHBlZA0KDQoyOTIwNjY5MiArIDAgc2luZ2xldG9ucyAoMS4xOSU6Ti9BKQ0KDQoyNzkzNTA2NiArIDAgd2l0aCBtYXRlIG1hcHBlZCB0byBhIGRpZmZlcmVudCBjaHINCg0KMTYyMzQ4NzggKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyIChtYXBRPj01KQ0KDQpgYGANCg0KIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDIwMDcxMDg4NDE0NyBNYXkgIDIgMTE6NDcgU1JSNjIyNDU5XzEuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE5MjAwNzQ5MDg4NiBNYXkgIDIgMTM6NDIgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDk3NzU1ODQgTWF5ICAyIDE0OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0uYmFpDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgNDI1NzA2MTc1OSBNYXkgIDIgMTU6NDMgU1JSNjIyNDU5XzEuc29ydGVkLmNocjIwLmJhbQ0KDQoNCg0KIyMgU29ydCBhbmQgaW5kZXggdGhlIEJBTSBmaWxlDQoNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIHNhbXRvb2xzIHNvcnQgLUAgOTYgLW0gM0cgU1JSNjIyNDU5XzEuYmFtIC1vIFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0gDQoNCltiYW1fc29ydF9jb3JlXSBtZXJnaW5nIGZyb20gMTkyIGZpbGVzIGFuZCA5NiBpbi1tZW1vcnkgYmxvY2tzLi4uDQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgaW5kZXggLUAgOTYgU1JSNjIyNDU5XzEuc29ydGVkLmJhbQ0KDQoNCg0KIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGxzIC1sDQoNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTkyMDA3NDkwODg2IE1heSAgMiAxMzo0MiBTUlI2MjI0NTlfMS5zb3J0ZWQuYmFtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgOTc3NTU4NCBNYXkgIDIgMTQ6MDUgU1JSNjIyNDU5XzEuc29ydGVkLmJhbS5iYWkNCg0KDQoNCg0KIyMgVmFsaWRhdGUgdGhlIEJBTSBmaWxlIChmb3IgR0FUSyBhbmFseXNpcykNCg0KDQojIyMjICB+L2dhdGstZGF0YS1yZWYkIGdhdGsgVmFsaWRhdGVTYW1GaWxlIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZA0KDQoNCiMjIyMgIH4vZ2F0ay1kYXRhLXJlZiQgY2F0IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkDQoNCmBgYA0KIyMgSElTVE9HUkFNCWphdmEubGFuZy5TdHJpbmcNCg0KRXJyb3IgVHlwZQkgICAgICAgICAgICAgICAgICAgICAgICBDb3VudA0KDQpFUlJPUjpJTlZBTElEX1RBR19OTQkgICAgICAgIDI0NSw0NDQNCg0KYGBgDQoNCg0KDQojIyBGaXggdGhlIGVycm9yIHJlcG9ydGVkIGFib3ZlDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBnYXRrIFNldE5tTWRBbmRVcVRhZ3MgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLmJhbSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQpVc2luZyBHQVRLIGphciAvaG9tZS9iMGQyNjQ3L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphcg0KDQoNCiMjIHZhbGlkYXRlIHRoZSBCQU0gZmlsZSBhZ2FpbiBhbmQgY3JlYXRlIGFuIGluZGV4DQoNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgZ2F0ayBWYWxpZGF0ZVNhbUZpbGUgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0gLU0gU1VNTUFSWSAtTyBzdW1tYXJ5LVNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MNCg0KDQpbU2F0IE1heSAwNCAxOTowNzo1OCBVVEMgMjAxOV0gcGljYXJkLnNhbS5WYWxpZGF0ZVNhbUZpbGUgZG9uZS4gRWxhcHNlZCB0aW1lOiAzMzEuNzUgbWludXRlcy4NCg0KLi4uLi4uLi4uLi4uLi4NCg0KVG9vbCByZXR1cm5lZDogMA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBjYXQgc3VtbWFyeS1TUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzIA0KDQpObyBlcnJvcnMgZm91bmQNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgc2FtdG9vbHMgaW5kZXggU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0NCg0KDQoNCg0KIyMgTWFyayBkdXBsaWNhdGVzIGFuZCBpbmRleCB0aGUgQkFNIGZpbGUgY3JlYXRlZA0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBub2h1cCBnYXRrIE1hcmtEdXBsaWNhdGVzIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtIC1PIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5iYW0gLU0gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5kdXBNZXRyaWNzLnR4dCA+JiA1OV8xLmZ4Tm0ubG9nICYNCg0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgdGFpbCA1OV8xLmZ4Tm0ubG9nIA0KDQouLi4uLi4uLi4uLi4uLi4uLg0KDQpbU3VuIE1heSAwNSAwNTowMzoyOSBVVEMgMjAxOV0gcGljYXJkLnNhbS5tYXJrZHVwbGljYXRlcy5NYXJrRHVwbGljYXRlcyBkb25lLiBFbGFwc2VkIHRpbWU6IDY4MC4zMCBtaW51dGVzLg0KDQpSdW50aW1lLnRvdGFsTWVtb3J5KCk9MzQ4MTc5NjYwOA0KDQpUb29sIHJldHVybmVkOiAwDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL2IwZDI2NDcvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMi4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4yLjAtbG9jYWwuamFyDQoNClJ1bm5pbmc6DQogICAgamF2YSAtRHNhbWpkay51c2VfYXN5bmNfaW9fcmVhZF9zYW10b29scz1mYWxzZSAtRHNhbWpkay51c2VfYXN5bmNfaW9fd3JpdGVfc2FtdG9vbHM9dHJ1ZSAtRHNhbWpkay51c2VfYXN5bmNfaW9fd3JpdGVfdHJpYmJsZT1mYWxzZSAtRHNhbWpkay5jb21wcmVzc2lvbl9sZXZlbD0yIC1qYXIgL2hvbWUvYjBkMjY0Ny9taW5pY29uZGEzL3NoYQ0KcmUvZ2F0azQtNC4xLjIuMC0wL2dhdGstcGFja2FnZS00LjEuMi4wLWxvY2FsLmphciBNYXJrRHVwbGljYXRlcyAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1NIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQNCg0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBoZWFkIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuZHVwTWV0cmljcy50eHQgDQoNCmBgYA0KDQpMSUJSQVJZIFVOUEFJUkVEX1JFQURTX0VYQU1JTkVEIFJFQURfUEFJUlNfRVhBTUlORUQgICAgIFNFQ09OREFSWV9PUl9TVVBQTEVNRU5UQVJZX1JEUyAgVU5NQVBQRURfUkVBRFMgIFVOUEFJUkVEX1JFQURfRFVQTElDQVRFUyAgICAgICAgUkVBRF9QQUlSX0RVUExJQ0FURVMgICAgUkVBRF9QQUlSX09QVElDQUxfRFVQTElDQVRFUyAgICBQRVJDRU5UX0RVUExJQ0FUSU9OICBFU1RJTUFURURfTElCUkFSWV9TSVpFDQoNClEgICAgICAgMjkyMDY2OTIgICAgICAgIDExNTY2NjY3ODIgICAgICAyMjE5MjQ1MiAgICAgICAgMTAyODM4MTQ2ICAgICAgIDE0MDUwMTA1ICAgICAgICA1ODY2NTM0NyAgICAgICAgMCAgICAgICAwLjA1NjA4NSAgICAgICAgMTEwMTM3MjAxNTMNCg0KYGBgDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBzYW10b29scyBpbmRleCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLmJhbQ0KDQoNCg0KDQojIyBBZGRpdGlvbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDY5MTA3MSBNYXkgIDUgMDU6MDMgNTlfMS5meE5tLmxvZw0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MDcwNDYzMzEyMyBNYXkgIDQgMTA6MjMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5iYW0NCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgIDk3ODY5NTIgTWF5ICA0IDE4OjA1IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MuYmFtLmJhaQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICAgNTU2NSBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5kdXBNZXRyaWNzLnR4dA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDI2MzQ3MzI4NDU3MCBNYXkgIDUgMDU6MDMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbQ0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgOTgxNzYxNiBNYXkgIDUgMDk6NTkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbS5iYWkNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAgICAgMTYgTWF5ICA0IDE5OjA3IHN1bW1hcnktU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncw0KDQoNCiMjIEJhc2UgUmVjYWxpYnJhdGlvbg0KDQpUaGUgZHVwbGljYXRlIG1hcmtlZCBCQU0gZmlsZSBpcyBub3QgYmFzZSByZWNhbGlicmF0ZWQgKGJlZm9yZSBoYXBsb3R5cGUgY2FsbGluZywgc2VlIGJlbG93KSB1c2luZyBnYXRrIEJhc2VSZWNhbGlicmF0b3IgYW5kIGdhdGsgQXBwbHlCUVNSIGFzIGl0IGlzIHRpbWUgZXhoYXVzdGl2ZS4gDQoNCg0KDQojIyBIYXBsb3R5cGUgdGhlIEJBTSBmaWxlcyBhcyBuZWVkZWQgdXNpbmcgdGhlIGJhc2ggc2NyaXB0IGdpdmVuIGJlbG93IGZvciBkZXRlY3RpbmcgdmFyaWF0aW9uIGluIHZvbHRhZ2UgZ2F0ZWQgc29kaXVtIGNoYW5uZWwgc3VidW5pdHMNCg0KYGBgDQojIS9iaW4vYmFzaA0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjI6MTY1OTg5MTYwLTE2NjE0OTIxNiAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NDQpkVHFUZ3MubWR1cC5zY24xYS52Y2YgJj4gaGNhbGwuNTlfMS5zY24xYS5sb2cgJg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjI6MTY1MjA4MDU2LTE2NTM5MjMxMCAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NDQpkVHFUZ3MubWR1cC5zY24yYS52Y2YgJj4gaGNhbGwuNTlfMS5zY24yYS5sb2cgJg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjI6MTY1MDg3NTIwLTE2NTIwNDI5NSAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NDQpkVHFUZ3MubWR1cC5zY24zYS52Y2YgJj4gaGNhbGwuNTlfMS5zY24zYS5sb2cgJg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjI6MTY2NDAzNTczLTE2NjQ5NDI2NCAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NDQpkVHFUZ3MubWR1cC5zY243YS52Y2YgJj4gaGNhbGwuNTlfMS5zY243YS5sb2cgJg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjI6MTY2MTk1MTg1LTE2NjM3NTk4NyAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NDQpkVHFUZ3MubWR1cC5zY245YS52Y2YgJj4gaGNhbGwuNTlfMS5zY245YS5sb2cgJg0KDQoNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIzOjM4NTQ4MDYxLTM4NjQ5NjczIC1PIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY241YS52Y2YgJj4gaGNhbGwuNTlfMS5zY241YS5sb2cgJg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjM6Mzg2OTcxMTAtMzg3OTQwMTAgLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjEwYS52Y2YgJj4gaGNhbGwuNTlfMS5zY24xMGEubG9nICYNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIzOjM4ODQ1NzY0LTM5MDUxOTQ1IC1PIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24xMWEudmNmICY+IGhjYWxsLjU5XzEuc2NuMTFhLmxvZyAmDQoNCg0KDQpnYXRrIEhhcGxvdHlwZUNhbGxlciAtUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSAtSSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuYmFtIC1MIGNocjExOjExODE2MjgwNC0xMTgxNzY2MjIgLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjJiLnZjZiAmPiBoY2FsbC41OV8xLnNjbjJiLmxvZyAmDQoNCmdhdGsgSGFwbG90eXBlQ2FsbGVyIC1SIEhvbW9fc2FwaWVuc19hc3NlbWJseTM4LmZhc3RhIC1JIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5iYW0gLUwgY2hyMTE6MTIzNjI5MTg3LTEyMzY1NDYwNyAtTyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuM2IudmNmICY+IGhjYWxsLjU5XzEuc2NuM2IubG9nICYNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIxMToxMTgxMzMzNzctMTE4MTUyOTE1IC1PIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY240Yi52Y2YgJj4gaGNhbGwuNTlfMS5zY240Yi5sb2cgJg0KDQoNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIxMjo1MTU4OTk1OC01MTgxMjg2NCAgLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjhhLnZjZiAmPiBoY2FsbC41OV8xLnNjbjhhLmxvZyAmDQoNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIxNzo2MzkzODU1NC02Mzk3MjkxOCAgLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjRhLnZjZiAmPiBoY2FsbC41OV8xLnNjbjRhLmxvZyAmDQoNCg0KZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgLUkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLmJhbSAtTCBjaHIxOTozNTAzMDY4OC0zNTA0MDQ0OSAgLU8gU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjFiLnZjZiAmPiBoY2FsbC41OV8xLnNjbjFiLmxvZyAmDQoNCmBgYA0KDQoNCiMjIEFkZGl0aW9uYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBscyAtbA0KDQpgYGANCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAyMDQ5MDkgTWF5ICA1IDE0OjQ3IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24xMGEudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDEyMzgxNCBNYXkgIDUgMTQ6NDcgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjEwYS52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMjQyNjkyIE1heSAgNSAxNDo0OSBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMTFhLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxMjM4NzUgTWF5ICA1IDE0OjQ5IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24xMWEudmNmLmlkeA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDI1OTY0MyBNYXkgIDUgMTE6NTQgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjFhLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxOTcxODcgTWF5ICA1IDExOjU0IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24xYS52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTc3MjkxIE1heSAgNSAxNDo1NCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMWIudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDExNDM0MyBNYXkgIDUgMTQ6NTQgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjFiLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAyMzY4OTMgTWF5ICA1IDExOjU3IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYS52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTU1NDU5IE1heSAgNSAxMTo1NyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMmEudmNmLmlkeA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDE3NzEyNyBNYXkgIDUgMTQ6NTAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjJiLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxMTUwMDYgTWF5ICA1IDE0OjUwIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYi52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTc4NTU3IE1heSAgNSAxMTo1OCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuM2EudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDExNTQwMiBNYXkgIDUgMTE6NTggU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjNhLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxODk5NzYgTWF5ICA1IDE0OjUyIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24zYi52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTE1MDczIE1heSAgNSAxNDo1MiBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuM2IudmNmLmlkeA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDE4MjYzNCBNYXkgIDUgMTQ6NTggU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjRhLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxMTQ2MTIgTWF5ICA1IDE0OjU4IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY240YS52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTgzMjgwIE1heSAgNSAxNDo1MyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuNGIudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDExNDk5MSBNYXkgIDUgMTQ6NTMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjRiLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAyMTI2MTIgTWF5ICA1IDE0OjQ0IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY241YS52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTIzNzcxIE1heSAgNSAxNDo0NCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuNWEudmNmLmlkeA0KDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDE5ODkwNyBNYXkgIDUgMTE6NTkgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjdhLnZjZg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAxMzQ5MjAgTWF5ICA1IDExOjU5IFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY243YS52Y2YuaWR4DQoNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMjI2NTQyIE1heSAgNSAxNDo1NiBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuOGEudmNmDQotcnctcnctci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDEyMDU4OCBNYXkgIDUgMTQ6NTYgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjhhLnZjZi5pZHgNCg0KLXJ3LXJ3LXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgICAyNTA3MjQgTWF5ICA1IDEyOjAwIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY245YS52Y2YNCi1ydy1ydy1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgICAgMTk3MzAwIE1heSAgNSAxMjowMCBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuOWEudmNmLmlkeA0KDQoNCmBgYA0KDQojIyBTQ04xYSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMWEudmNmDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjFhLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjFhLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgICAgICAgICAgICAgICAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAgICAgICAgICAgICAgICAgNDI0DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgMzUxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAgICAgICAgICAgICAgICAgNzMNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgICAgICAgICA2DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDMNCmBgYA0KDQoNCiMjIFNDTjJhIGdlbmUgdmFyaWFudHMNCg0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYS52Y2YNCg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYS52Y2YNCiMNCiMgRGVmaW5pdGlvbiBvZiBzZXRzOg0KIyBJRCAgICBbMl1pZCAgIFszXXRhYi1zZXBhcmF0ZWQgZmlsZSBuYW1lcw0KSUQgICAgICAwICAgICAgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYS52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMjc2DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAyMjgNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDQ4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQoNCmBgYA0KDQoNCg0KDQoNCg0KIyMgU0NOM2EgZ2VuZSB2YXJpYW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYmNmdG9vbHMgc3RhdHMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjNhLnZjZiB8IGxlc3MNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCiMgVGhlIGNvbW1hbmQgbGluZSB3YXM6IGJjZnRvb2xzIHN0YXRzICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuM2EudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuM2EudmNmDQojIFNOLCBTdW1tYXJ5IG51bWJlcnM6DQojICAgbnVtYmVyIG9mIHJlY29yZHMgICAuLiBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBWQ0YNCiMgICBudW1iZXIgb2Ygbm8tQUxUcyAgIC4uIHJlZmVyZW5jZS1vbmx5IHNpdGVzLCBBTFQgaXMgZWl0aGVyICIuIiBvciBpZGVudGljYWwgdG8gUkVGDQojICAgbnVtYmVyIG9mIFNOUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgU05QDQojICAgbnVtYmVyIG9mIE1OUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgTU5QLCBzdWNoIGFzIENDPlRUDQojICAgbnVtYmVyIG9mIGluZGVscyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGFuIGluZGVsDQojICAgbnVtYmVyIG9mIG90aGVycyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG90aGVyIHR5cGUsIGZvciBleGFtcGxlIGEgc3ltYm9saWMgYWxsZWxlIG9yDQojICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBsZXggc3Vic3RpdHV0aW9uLCBzdWNoIGFzIEFDVD5UQ0dBDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlcyAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcw0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMsIGFsbCBTTlBzDQojIA0KIyAgIE5vdGUgdGhhdCByb3dzIGNvbnRhaW5pbmcgbXVsdGlwbGUgdHlwZXMgd2lsbCBiZSBjb3VudGVkIG11bHRpcGxlIHRpbWVzLCBpbiBlYWNoDQojICAgY291bnRlci4gRm9yIGV4YW1wbGUsIGEgcm93IHdpdGggYSBTTlAgYW5kIGFuIGluZGVsIGluY3JlbWVudHMgYm90aCB0aGUgU05QIGFuZA0KIyAgIHRoZSBpbmRlbCBjb3VudGVyLg0KIyANCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMTYNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6ICAgICAgICAgICAgICAgICAgICAgICAgIDEwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6IDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICA2DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQpgYGANCg0KDQojIyBTQ040YSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuNGEudmNmDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY240YS52Y2YNCiMNCiMgRGVmaW5pdGlvbiBvZiBzZXRzOg0KIyBJRCAgICBbMl1pZCAgIFszXXRhYi1zZXBhcmF0ZWQgZmlsZSBuYW1lcw0KSUQgICAgICAwICAgICAgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY240YS52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMzgNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDI4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6IDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAxMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMA0KYGBgDQoNCg0KDQoNCg0KIyMgU0NONWEgZ2VuZSB2YXJpYW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYmNmdG9vbHMgc3RhdHMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjVhLnZjZg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY241YS52Y2YNCiMNCiMgRGVmaW5pdGlvbiBvZiBzZXRzOg0KIyBJRCAgICBbMl1pZCAgIFszXXRhYi1zZXBhcmF0ZWQgZmlsZSBuYW1lcw0KSUQgICAgICAwICAgICAgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY241YS52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMTgzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAxNTYNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDI3DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgNA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQoNCmBgYA0KDQoNCg0KDQojIyBTQ043YSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuN2EudmNmDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjdhLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjdhLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICBbNF12YWx1ZQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAxMDUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDkwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6IDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAxNQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMA0KDQpgYGANCg0KDQojIyBTQ044YSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuOGEudmNmDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjhhLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjhhLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICBbNF12YWx1ZQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAyMjYNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDE4Mw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgNDQNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KIyMgU0NOOWEgZ2VuZSB2YXJpYW50cw0KDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYmNmdG9vbHMgc3RhdHMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjlhLnZjZg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY245YS52Y2YNCiMNCiMgRGVmaW5pdGlvbiBvZiBzZXRzOg0KIyBJRCAgICBbMl1pZCAgIFszXXRhYi1zZXBhcmF0ZWQgZmlsZSBuYW1lcw0KSUQgICAgICAwICAgICAgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY245YS52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMzc2DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAzMDYNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDcyDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMTANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczogICAgICAgMA0KDQpgYGANCg0KDQoNCiMjIFNDTjEwYSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMTBhLnZjZg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24xMGEudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMTBhLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICBbNF12YWx1ZQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAxMzcNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDEyMg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgMTUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAzDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDENCg0KYGBgDQoNCg0KDQoNCiMjIFNDTjExYSBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMTFhLnZjZg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCiMgVGhlIGNvbW1hbmQgbGluZSB3YXM6IGJjZnRvb2xzIHN0YXRzICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMTFhLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjExYS52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgMzA4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAyNTgNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDUxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAxDQoNCmBgYA0KDQoNCg0KDQojIyBTQ04xYiBnZW5lIHZhcmlhbnRzDQoNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMWIudmNmDQoNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCiMgVGhlIGNvbW1hbmQgbGluZSB3YXM6IGJjZnRvb2xzIHN0YXRzICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMWIudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMWIudmNmDQojIFNOLCBTdW1tYXJ5IG51bWJlcnM6DQojICAgbnVtYmVyIG9mIHJlY29yZHMgICAuLiBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBWQ0YNCiMgICBudW1iZXIgb2Ygbm8tQUxUcyAgIC4uIHJlZmVyZW5jZS1vbmx5IHNpdGVzLCBBTFQgaXMgZWl0aGVyICIuIiBvciBpZGVudGljYWwgdG8gUkVGDQojICAgbnVtYmVyIG9mIFNOUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgU05QDQojICAgbnVtYmVyIG9mIE1OUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgTU5QLCBzdWNoIGFzIENDPlRUDQojICAgbnVtYmVyIG9mIGluZGVscyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGFuIGluZGVsDQojICAgbnVtYmVyIG9mIG90aGVycyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG90aGVyIHR5cGUsIGZvciBleGFtcGxlIGEgc3ltYm9saWMgYWxsZWxlIG9yDQojICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBsZXggc3Vic3RpdHV0aW9uLCBzdWNoIGFzIEFDVD5UQ0dBDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlcyAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcw0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMsIGFsbCBTTlBzDQojIA0KIyAgIE5vdGUgdGhhdCByb3dzIGNvbnRhaW5pbmcgbXVsdGlwbGUgdHlwZXMgd2lsbCBiZSBjb3VudGVkIG11bHRpcGxlIHRpbWVzLCBpbiBlYWNoDQojICAgY291bnRlci4gRm9yIGV4YW1wbGUsIGEgcm93IHdpdGggYSBTTlAgYW5kIGFuIGluZGVsIGluY3JlbWVudHMgYm90aCB0aGUgU05QIGFuZA0KIyAgIHRoZSBpbmRlbCBjb3VudGVyLg0KIyANCiMgU04gICAgWzJdaWQgICBbM11rZXkgIFs0XXZhbHVlDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgIDEwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG5vLUFMVHM6ICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiA4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6IDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAyDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQoNCmBgYA0KDQoNCg0KIyMgU0NOMmIgZ2VuZSB2YXJpYW50cw0KIyMjIyB+L2dhdGstZGF0YS1yZWYkIGJjZnRvb2xzIHN0YXRzIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24yYi52Y2YNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCiMgVGhlIGNvbW1hbmQgbGluZSB3YXM6IGJjZnRvb2xzIHN0YXRzICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMmIudmNmDQojDQojIERlZmluaXRpb24gb2Ygc2V0czoNCiMgSUQgICAgWzJdaWQgICBbM110YWItc2VwYXJhdGVkIGZpbGUgbmFtZXMNCklEICAgICAgMCAgICAgICBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuMmIudmNmDQojIFNOLCBTdW1tYXJ5IG51bWJlcnM6DQojICAgbnVtYmVyIG9mIHJlY29yZHMgICAuLiBudW1iZXIgb2YgZGF0YSByb3dzIGluIHRoZSBWQ0YNCiMgICBudW1iZXIgb2Ygbm8tQUxUcyAgIC4uIHJlZmVyZW5jZS1vbmx5IHNpdGVzLCBBTFQgaXMgZWl0aGVyICIuIiBvciBpZGVudGljYWwgdG8gUkVGDQojICAgbnVtYmVyIG9mIFNOUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgU05QDQojICAgbnVtYmVyIG9mIE1OUHMgICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGEgTU5QLCBzdWNoIGFzIENDPlRUDQojICAgbnVtYmVyIG9mIGluZGVscyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIGFuIGluZGVsDQojICAgbnVtYmVyIG9mIG90aGVycyAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG90aGVyIHR5cGUsIGZvciBleGFtcGxlIGEgc3ltYm9saWMgYWxsZWxlIG9yDQojICAgICAgICAgICAgICAgICAgICAgICAgICBhIGNvbXBsZXggc3Vic3RpdHV0aW9uLCBzdWNoIGFzIEFDVD5UQ0dBDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlcyAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcw0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMsIGFsbCBTTlBzDQojIA0KIyAgIE5vdGUgdGhhdCByb3dzIGNvbnRhaW5pbmcgbXVsdGlwbGUgdHlwZXMgd2lsbCBiZSBjb3VudGVkIG11bHRpcGxlIHRpbWVzLCBpbiBlYWNoDQojICAgY291bnRlci4gRm9yIGV4YW1wbGUsIGEgcm93IHdpdGggYSBTTlAgYW5kIGFuIGluZGVsIGluY3JlbWVudHMgYm90aCB0aGUgU05QIGFuZA0KIyAgIHRoZSBpbmRlbCBjb3VudGVyLg0KIyANCiMgU04gICAgWzJdaWQgICBbM11rZXkgIFs0XXZhbHVlDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgIDkNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDcNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDINClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KDQojIyBTQ04zYiBnZW5lIHZhcmlhbnRzDQojIyMjIH4vZ2F0ay1kYXRhLXJlZiQgYmNmdG9vbHMgc3RhdHMgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjNiLnZjZg0KDQpgYGANCiMgVGhpcyBmaWxlIHdhcyBwcm9kdWNlZCBieSBiY2Z0b29scyBzdGF0cyAoMS45K2h0c2xpYi0xLjkpIGFuZCBjYW4gYmUgcGxvdHRlZCB1c2luZyBwbG90LXZjZnN0YXRzLg0KIyBUaGUgY29tbWFuZCBsaW5lIHdhczogYmNmdG9vbHMgc3RhdHMgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24zYi52Y2YNCiMNCiMgRGVmaW5pdGlvbiBvZiBzZXRzOg0KIyBJRCAgICBbMl1pZCAgIFszXXRhYi1zZXBhcmF0ZWQgZmlsZSBuYW1lcw0KSUQgICAgICAwICAgICAgIFNSUjYyMjQ1OV8xLnNvcnRlZC5ObU1kVHFUZ3MubWR1cC5zY24zYi52Y2YNCiMgU04sIFN1bW1hcnkgbnVtYmVyczoNCiMgICBudW1iZXIgb2YgcmVjb3JkcyAgIC4uIG51bWJlciBvZiBkYXRhIHJvd3MgaW4gdGhlIFZDRg0KIyAgIG51bWJlciBvZiBuby1BTFRzICAgLi4gcmVmZXJlbmNlLW9ubHkgc2l0ZXMsIEFMVCBpcyBlaXRoZXIgIi4iIG9yIGlkZW50aWNhbCB0byBSRUYNCiMgICBudW1iZXIgb2YgU05QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBTTlANCiMgICBudW1iZXIgb2YgTU5QcyAgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYSBNTlAsIHN1Y2ggYXMgQ0M+VFQNCiMgICBudW1iZXIgb2YgaW5kZWxzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggYW4gaW5kZWwNCiMgICBudW1iZXIgb2Ygb3RoZXJzICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggb3RoZXIgdHlwZSwgZm9yIGV4YW1wbGUgYSBzeW1ib2xpYyBhbGxlbGUgb3INCiMgICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGxleCBzdWJzdGl0dXRpb24sIHN1Y2ggYXMgQUNUPlRDR0ENCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzICAgICAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzDQojICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXMgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBtdWx0aXBsZSBhbHRlcm5hdGUgYWxsZWxlcywgYWxsIFNOUHMNCiMgDQojICAgTm90ZSB0aGF0IHJvd3MgY29udGFpbmluZyBtdWx0aXBsZSB0eXBlcyB3aWxsIGJlIGNvdW50ZWQgbXVsdGlwbGUgdGltZXMsIGluIGVhY2gNCiMgICBjb3VudGVyLiBGb3IgZXhhbXBsZSwgYSByb3cgd2l0aCBhIFNOUCBhbmQgYW4gaW5kZWwgaW5jcmVtZW50cyBib3RoIHRoZSBTTlAgYW5kDQojICAgdGhlIGluZGVsIGNvdW50ZXIuDQojIA0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAxDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgNjYNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIFNOUHM6IDU4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIE1OUHM6IDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICA4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6ICAgMQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQoNCmBgYA0KDQoNCiMjIFNDTjRiIGdlbmUgdmFyaWFudHMNCiMjIyMgfi9nYXRrLWRhdGEtcmVmJCBiY2Z0b29scyBzdGF0cyBTUlI2MjI0NTlfMS5zb3J0ZWQuTm1NZFRxVGdzLm1kdXAuc2NuNGIudmNmDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjRiLnZjZg0KIw0KIyBEZWZpbml0aW9uIG9mIHNldHM6DQojIElEICAgIFsyXWlkICAgWzNddGFiLXNlcGFyYXRlZCBmaWxlIG5hbWVzDQpJRCAgICAgIDAgICAgICAgU1JSNjIyNDU5XzEuc29ydGVkLk5tTWRUcVRncy5tZHVwLnNjbjRiLnZjZg0KIyBTTiwgU3VtbWFyeSBudW1iZXJzOg0KIyAgIG51bWJlciBvZiByZWNvcmRzICAgLi4gbnVtYmVyIG9mIGRhdGEgcm93cyBpbiB0aGUgVkNGDQojICAgbnVtYmVyIG9mIG5vLUFMVHMgICAuLiByZWZlcmVuY2Utb25seSBzaXRlcywgQUxUIGlzIGVpdGhlciAiLiIgb3IgaWRlbnRpY2FsIHRvIFJFRg0KIyAgIG51bWJlciBvZiBTTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIFNOUA0KIyAgIG51bWJlciBvZiBNTlBzICAgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhIE1OUCwgc3VjaCBhcyBDQz5UVA0KIyAgIG51bWJlciBvZiBpbmRlbHMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBhbiBpbmRlbA0KIyAgIG51bWJlciBvZiBvdGhlcnMgICAgLi4gbnVtYmVyIG9mIHJvd3Mgd2l0aCBvdGhlciB0eXBlLCBmb3IgZXhhbXBsZSBhIHN5bWJvbGljIGFsbGVsZSBvcg0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBjb21wbGV4IHN1YnN0aXR1dGlvbiwgc3VjaCBhcyBBQ1Q+VENHQQ0KIyAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXMgICAgIC4uIG51bWJlciBvZiByb3dzIHdpdGggbXVsdGlwbGUgYWx0ZXJuYXRlIGFsbGVsZXMNCiMgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlcyAuLiBudW1iZXIgb2Ygcm93cyB3aXRoIG11bHRpcGxlIGFsdGVybmF0ZSBhbGxlbGVzLCBhbGwgU05Qcw0KIyANCiMgICBOb3RlIHRoYXQgcm93cyBjb250YWluaW5nIG11bHRpcGxlIHR5cGVzIHdpbGwgYmUgY291bnRlZCBtdWx0aXBsZSB0aW1lcywgaW4gZWFjaA0KIyAgIGNvdW50ZXIuIEZvciBleGFtcGxlLCBhIHJvdyB3aXRoIGEgU05QIGFuZCBhbiBpbmRlbCBpbmNyZW1lbnRzIGJvdGggdGhlIFNOUCBhbmQNCiMgICB0aGUgaW5kZWwgY291bnRlci4NCiMgDQojIFNOICAgIFsyXWlkICAgWzNda2V5ICBbNF12YWx1ZQ0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBzYW1wbGVzOiAgICAgIDENClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgcmVjb3JkczogICAgICAzNw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBuby1BTFRzOiAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogMzINClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgTU5QczogMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBpbmRlbHM6ICAgICAgIDUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygb3RoZXJzOiAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczogICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KDQoNCg0KDQoNCg==