References, resources, data and initial directory contents

STAR: ultrafast universal RNA-seq aligner. Dobin A, Davis CA, Schlesinger F, Drenkow J, Zaleski C, Jha S, Batut P, Chaisson M, Gingeras TR. Bioinformatics. 2013 Jan 1;29(1):15-21. doi: 10.1093/bioinformatics/bts635.

The Genome Analysis Toolkit: a MapReduce framework for analyzing next-generation DNA sequencing data McKenna A, Hanna M, Banks E, Sivachenko A, Cibulskis K, Kernytsky A, Garimella K, Altshuler D, Gabriel S, Daly M, DePristo MA, 2010 GENOME RESEARCH 20:1297-303

http://broadinstitute.github.io/picard/

AWS instance type: r5.2xlarge (64 GB RAM)

~/CTAT-mutation-tutorial$ wget https://data.broadinstitute.org/Trinity/CTAT/mutation/ctat_mutation_demo.tar.gz

~/CTAT-mutation-tutorial$ tar xvf ctat_mutation_demo.tar.gz

~/CTAT-mutation-tutorial$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 9892774 Aug 20 2018 ctat_mutation_demo_1.fastq

-rw-rw-r– 1 ubuntu ubuntu 9892774 Aug 20 2018 ctat_mutation_demo_2.fastq

Obtain Star Index for GRCh38 (pre-built)

~$ tar xvf GRCh38_v27_CTAT_lib_Feb092018.plug-n-play.tar.gz

GRCh38_v27_CTAT_lib_Feb092018/ GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/AnnotFilterRule.pm GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/pfam_domains.dbm GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.fai GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.gtf.mini.sortu GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/blast_pairs.idx GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.gtf.gene_spans GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.gmap.ok GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/ GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/build.ok GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.fromGTF.out.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonGeTrInfo.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SAindex GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/transcriptInfo.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/geneInfo.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbInfo.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/SA GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrStart.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrName.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrLength.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/genomeParameters.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/sjdbList.out.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/Genome GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/chrNameLength.txt GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/exonInfo.tab GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.pep GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dat GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/trans.blast.align_coords.align_coords.dbm GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.gtf GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.cds GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/blast_pairs.idx.prev.1518217631 GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/fusion_annot_lib.idx GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/ref_annot.prot_info.dbm

~$ ls -l GRCh38_v27_CTAT_lib_Feb092018/ctat_genome_lib_build_dir/

-rw-rw-r– 1 ubuntu ubuntu 2839 Feb 23 2018 AnnotFilterRule.pm

-rw-rw-r– 1 ubuntu ubuntu 1400848384 Feb 21 2018 blast_pairs.idx

-rw-rw-r– 1 ubuntu ubuntu 1400848384 Feb 21 2018 blast_pairs.idx.prev.1518217631

-rw-rw-r– 1 ubuntu ubuntu 2320236544 Feb 21 2018 fusion_annot_lib.idx

-rw-rw-r– 1 ubuntu ubuntu 190857216 Feb 23 2018 pfam_domains.dbm

-rw-rw-r– 1 ubuntu ubuntu 108993409 Feb 21 2018 ref_annot.cds

-rw-rw-r– 1 ubuntu ubuntu 1150835305 Feb 21 2018 ref_annot.gtf

-rw-rw-r– 1 ubuntu ubuntu 3933998 Feb 21 2018 ref_annot.gtf.gene_spans

-rw-rw-r– 1 ubuntu ubuntu 49752053 Feb 21 2018 ref_annot.gtf.mini.sortu

-rw-rw-r– 1 ubuntu ubuntu 37597442 Feb 21 2018 ref_annot.pep

-rw-rw-r– 1 ubuntu ubuntu 719781888 Feb 21 2018 ref_annot.prot_info.dbm

-rw-rw-r– 1 ubuntu ubuntu 3139758082 Feb 21 2018 ref_genome.fa

-rw-rw-r– 1 ubuntu ubuntu 788 Feb 21 2018 ref_genome.fa.fai

-rw-rw-r– 1 ubuntu ubuntu 0 Feb 21 2018 ref_genome.fa.gmap.ok

drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 21 2018 ref_genome.fa.star.idx

-rw-rw-r– 1 ubuntu ubuntu 1552146399 Feb 21 2018 trans.blast.align_coords.align_coords.dat

-rw-rw-r– 1 ubuntu ubuntu 4034531328 Feb 21 2018 trans.blast.align_coords.align_coords.dbm

Run STAR to align fastq files to the genome (GRCh38) using StarIndex: First pass

~/CTAT-mutation-tutorial$ STAR –genomeDir ~/ctat_genome_lib_build_dir/ref_genome.fa.star.idx/ –readFilesIn ctat_mutation_demo_1.fastq ctat_mutation_demo_2.fastq –runThreadN 8 –outFileNamePrefix first_al

Mar 30 17:12:42 ….. started STAR run

Mar 30 17:12:42 ….. loading genome

Mar 30 17:15:03 ….. started mapping

Mar 30 17:15:07 ….. finished successfully

Additional files/directories created following the above run

~/CTAT-mutation-tutorial$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 28318272 Mar 30 17:15 first_alAligned.out.sam

-rw-rw-r– 1 ubuntu ubuntu 1834 Mar 30 17:15 first_alLog.final.out

-rw-rw-r– 1 ubuntu ubuntu 18579 Mar 30 17:15 first_alLog.out

-rw-rw-r– 1 ubuntu ubuntu 246 Mar 30 17:15 first_alLog.progress.out

-rw-rw-r– 1 ubuntu ubuntu 36962 Mar 30 17:15 first_alSJ.out.tab

~/CTAT-mutation-tutorial$ head first_alLog.final.out


                                 Started job on |   Mar 30 17:12:42
                             Started mapping on |   Mar 30 17:15:03
                                    Finished on |   Mar 30 17:15:07
       Mapping speed, Million of reads per hour |   57.22

                          Number of input reads |   63580
                      Average input read length |   100
                                    UNIQUE READS:
                   Uniquely mapped reads number |   59777
                        Uniquely mapped reads % |   94.02%

Run STAR aligner using the SJ.out.tab file (Second pass) to generate another Star Index (e.g., hg38starindex2)

~$ STAR –runMode genomeGenerate –genomeDir hg38starindex2/ –genomeFastaFiles ctat_genome_lib_build_dir/ref_genome.fa –sjdbFileChrStartEnd CTAT-mutation-tutorial/first_alSJ.out.tab –runThreadN 16

Mar 30 18:07:50 ….. started STAR run

Mar 30 18:07:50 … starting to generate Genome files

Mar 30 18:09:00 … starting to sort Suffix Array. This may take a long time…

Mar 30 18:09:15 … sorting Suffix Array chunks and saving them to disk…

Mar 30 19:04:16 … loading chunks from disk, packing SA…

Mar 30 19:05:31 … finished generating suffix array

Mar 30 19:05:31 … generating Suffix Array index

Mar 30 19:10:21 … completed Suffix Array index

Mar 30 19:10:21 ….. inserting junctions into the genome indices

Mar 30 19:11:35 … writing Genome to disk …

Mar 30 19:11:37 … writing Suffix Array to disk …

Mar 30 19:12:59 … writing SAindex to disk

Mar 30 19:13:06 ….. finished successfully

~$ ls -l hg38starindex2/

-rw-rw-r– 1 ubuntu ubuntu 3091663986 Mar 30 19:11 Genome

-rw-rw-r– 1 ubuntu ubuntu 20233 Mar 30 17:57 Log.out

-rw-rw-r– 1 ubuntu ubuntu 24237299472 Mar 30 19:12 SA

-rw-rw-r– 1 ubuntu ubuntu 1565873619 Mar 30 19:12 SAindex

drwx—— 2 ubuntu ubuntu 4096 Mar 30 17:40 _STARtmp

-rw-rw-r– 1 ubuntu ubuntu 238 Mar 30 18:08 chrLength.txt

-rw-rw-r– 1 ubuntu ubuntu 138 Mar 30 18:08 chrName.txt

-rw-rw-r– 1 ubuntu ubuntu 376 Mar 30 18:08 chrNameLength.txt

-rw-rw-r– 1 ubuntu ubuntu 273 Mar 30 18:08 chrStart.txt

-rw-rw-r– 1 ubuntu ubuntu 650 Mar 30 19:11 genomeParameters.txt

-rw-rw-r– 1 ubuntu ubuntu 29387 Mar 30 19:10 sjdbInfo.txt

-rw-rw-r– 1 ubuntu ubuntu 25835 Mar 30 19:10 sjdbList.out.tab

2nd-pass alignment

~/CTAT-mutation-tutorial$ STAR –genomeDir ~/hg38starindex2/ –readFilesIn ctat_mutation_demo_1.fastq ctat_mutation_demo_2.fastq –runThreadN 8 –outFileNamePrefix ~/CTAT-mutation-tutorial/second_align/

Mar 30 19:28:14 ….. started STAR run

Mar 30 19:28:14 ….. loading genome

Mar 30 19:28:58 ….. started mapping

Mar 30 19:29:11 ….. finished successfully

Additional files/directories and contents created following the above run

~/CTAT-mutation-tutorial$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 17663 Mar 30 17:32 Log.out

drwx—— 2 ubuntu ubuntu 4096 Mar 30 17:30 _STARtmp

drwxrwxr-x 2 ubuntu ubuntu 4096 Mar 30 19:29 second_align

~/CTAT-mutation-tutorial$ ls -l second_align/

-rw-rw-r– 1 ubuntu ubuntu 28348992 Mar 30 19:29 Aligned.out.sam

-rw-rw-r– 1 ubuntu ubuntu 1835 Mar 30 19:29 Log.final.out

-rw-rw-r– 1 ubuntu ubuntu 18249 Mar 30 19:29 Log.out

-rw-rw-r– 1 ubuntu ubuntu 246 Mar 30 19:29 Log.progress.out

-rw-rw-r– 1 ubuntu ubuntu 36909 Mar 30 19:29 SJ.out.tab

~/CTAT-mutation-tutorial$ head second_align/Log.final.out


                                 Started job on |   Mar 30 19:28:14
                             Started mapping on |   Mar 30 19:28:58
                                    Finished on |   Mar 30 19:29:11
       Mapping speed, Million of reads per hour |   17.61

                          Number of input reads |   63580
                      Average input read length |   100
                                    UNIQUE READS:
                   Uniquely mapped reads number |   59810
                        Uniquely mapped reads % |   94.07%

~/CTAT-mutation-tutorial$ samtools view -h second_align/Aligned.out.sam | head

@HD VN:1.4

@SQ SN:chr1 LN:248956422

@SQ SN:chr2 LN:242193529

@SQ SN:chr3 LN:198295559

@SQ SN:chr4 LN:190214555

@SQ SN:chr5 LN:181538259

@SQ SN:chr6 LN:170805979

@SQ SN:chr7 LN:159345973

@SQ SN:chr8 LN:145138636

@SQ SN:chr9 LN:138394717

Prepare the SAM file for running GATK pipeline (for variant discovery)

Use Picard tool AddOrReplaceReadGroups to sort the file by coordinate, add read group information and conversion to BAM

~/CTAT-mutation-tutorial/second_align$ picard AddOrReplaceReadGroups I=Aligned.out.sam o=ctat_mutation_rg_added_sorted.bam SO=coordinate RGID=123 RGLB=Truseq_SS_Paired RGPL=Illumina RGPU=Hiseq4000 RGSM=ctat_mutation

INFO 2019-03-30 19:56:23 AddOrReplaceReadGroups

********** NOTE: Picard’s command line syntax is changing.


********** For more information, please see:

********** https://github.com/broadinstitute/picard/wiki/Command-Line-Syntax-Transition-For-Users-(Pre-Transition)


********** The command line looks like this in the new syntax: **********

********** AddOrReplaceReadGroups -I Aligned.out.sam -o ctat_mutation_rg_added_sorted.bam -SO coordinate -RGID 123 -RGLB Truseq_SS_Paired -RGPL Illumina -RGPU Hiseq4000 -RGSM ctat_mutation

Additional files/directories created following the above run

~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 7330332 Mar 30 19:56 ctat_mutation_rg_added_sorted.bam

Use picard tool MarkDuplicates to mark duplicated reads

~/CTAT-mutation-tutorial/second_align$ picard MarkDuplicates I=ctat_mutation_rg_added_sorted.bam o=ctat_mutation_dedupped_rg_added_sorted.bam CREATE_INDEX=true VALIDATION_STRINGENCY=SILENT M=output.metrics

INFO 2019-03-30 20:03:45 MarkDuplicates

……………………………

[Sat Mar 30 20:03:53 UTC 2019] picard.sam.markduplicates.MarkDuplicates done. Elapsed time: 0.12 minutes.

Runtime.totalMemory()=649592832

Additional files/directories and contents created following the above run

~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 1437480 Mar 30 20:03 ctat_mutation_dedupped_rg_added_sorted.bai

-rw-rw-r– 1 ubuntu ubuntu 7450734 Mar 30 20:03 ctat_mutation_dedupped_rg_added_sorted.bam

-rw-rw-r– 1 ubuntu ubuntu 2900 Mar 30 20:03 output.metrics

~/CTAT-mutation-tutorial/second_align$ samtools flagstat ctat_mutation_rg_added_sorted.bam

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

15522 + 0 secondary

0 + 0 supplementary

0 + 0 duplicates

142656 + 0 mapped (100.00% : N/A)

127134 + 0 paired in sequencing

63567 + 0 read1

63567 + 0 read2

127134 + 0 properly paired (100.00% : N/A)

127134 + 0 with itself and mate mapped

0 + 0 singletons (0.00% : N/A)

0 + 0 with mate mapped to a different chr

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

~/CTAT-mutation-tutorial/second_align$ samtools flagstat ctat_mutation_dedupped_rg_added_sorted.bam


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

15522 + 0 secondary

0 + 0 supplementary

2444 + 0 duplicates

142656 + 0 mapped (100.00% : N/A)

127134 + 0 paired in sequencing

63567 + 0 read1

63567 + 0 read2

127134 + 0 properly paired (100.00% : N/A)

127134 + 0 with itself and mate mapped

0 + 0 singletons (0.00% : N/A)

0 + 0 with mate mapped to a different chr

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

GATK SplitNCigarReads: Split reads into exon and intron segments

Need a genome index file for the run: The ref_genome.fa file from ctat_genome_lib_build_dir directory was copied to the “second_align” directory and an index was made

~/CTAT-mutation-tutorial/second_align$ samtools faidx ref_genome.fa

Additional files/directories following the above run: ~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 3139758082 Feb 21 2018 ref_genome.fa

-rw-rw-r– 1 ubuntu ubuntu 788 Mar 30 20:58 ref_genome.fa.fai

~/CTAT-mutation-tutorial/second_align$ gatk SplitNCigarReads -R ref_genome.fa -I ctat_mutation_dedupped_rg_added_sorted.bam -O ctat_mutation_split.bam

Using GATK jar /home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.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/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar SplitNCigarReads -R ref_genome.fa -I ctat_mutation_dedupped_rg_added_sorted.bam -O ctat_mutation_split.bam

………………………………..

[March 30, 2019 8:59:26 PM UTC] org.broadinstitute.hellbender.tools.walkers.rnaseq.SplitNCigarReads done. Elapsed time: 0.09 minutes.

Runtime.totalMemory()=1422393344

Additional files/directories following the above run: ~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 1439384 Mar 30 20:59 ctat_mutation_split.bai

-rw-rw-r– 1 ubuntu ubuntu 10714092 Mar 30 20:59 ctat_mutation_split.bam

Perform Base quality Recalibration (BQSR)

dbsnp vcf (dbSNPs for GATK) is needed for the run: Download the vcf and the index file into a directory called “gatk-vcf”

~/CTAT-mutation-tutorial/second_align/gatk-vcf$ wget ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/VCF/GATK/common_all_20180418.vcf.gz

……………………………..

common_all_20180418.vcf.gz 100%[=========================================================================================================>] 1.49G 136MB/s in 13s

~/CTAT-mutation-tutorial/second_align/gatk-vcf$ wget ftp://ftp.ncbi.nlm.nih.gov/snp/organisms/human_9606_b151_GRCh38p7/VCF/GATK/common_all_20180418.vcf.gz.tbi

………………………………..

common_all_20180418.vcf.gz.tbi 100%[=========================================================================================================>] 2.15M 13.1MB/s in 0.2s

Check the contents: ~/CTAT-mutation-tutorial/second_align$ ls -l gatk-vcf/

-rw-rw-r– 1 ubuntu ubuntu 1595848625 Mar 30 21:35 common_all_20180418.vcf.gz

-rw-rw-r– 1 ubuntu ubuntu 2258664 Mar 30 21:36 common_all_20180418.vcf.gz.tbi

~/CTAT-mutation-tutorial/second_align$ gatk BaseRecalibrator -R ref_genome.fa -I ctat_mutation_split.bam –known-sites gatk-vcf/common_all_20180418.vcf.gz -O ctat_mutation_recal_data.table

Using GATK jar /home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.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/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar BaseRecalibrator -R ref_genome.fa -I ctat_mutation_split.bam --known-sites gatk-vcf/common_all_20180418.vcf.gz -O ctat_mutation_recal_data.table

21:37:23.730 INFO NativeLibraryLoader - Loading libgkl_compression.so from

jar:file:/home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar!/com/intel/gkl/native/libgkl_compression.so

21:37:23.875 INFO BaseRecalibrator - ————————————————————

21:37:23.875 INFO BaseRecalibrator - The Genome Analysis Toolkit (GATK) v4.1.1.0

………………………………….

[March 30, 2019 9:37:28 PM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.BaseRecalibrator done. Elapsed time: 0.08 minutes.

Runtime.totalMemory()=1,452,277,760

Verify additional files/directories and contents

~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 364976 Mar 30 21:37 ctat_mutation_recal_data.table

~/CTAT-mutation-tutorial/second_align$ cat ctat_mutation_recal_data.table | head -20

:GATKReport.v1.1:5

:GATKTable:2:17:%s:%s:;

:GATKTable:Arguments:Recalibration argument collection values used in this run

Argument Value

binary_tag_name null

covariate ReadGroupCovariate,QualityScoreCovariate,ContextCovariate,CycleCovariate

default_platform null

deletions_default_quality 45

force_platform null

indels_context_size 3

insertions_default_quality 45

low_quality_tail 2

maximum_cycle_value 500

mismatches_context_size 2

mismatches_default_quality -1

no_standard_covs false

quantizing_levels 16

recalibration_report null

run_without_dbsnp false

solid_nocall_strategy THROW_EXCEPTION

~/CTAT-mutation-tutorial/second_align$ gatk ApplyBQSR -R ref_genome.fa -I ctat_mutation_split.bam –bqsr-recal-file ctat_mutation_recal_data.table -O ctat_mutation_recal_split.bam

Using GATK jar /home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.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/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar ApplyBQSR -R ref_genome.fa -I ctat_mutation_split.bam –bqsr-recal-file ctat_mutation_recal_data.table -O ctat_mutation_recal_split.bam

………………………………………….

[March 30, 2019 9:49:10 PM UTC] org.broadinstitute.hellbender.tools.walkers.bqsr.ApplyBQSR done. Elapsed time: 0.04 minutes.

Runtime.totalMemory()=1231552512

Check content: ~/CTAT-mutation-tutorial/second_align$ samtools view ctat_mutation_recal_split.bam | head -10

HWI-EAS418:5:8:639:1002 163 chr1 633375 1 1S49M = 633415 590361 CGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAGGGCCC ?;99;==>9==<><?=>=><?=>>=<=><==>==>>>>>====<>==;:;PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:0 AS:i:86

HWI-EAS418:5:8:639:1002 419 chr1 633375 1 1S49M = 633415 78 CGCCCATCGTCCTAGAATTAATTCCCCTAAAAATCTTTGAAATAGGGCCC ?;99;==>9==<><?=>=><?=>>=<=><==>==>>>>>====<>==;:;PG:Z:MarkDuplicates RG:Z:123 HI:i:2 nM:i:0 AS:i:85

HWI-EAS418:5:8:639:1002 83 chr1 633415 1 35M15S = 633375 -590361 ATAGGGCCCGTATTTACCCTATAGCACCCCCTCTACCCACCGCCCGTCCC <9<<<==;;=<===<8<=>:=<>=>8;<;;?;>;:;<>:;9=;:7;<7:=<>=>8;<;;?;>;:;<>:;9=;:7;<7:;=6;><>>7<><;>=><98=<:>>:=<:>;<;95=;<=;7&19:<6<PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:1 AS:i:90

HWI-EAS418:3:91:1122:13 147 chr1 891893 60 33M17S = 891886 -227226 CAAGTAATTCTCCTGCCTCAGCCTCCCGAGCAGCTGGGACCACAGGTGTG 19/28::;=<;<5<>;55<8;;5(.:8>;>>>=>>==>5;><>>;<;:Z:chr1,1119095,-,33S17M,60,*; PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:1 AS:i:90

HWI-EAS418:3:87:1409:52 163 chr1 1025555 60 50M = 1025732 245083 TCCTCCCCATTCCTGCCACCCTCTCCTGCCCCCTCCTGACTCCAGGTTCT ?:8;==:<>=>==??=;>>8<>>>>=;>;4<<<==:;>=5=>.:>=:=<=PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:1 AS:i:86

HWI-EAS418:3:87:1409:52 83 chr1 1025732 60 37M13S = 1025555 -245083 GAGGGCGGAGGGCCTACCTCTGTCCCTCCCCACTCACCCCAACTCCCCCC 5:90/:379306<><8=<:>6=9==>:;;6>:<=>8<==>==>;9=87=?SA:Z:chr1,1270625,-,37S13M,60,*; PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:1 AS:i:86

HWI-EAS418:3:100:1425:750 99 chr1 1044211 3 48M2S = 1044406 956 GGCCGTGTGTCTGTGACTTCAGCTGCCAGAGTGTCCCAGGCAGCCCGGGG ==997:=<>=>>><>=>>>=>>=:>><>>=<<<:>=<;>==:>=<=:;/< PG:Z:MarkDuplicates RG:Z:123 HI:i:1 nM:i:0 AS:i:88

HWI-EAS418:3:100:1425:750 355 chr1 1044211 3 48M2S = 1044406 254443 GGCCGTGTGTCTGTGACTTCAGCTGCCAGAGTGTCCCAGGCAGCCCGGGG ==997:=<>=>>><>=>>>=>>=:>><>>=<<<:>=<;>==:>=<=:;/< PG:Z:MarkDuplicates RG:Z:123 HI:i:2 nM:i:0 AS:i:88

Use GATK HaplotypeCaller for call varinats

~/CTAT-mutation-tutorial/second_align$ gatk HaplotypeCaller -R ref_genome.fa -I ctat_mutation_recal_split.bam –dont-use-soft-clipped-bases -stand-call-conf 20 -O ctat_mutation_called_variants.vcf

Using GATK jar /home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.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/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar HaplotypeCaller -R ref_genome.fa -I ctat_mutation_recal_split.bam –dont-use-soft-clipped-bases -stand-call-conf 20 -O ctat_mutation_called_variants.vcf

……………………………………..

22:05:17.737 INFO IntelPairHmm - Available threads: 8

22:05:17.737 INFO IntelPairHmm - Requested threads: 4

22:05:17.737 INFO PairHMM - Using the OpenMP multi-threaded AVX-accelerated native PairHMM implementation

22:05:17.763 INFO ProgressMeter - Starting traversal

22:05:17.764 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute

22:05:27.764 INFO ProgressMeter - chr1:46181894 0.2 154050 924300.0

22:05:37.764 INFO ProgressMeter - chr1:109433646 0.3 364890 1094670.0

22:05:47.764 INFO ProgressMeter - chr1:169209679 0.5 564200 1128400.0

22:05:57.764 INFO ProgressMeter - chr1:230721420 0.7 769280 1153920.0

22:06:07.764 INFO ProgressMeter - chr2:38880301 0.8 959690 1151628.0

22:06:17.764 INFO ProgressMeter - chr2:101685747 1.0 1169080 1169080.0

22:06:27.764 INFO ProgressMeter - chr2:165356603 1.2 1381340 1184005.7

22:06:37.764 INFO ProgressMeter - chr2:228231360 1.3 1590930 1193197.5

……………………………………….

22:12:57.783 INFO ProgressMeter - chr21:35043601 7.7 9377230 1223066.4

22:13:07.783 INFO ProgressMeter - chr22:48149126 7.8 9576660 1222502.9

22:13:17.783 INFO ProgressMeter - chrX:60279636 8.0 9786500 1223264.1

22:13:27.783 INFO ProgressMeter - chrX:123588891 8.2 9997540 1224141.1

22:13:37.783 INFO ProgressMeter - chrY:27365701 8.3 10196940 1223586.3

22:13:43.059 INFO HaplotypeCaller - 25014 read(s) filtered by:

…………………

22:13:43.059 INFO ProgressMeter - chrM:15001 8.4 10296535 1222636.5

……………………………………………

[March 30, 2019 10:13:43 PM UTC] org.broadinstitute.hellbender.tools.walkers.haplotypecaller.HaplotypeCaller done. Elapsed time: 8.43 minutes.

Runtime.totalMemory()=1260388352

Verfy additional contents: ~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 120104 Mar 30 22:13 ctat_mutation_called_variants.vcf

-rw-rw-r– 1 ubuntu ubuntu 23566 Mar 30 22:13 ctat_mutation_called_variants.vcf.idx

Variant filtration in the absence of a “proper reference” using certain criteria

~/CTAT-mutation-tutorial/second_align$ gatk VariantFiltration -R ref_genome.fa -V ctat_mutation_called_variants.vcf -window 35 -cluster 3 –filter-name FS -filter “FS > 30.0” -O ctat_mutation_filtered_called_variants.vcf

Using GATK jar /home/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.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/ubuntu/miniconda3/share/gatk4-4.1.1.0-0/gatk-package-4.1.1.0-local.jar VariantFiltration -R ref_genome.fa -V ctat_mutation_called_variants.vcf -window 35 -cluster 3 --filter-name FS -filter FS > 30.0 -O ctat_mutation_filtered_called_variants.vcf

……………………………

22:25:49.987 INFO ProgressMeter - Traversal complete. Processed 586 total variants in 0.0 minutes.

22:25:50.093 INFO VariantFiltration - Shutting down engine

[March 30, 2019 10:25:50 PM UTC] org.broadinstitute.hellbender.tools.walkers.filters.VariantFiltration done. Elapsed time: 0.01 minutes.

Runtime.totalMemory()=1164967936

Verify additional contents: ~/CTAT-mutation-tutorial/second_align$ ls -l

-rw-rw-r– 1 ubuntu ubuntu 123563 Mar 30 22:25 ctat_mutation_filtered_called_variants.vcf

-rw-rw-r– 1 ubuntu ubuntu 23575 Mar 30 22:25 ctat_mutation_filtered_called_variants.vcf.idx

~/CTAT-mutation-tutorial/second_align$ bcftools stats ctat_mutation_called_variants.vcf | head -20


SN, Summary numbers: 
 
SN  [2]id           [3]key                          [4]value
 
SN  0   number of samples:                          1

SN  0   number of records:                          586

SN  0   number of no-ALTs:                          0

SN  0   number of SNPs:                                567

SN  0   number of MNPs:                                0

SN  0   number of indels:                           19

SN  0   number of others:                           0

SN  0   number of multiallelic sites:                   1

SN  0   number of multiallelic SNP sites:           0


TSTV, transitions/transversions:

TSTV    [2]id   [3]ts   [4]tv   [5]ts/tv    [6]ts (1st ALT) [7]tv (1st ALT) [8]ts/tv (1st ALT)

TSTV    0   449 118 3.81                            449         118         3.81

~/CTAT-mutation-tutorial/second_align$ bcftools stats ctat_mutation_filtered_called_variants.vcf | head -20


SN, Summary numbers:

SN  [2]id           [3]key                          [4]value

SN  0   number of samples:                          1

SN  0   number of records:                          586

SN  0   number of no-ALTs:                          0

SN  0   number of SNPs:                                567

SN  0   number of MNPs:                                0

SN  0   number of indels:                           19

SN  0   number of others:                           0

SN  0   number of multiallelic sites:                   1

SN  0   number of multiallelic SNP sites:           0


TSTV, transitions/transversions:

TSTV    [2]id   [3]ts   [4]tv   [5]ts/tv    [6]ts (1st ALT) [7]tv (1st ALT) [8]ts/tv (1st ALT)

TSTV    0   449 118 3.81                            449         118         3.81
LS0tDQp0aXRsZTogIlZhcmlhbnQgY2FsbGluZyBmcm9tIFJOQS1zZXEgZGF0YSB1c2luZyBTVEFSLCBQaWNhcmQgYW5kIEdBVEsgdG9vbHMiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBSZWZlcmVuY2VzLCByZXNvdXJjZXMsIGRhdGEgYW5kIGluaXRpYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCioqU1RBUjogdWx0cmFmYXN0IHVuaXZlcnNhbCBSTkEtc2VxIGFsaWduZXIuIERvYmluIEEsIERhdmlzIENBLCBTY2hsZXNpbmdlciBGLCBEcmVua293IEosIFphbGVza2kgQywgSmhhIFMsIEJhdHV0IFAsIENoYWlzc29uIE0sIEdpbmdlcmFzIFRSLiBCaW9pbmZvcm1hdGljcy4gMjAxMyBKYW4gMTsyOSgxKToxNS0yMS4gZG9pOiAxMC4xMDkzL2Jpb2luZm9ybWF0aWNzL2J0czYzNS4qKg0KDQoqKlRoZSBHZW5vbWUgQW5hbHlzaXMgVG9vbGtpdDogYSBNYXBSZWR1Y2UgZnJhbWV3b3JrIGZvciBhbmFseXppbmcgbmV4dC1nZW5lcmF0aW9uIEROQSBzZXF1ZW5jaW5nIGRhdGEgTWNLZW5uYSBBLCBIYW5uYSBNLCBCYW5rcyBFLCBTaXZhY2hlbmtvIEEsIENpYnVsc2tpcyBLLCBLZXJueXRza3kgQSwgR2FyaW1lbGxhIEssIEFsdHNodWxlciBELCBHYWJyaWVsIFMsIERhbHkgTSwgRGVQcmlzdG8gTUEsIDIwMTAgR0VOT01FIFJFU0VBUkNIIDIwOjEyOTctMzAzKioNCg0KKipodHRwOi8vYnJvYWRpbnN0aXR1dGUuZ2l0aHViLmlvL3BpY2FyZC8qKg0KDQoNCg0KDQojIyMgQVdTIGluc3RhbmNlIHR5cGU6IHI1LjJ4bGFyZ2UgKDY0IEdCIFJBTSkNCg0KDQoNCiMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIHdnZXQgaHR0cHM6Ly9kYXRhLmJyb2FkaW5zdGl0dXRlLm9yZy9UcmluaXR5L0NUQVQvbXV0YXRpb24vY3RhdF9tdXRhdGlvbl9kZW1vLnRhci5neg0KDQoNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIHRhciB4dmYgY3RhdF9tdXRhdGlvbl9kZW1vLnRhci5neg0KDQoNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDk4OTI3NzQgQXVnIDIwICAyMDE4IGN0YXRfbXV0YXRpb25fZGVtb18xLmZhc3RxDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDk4OTI3NzQgQXVnIDIwICAyMDE4IGN0YXRfbXV0YXRpb25fZGVtb18yLmZhc3RxDQoNCg0KDQoNCiMjIyBPYnRhaW4gU3RhciBJbmRleCBmb3IgR1JDaDM4IChwcmUtYnVpbHQpDQoNCiMjIyMgfiQgd2dldCBodHRwczovL2RhdGEuYnJvYWRpbnN0aXR1dGUub3JnL1RyaW5pdHkvQ1RBVF9SRVNPVVJDRV9MSUIvR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgucGx1Zy1uLXBsYXkudGFyLmd6DQoNCiMjIyMgfiQgdGFyIHh2ZiBHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC5wbHVnLW4tcGxheS50YXIuZ3ogICANCg0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyLw0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9Bbm5vdEZpbHRlclJ1bGUucG0NCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2dlbm9tZS5mYQ0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9wZmFtX2RvbWFpbnMuZGJtDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuZmFpDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9hbm5vdC5ndGYubWluaS5zb3J0dQ0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9ibGFzdF9wYWlycy5pZHgNCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2Fubm90Lmd0Zi5nZW5lX3NwYW5zDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuZ21hcC5vaw0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4Lw0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L2J1aWxkLm9rDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvc2pkYkxpc3QuZnJvbUdURi5vdXQudGFiDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvZXhvbkdlVHJJbmZvLnRhYg0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L1NBaW5kZXgNCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2dlbm9tZS5mYS5zdGFyLmlkeC90cmFuc2NyaXB0SW5mby50YWINCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2dlbm9tZS5mYS5zdGFyLmlkeC9nZW5lSW5mby50YWINCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2dlbm9tZS5mYS5zdGFyLmlkeC9zamRiSW5mby50eHQNCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2dlbm9tZS5mYS5zdGFyLmlkeC9TQQ0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L2NoclN0YXJ0LnR4dA0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L2Nock5hbWUudHh0DQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvY2hyTGVuZ3RoLnR4dA0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L2dlbm9tZVBhcmFtZXRlcnMudHh0DQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvc2pkYkxpc3Qub3V0LnRhYg0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L0dlbm9tZQ0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhLnN0YXIuaWR4L2Nock5hbWVMZW5ndGgudHh0DQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvZXhvbkluZm8udGFiDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9hbm5vdC5wZXANCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvdHJhbnMuYmxhc3QuYWxpZ25fY29vcmRzLmFsaWduX2Nvb3Jkcy5kYXQNCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvdHJhbnMuYmxhc3QuYWxpZ25fY29vcmRzLmFsaWduX2Nvb3Jkcy5kYm0NCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2Fubm90Lmd0Zg0KR1JDaDM4X3YyN19DVEFUX2xpYl9GZWIwOTIwMTgvY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfYW5ub3QuY2RzDQpHUkNoMzhfdjI3X0NUQVRfbGliX0ZlYjA5MjAxOC9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL2JsYXN0X3BhaXJzLmlkeC5wcmV2LjE1MTgyMTc2MzENCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvZnVzaW9uX2Fubm90X2xpYi5pZHgNCkdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvcmVmX2Fubm90LnByb3RfaW5mby5kYm0NCg0KDQojIyMjIH4kIGxzIC1sIEdSQ2gzOF92MjdfQ1RBVF9saWJfRmViMDkyMDE4L2N0YXRfZ2Vub21lX2xpYl9idWlsZF9kaXIvDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDI4MzkgRmViIDIzICAyMDE4IEFubm90RmlsdGVyUnVsZS5wbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAxNDAwODQ4Mzg0IEZlYiAyMSAgMjAxOCBibGFzdF9wYWlycy5pZHgNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTQwMDg0ODM4NCBGZWIgMjEgIDIwMTggYmxhc3RfcGFpcnMuaWR4LnByZXYuMTUxODIxNzYzMQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAyMzIwMjM2NTQ0IEZlYiAyMSAgMjAxOCBmdXNpb25fYW5ub3RfbGliLmlkeA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTkwODU3MjE2IEZlYiAyMyAgMjAxOCBwZmFtX2RvbWFpbnMuZGJtDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAxMDg5OTM0MDkgRmViIDIxICAyMDE4IHJlZl9hbm5vdC5jZHMNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMTE1MDgzNTMwNSBGZWIgMjEgIDIwMTggcmVmX2Fubm90Lmd0Zg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAzOTMzOTk4IEZlYiAyMSAgMjAxOCByZWZfYW5ub3QuZ3RmLmdlbmVfc3BhbnMNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICA0OTc1MjA1MyBGZWIgMjEgIDIwMTggcmVmX2Fubm90Lmd0Zi5taW5pLnNvcnR1DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgMzc1OTc0NDIgRmViIDIxICAyMDE4IHJlZl9hbm5vdC5wZXANCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDcxOTc4MTg4OCBGZWIgMjEgIDIwMTggcmVmX2Fubm90LnByb3RfaW5mby5kYm0NCg0KKiotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAzMTM5NzU4MDgyIEZlYiAyMSAgMjAxOCByZWZfZ2Vub21lLmZhKioNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgIDc4OCBGZWIgMjEgIDIwMTggcmVmX2dlbm9tZS5mYS5mYWkNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICAgMCBGZWIgMjEgIDIwMTggcmVmX2dlbm9tZS5mYS5nbWFwLm9rDQoNCioqZHJ3eHJ3eHIteCAyIHVidW50dSB1YnVudHUgICAgICAgNDA5NiBGZWIgMjEgIDIwMTggcmVmX2dlbm9tZS5mYS5zdGFyLmlkeCoqDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDE1NTIxNDYzOTkgRmViIDIxICAyMDE4IHRyYW5zLmJsYXN0LmFsaWduX2Nvb3Jkcy5hbGlnbl9jb29yZHMuZGF0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDQwMzQ1MzEzMjggRmViIDIxICAyMDE4IHRyYW5zLmJsYXN0LmFsaWduX2Nvb3Jkcy5hbGlnbl9jb29yZHMuZGJtDQoNCg0KDQojIyBSdW4gU1RBUiB0byBhbGlnbiBmYXN0cSBmaWxlcyB0byB0aGUgZ2Vub21lIChHUkNoMzgpIHVzaW5nIFN0YXJJbmRleDogRmlyc3QgcGFzcw0KDQoNCiMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIFNUQVIgLS1nZW5vbWVEaXIgfi9jdGF0X2dlbm9tZV9saWJfYnVpbGRfZGlyL3JlZl9nZW5vbWUuZmEuc3Rhci5pZHgvIC0tcmVhZEZpbGVzSW4gY3RhdF9tdXRhdGlvbl9kZW1vXzEuZmFzdHEgY3RhdF9tdXRhdGlvbl9kZW1vXzIuZmFzdHEgLS1ydW5UaHJlYWROIDggLS1vdXRGaWxlTmFtZVByZWZpeCBmaXJzdF9hbA0KDQpNYXIgMzAgMTc6MTI6NDIgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpNYXIgMzAgMTc6MTI6NDIgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KTWFyIDMwIDE3OjE1OjAzIC4uLi4uIHN0YXJ0ZWQgbWFwcGluZw0KDQpNYXIgMzAgMTc6MTU6MDcgLi4uLi4gZmluaXNoZWQgc3VjY2Vzc2Z1bGx5DQoNCg0KDQoNCiMjIyBBZGRpdGlvbmFsIGZpbGVzL2RpcmVjdG9yaWVzIGNyZWF0ZWQgZm9sbG93aW5nIHRoZSBhYm92ZSBydW4NCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDI4MzE4MjcyIE1hciAzMCAxNzoxNSBmaXJzdF9hbEFsaWduZWQub3V0LnNhbQ0KDQoqKi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAxODM0IE1hciAzMCAxNzoxNSBmaXJzdF9hbExvZy5maW5hbC5vdXQqKg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAxODU3OSBNYXIgMzAgMTc6MTUgZmlyc3RfYWxMb2cub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgMjQ2IE1hciAzMCAxNzoxNSBmaXJzdF9hbExvZy5wcm9ncmVzcy5vdXQNCg0KKiotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAzNjk2MiBNYXIgMzAgMTc6MTUgZmlyc3RfYWxTSi5vdXQudGFiKioNCg0KDQoNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIGhlYWQgZmlyc3RfYWxMb2cuZmluYWwub3V0IA0KDQpgYGANCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBqb2Igb24gfAlNYXIgMzAgMTc6MTI6NDINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRlZCBtYXBwaW5nIG9uIHwJTWFyIDMwIDE3OjE1OjAzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5pc2hlZCBvbiB8CU1hciAzMCAxNzoxNTowNw0KICAgICAgIE1hcHBpbmcgc3BlZWQsIE1pbGxpb24gb2YgcmVhZHMgcGVyIGhvdXIgfAk1Ny4yMg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnB1dCByZWFkcyB8CTYzNTgwDQogICAgICAgICAgICAgICAgICAgICAgQXZlcmFnZSBpbnB1dCByZWFkIGxlbmd0aCB8CTEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5JUVVFIFJFQURTOg0KICAgICAgICAgICAgICAgICAgIFVuaXF1ZWx5IG1hcHBlZCByZWFkcyBudW1iZXIgfAk1OTc3Nw0KICAgICAgICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzICUgfAk5NC4wMiUNCg0KYGBgDQoNCg0KDQojIyBSdW4gU1RBUiBhbGlnbmVyIHVzaW5nIHRoZSAqKlNKLm91dC50YWIqKiBmaWxlIChTZWNvbmQgcGFzcykgdG8gZ2VuZXJhdGUgYW5vdGhlciBTdGFyIEluZGV4IChlLmcuLCBoZzM4c3RhcmluZGV4MikNCg0KIyMjIH4kIFNUQVIgLS1ydW5Nb2RlIGdlbm9tZUdlbmVyYXRlIC0tZ2Vub21lRGlyIGhnMzhzdGFyaW5kZXgyLyAtLWdlbm9tZUZhc3RhRmlsZXMgY3RhdF9nZW5vbWVfbGliX2J1aWxkX2Rpci9yZWZfZ2Vub21lLmZhIC0tc2pkYkZpbGVDaHJTdGFydEVuZCBDVEFULW11dGF0aW9uLXR1dG9yaWFsL2ZpcnN0X2FsU0oub3V0LnRhYiAtLXJ1blRocmVhZE4gMTYNCg0KTWFyIDMwIDE4OjA3OjUwIC4uLi4uIHN0YXJ0ZWQgU1RBUiBydW4NCg0KTWFyIDMwIDE4OjA3OjUwIC4uLiBzdGFydGluZyB0byBnZW5lcmF0ZSBHZW5vbWUgZmlsZXMNCg0KTWFyIDMwIDE4OjA5OjAwIC4uLiBzdGFydGluZyB0byBzb3J0IFN1ZmZpeCBBcnJheS4gVGhpcyBtYXkgdGFrZSBhIGxvbmcgdGltZS4uLg0KDQpNYXIgMzAgMTg6MDk6MTUgLi4uIHNvcnRpbmcgU3VmZml4IEFycmF5IGNodW5rcyBhbmQgc2F2aW5nIHRoZW0gdG8gZGlzay4uLg0KDQpNYXIgMzAgMTk6MDQ6MTYgLi4uIGxvYWRpbmcgY2h1bmtzIGZyb20gZGlzaywgcGFja2luZyBTQS4uLg0KDQpNYXIgMzAgMTk6MDU6MzEgLi4uIGZpbmlzaGVkIGdlbmVyYXRpbmcgc3VmZml4IGFycmF5DQoNCk1hciAzMCAxOTowNTozMSAuLi4gZ2VuZXJhdGluZyBTdWZmaXggQXJyYXkgaW5kZXgNCg0KTWFyIDMwIDE5OjEwOjIxIC4uLiBjb21wbGV0ZWQgU3VmZml4IEFycmF5IGluZGV4DQoNCk1hciAzMCAxOToxMDoyMSAuLi4uLiBpbnNlcnRpbmcganVuY3Rpb25zIGludG8gdGhlIGdlbm9tZSBpbmRpY2VzDQoNCk1hciAzMCAxOToxMTozNSAuLi4gd3JpdGluZyBHZW5vbWUgdG8gZGlzayAuLi4NCg0KTWFyIDMwIDE5OjExOjM3IC4uLiB3cml0aW5nIFN1ZmZpeCBBcnJheSB0byBkaXNrIC4uLg0KDQpNYXIgMzAgMTk6MTI6NTkgLi4uIHdyaXRpbmcgU0FpbmRleCB0byBkaXNrDQoNCk1hciAzMCAxOToxMzowNiAuLi4uLiBmaW5pc2hlZCBzdWNjZXNzZnVsbHkNCg0KDQoNCiMjIyMgIH4kIGxzIC1sIGhnMzhzdGFyaW5kZXgyLw0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMzA5MTY2Mzk4NiBNYXIgMzAgMTk6MTEgR2Vub21lDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDIwMjMzIE1hciAzMCAxNzo1NyBMb2cub3V0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1IDI0MjM3Mjk5NDcyIE1hciAzMCAxOToxMiBTQQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgMTU2NTg3MzYxOSBNYXIgMzAgMTk6MTIgU0FpbmRleA0KDQpkcnd4LS0tLS0tIDIgdWJ1bnR1IHVidW50dSAgICAgICAgNDA5NiBNYXIgMzAgMTc6NDAgX1NUQVJ0bXANCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICAyMzggTWFyIDMwIDE4OjA4IGNockxlbmd0aC50eHQNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAgICAxMzggTWFyIDMwIDE4OjA4IGNock5hbWUudHh0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAgMzc2IE1hciAzMCAxODowOCBjaHJOYW1lTGVuZ3RoLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAgIDI3MyBNYXIgMzAgMTg6MDggY2hyU3RhcnQudHh0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgICAgNjUwIE1hciAzMCAxOToxMSBnZW5vbWVQYXJhbWV0ZXJzLnR4dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAyOTM4NyBNYXIgMzAgMTk6MTAgc2pkYkluZm8udHh0DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAgIDI1ODM1IE1hciAzMCAxOToxMCBzamRiTGlzdC5vdXQudGFiDQoNCg0KDQojIyAybmQtcGFzcyBhbGlnbm1lbnQNCg0KIyMjIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbCQgU1RBUiAtLWdlbm9tZURpciB+L2hnMzhzdGFyaW5kZXgyLyAtLXJlYWRGaWxlc0luIGN0YXRfbXV0YXRpb25fZGVtb18xLmZhc3RxIGN0YXRfbXV0YXRpb25fZGVtb18yLmZhc3RxIC0tcnVuVGhyZWFkTiA4IC0tb3V0RmlsZU5hbWVQcmVmaXggfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbi8NCg0KDQpNYXIgMzAgMTk6Mjg6MTQgLi4uLi4gc3RhcnRlZCBTVEFSIHJ1bg0KDQpNYXIgMzAgMTk6Mjg6MTQgLi4uLi4gbG9hZGluZyBnZW5vbWUNCg0KTWFyIDMwIDE5OjI4OjU4IC4uLi4uIHN0YXJ0ZWQgbWFwcGluZw0KDQpNYXIgMzAgMTk6Mjk6MTEgLi4uLi4gZmluaXNoZWQgc3VjY2Vzc2Z1bGx5DQoNCiMjIyBBZGRpdGlvbmFsIGZpbGVzL2RpcmVjdG9yaWVzIGFuZCBjb250ZW50cyBjcmVhdGVkIGZvbGxvd2luZyB0aGUgYWJvdmUgcnVuDQoNCiMjIyMgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsJCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAxNzY2MyBNYXIgMzAgMTc6MzIgTG9nLm91dA0KDQpkcnd4LS0tLS0tIDIgdWJ1bnR1IHVidW50dSAgICAgNDA5NiBNYXIgMzAgMTc6MzAgX1NUQVJ0bXANCg0KKipkcnd4cnd4ci14IDIgdWJ1bnR1IHVidW50dSAgICAgNDA5NiBNYXIgMzAgMTk6Mjkgc2Vjb25kX2FsaWduKioNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIGxzIC1sIHNlY29uZF9hbGlnbi8NCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMjgzNDg5OTIgTWFyIDMwIDE5OjI5IEFsaWduZWQub3V0LnNhbQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgMTgzNSBNYXIgMzAgMTk6MjkgTG9nLmZpbmFsLm91dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAxODI0OSBNYXIgMzAgMTk6MjkgTG9nLm91dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDI0NiBNYXIgMzAgMTk6MjkgTG9nLnByb2dyZXNzLm91dA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAzNjkwOSBNYXIgMzAgMTk6MjkgU0oub3V0LnRhYg0KDQoNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwkIGhlYWQgc2Vjb25kX2FsaWduL0xvZy5maW5hbC5vdXQgDQoNCmBgYA0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIGpvYiBvbiB8CU1hciAzMCAxOToyODoxNA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFydGVkIG1hcHBpbmcgb24gfAlNYXIgMzAgMTk6Mjg6NTgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbmlzaGVkIG9uIHwJTWFyIDMwIDE5OjI5OjExDQogICAgICAgTWFwcGluZyBzcGVlZCwgTWlsbGlvbiBvZiByZWFkcyBwZXIgaG91ciB8CTE3LjYxDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGlucHV0IHJlYWRzIHwJNjM1ODANCiAgICAgICAgICAgICAgICAgICAgICBBdmVyYWdlIGlucHV0IHJlYWQgbGVuZ3RoIHwJMTAwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTklRVUUgUkVBRFM6DQogICAgICAgICAgICAgICAgICAgVW5pcXVlbHkgbWFwcGVkIHJlYWRzIG51bWJlciB8CTU5ODEwDQogICAgICAgICAgICAgICAgICAgICAgICBVbmlxdWVseSBtYXBwZWQgcmVhZHMgJSB8CTk0LjA3JQ0KYGBgDQoNCg0KDQojIyMjIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbCQgc2FtdG9vbHMgdmlldyAtaCBzZWNvbmRfYWxpZ24vQWxpZ25lZC5vdXQuc2FtIHwgaGVhZCANCg0KQEhECVZOOjEuNA0KDQpAU1EJU046Y2hyMQkgICAgICAgIExOOjI0ODk1NjQyMg0KDQpAU1EJU046Y2hyMgkgICAgICAgIExOOjI0MjE5MzUyOQ0KDQpAU1EJU046Y2hyMwkgICAgICAgIExOOjE5ODI5NTU1OQ0KDQpAU1EJU046Y2hyNAkgICAgICAgIExOOjE5MDIxNDU1NQ0KDQpAU1EJU046Y2hyNQkgICAgICAgIExOOjE4MTUzODI1OQ0KDQpAU1EJU046Y2hyNgkgICAgICAgIExOOjE3MDgwNTk3OQ0KDQpAU1EJU046Y2hyNwkgICAgICAgIExOOjE1OTM0NTk3Mw0KDQpAU1EJU046Y2hyOAkgICAgICAgIExOOjE0NTEzODYzNg0KDQpAU1EJU046Y2hyOQkgICAgICAgIExOOjEzODM5NDcxNw0KDQoNCg0KDQojIyBQcmVwYXJlIHRoZSBTQU0gZmlsZSBmb3IgcnVubmluZyBHQVRLIHBpcGVsaW5lIChmb3IgdmFyaWFudCBkaXNjb3ZlcnkpDQoNCg0KDQojIyMgVXNlIFBpY2FyZCB0b29sIEFkZE9yUmVwbGFjZVJlYWRHcm91cHMgdG8gc29ydCB0aGUgZmlsZSBieSBjb29yZGluYXRlLCBhZGQgcmVhZCBncm91cCBpbmZvcm1hdGlvbiBhbmQgY29udmVyc2lvbiB0byBCQU0gDQoNCiMjIyAgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgcGljYXJkIEFkZE9yUmVwbGFjZVJlYWRHcm91cHMgST1BbGlnbmVkLm91dC5zYW0gbz1jdGF0X211dGF0aW9uX3JnX2FkZGVkX3NvcnRlZC5iYW0gU089Y29vcmRpbmF0ZSBSR0lEPTEyMyBSR0xCPVRydXNlcV9TU19QYWlyZWQgUkdQTD1JbGx1bWluYSBSR1BVPUhpc2VxNDAwMCBSR1NNPWN0YXRfbXV0YXRpb24NCg0KSU5GTwkyMDE5LTAzLTMwIDE5OjU2OjIzCUFkZE9yUmVwbGFjZVJlYWRHcm91cHMJDQoNCioqKioqKioqKiogTk9URTogUGljYXJkJ3MgY29tbWFuZCBsaW5lIHN5bnRheCBpcyBjaGFuZ2luZy4NCg0KKioqKioqKioqKg0KDQoqKioqKioqKioqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlOg0KDQoqKioqKioqKioqIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9hZGluc3RpdHV0ZS9waWNhcmQvd2lraS9Db21tYW5kLUxpbmUtU3ludGF4LVRyYW5zaXRpb24tRm9yLVVzZXJzLShQcmUtVHJhbnNpdGlvbikNCg0KKioqKioqKioqKg0KDQoqKioqKioqKioqIFRoZSBjb21tYW5kIGxpbmUgbG9va3MgbGlrZSB0aGlzIGluIHRoZSBuZXcgc3ludGF4Og0KKioqKioqKioqKg0KDQoqKioqKioqKioqICAgIEFkZE9yUmVwbGFjZVJlYWRHcm91cHMgLUkgQWxpZ25lZC5vdXQuc2FtIC1vIGN0YXRfbXV0YXRpb25fcmdfYWRkZWRfc29ydGVkLmJhbSAtU08gY29vcmRpbmF0ZSAtUkdJRCAxMjMgLVJHTEIgVHJ1c2VxX1NTX1BhaXJlZCAtUkdQTCBJbGx1bWluYSAtUkdQVSBIaXNlcTQwMDAgLVJHU00gY3RhdF9tdXRhdGlvbg0KDQoNCg0KDQoNCiMjIyMgQWRkaXRpb25hbCBmaWxlcy9kaXJlY3RvcmllcyBjcmVhdGVkIGZvbGxvd2luZyB0aGUgYWJvdmUgcnVuDQoNCiMjIyMgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgbHMgLWwNCg0KKiotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgNzMzMDMzMiBNYXIgMzAgMTk6NTYgY3RhdF9tdXRhdGlvbl9yZ19hZGRlZF9zb3J0ZWQuYmFtKioNCg0KDQoNCg0KDQoNCg0KDQojIyMgVXNlIHBpY2FyZCB0b29sIE1hcmtEdXBsaWNhdGVzIHRvIG1hcmsgZHVwbGljYXRlZCByZWFkcw0KDQoNCiMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBwaWNhcmQgTWFya0R1cGxpY2F0ZXMgST1jdGF0X211dGF0aW9uX3JnX2FkZGVkX3NvcnRlZC5iYW0gbz1jdGF0X211dGF0aW9uX2RlZHVwcGVkX3JnX2FkZGVkX3NvcnRlZC5iYW0gQ1JFQVRFX0lOREVYPXRydWUgVkFMSURBVElPTl9TVFJJTkdFTkNZPVNJTEVOVCBNPW91dHB1dC5tZXRyaWNzIA0KDQpJTkZPCTIwMTktMDMtMzAgMjA6MDM6NDUJTWFya0R1cGxpY2F0ZXMJDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQpbU2F0IE1hciAzMCAyMDowMzo1MyBVVEMgMjAxOV0gcGljYXJkLnNhbS5tYXJrZHVwbGljYXRlcy5NYXJrRHVwbGljYXRlcyBkb25lLiBFbGFwc2VkIHRpbWU6IDAuMTIgbWludXRlcy4NCg0KUnVudGltZS50b3RhbE1lbW9yeSgpPTY0OTU5MjgzMg0KDQoNCg0KIyMjIEFkZGl0aW9uYWwgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIGNvbnRlbnRzIGNyZWF0ZWQgZm9sbG93aW5nIHRoZSBhYm92ZSBydW4NCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBscyAtbA0KDQoqKi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAxNDM3NDgwIE1hciAzMCAyMDowMyBjdGF0X211dGF0aW9uX2RlZHVwcGVkX3JnX2FkZGVkX3NvcnRlZC5iYWkqKg0KDQoqKi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICA3NDUwNzM0IE1hciAzMCAyMDowMyBjdGF0X211dGF0aW9uX2RlZHVwcGVkX3JnX2FkZGVkX3NvcnRlZC5iYW0qKg0KDQoqKi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAyOTAwIE1hciAzMCAyMDowMyBvdXRwdXQubWV0cmljcyoqDQoNCg0KDQoNCiMjIyMgIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24kIHNhbXRvb2xzIGZsYWdzdGF0IGN0YXRfbXV0YXRpb25fcmdfYWRkZWRfc29ydGVkLmJhbSANCg0KDQpgYGANCjE0MjY1NiArIDAgaW4gdG90YWwgKFFDLXBhc3NlZCByZWFkcyArIFFDLWZhaWxlZCByZWFkcykNCg0KMTU1MjIgKyAwIHNlY29uZGFyeQ0KDQowICsgMCBzdXBwbGVtZW50YXJ5DQoNCjAgKyAwIGR1cGxpY2F0ZXMNCg0KMTQyNjU2ICsgMCBtYXBwZWQgKDEwMC4wMCUgOiBOL0EpDQoNCjEyNzEzNCArIDAgcGFpcmVkIGluIHNlcXVlbmNpbmcNCg0KNjM1NjcgKyAwIHJlYWQxDQoNCjYzNTY3ICsgMCByZWFkMg0KDQoxMjcxMzQgKyAwIHByb3Blcmx5IHBhaXJlZCAoMTAwLjAwJSA6IE4vQSkNCg0KMTI3MTM0ICsgMCB3aXRoIGl0c2VsZiBhbmQgbWF0ZSBtYXBwZWQNCg0KMCArIDAgc2luZ2xldG9ucyAoMC4wMCUgOiBOL0EpDQoNCjAgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyDQoNCjAgKyAwIHdpdGggbWF0ZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgY2hyIChtYXBRPj01KQ0KDQpgYGANCg0KDQojIyMjICB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBzYW10b29scyBmbGFnc3RhdCBjdGF0X211dGF0aW9uX2RlZHVwcGVkX3JnX2FkZGVkX3NvcnRlZC5iYW0gDQoNCmBgYA0KDQoxNDI2NTYgKyAwIGluIHRvdGFsIChRQy1wYXNzZWQgcmVhZHMgKyBRQy1mYWlsZWQgcmVhZHMpDQoNCjE1NTIyICsgMCBzZWNvbmRhcnkNCg0KMCArIDAgc3VwcGxlbWVudGFyeQ0KDQoyNDQ0ICsgMCBkdXBsaWNhdGVzDQoNCjE0MjY1NiArIDAgbWFwcGVkICgxMDAuMDAlIDogTi9BKQ0KDQoxMjcxMzQgKyAwIHBhaXJlZCBpbiBzZXF1ZW5jaW5nDQoNCjYzNTY3ICsgMCByZWFkMQ0KDQo2MzU2NyArIDAgcmVhZDINCg0KMTI3MTM0ICsgMCBwcm9wZXJseSBwYWlyZWQgKDEwMC4wMCUgOiBOL0EpDQoNCjEyNzEzNCArIDAgd2l0aCBpdHNlbGYgYW5kIG1hdGUgbWFwcGVkDQoNCjAgKyAwIHNpbmdsZXRvbnMgKDAuMDAlIDogTi9BKQ0KDQowICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNocg0KDQowICsgMCB3aXRoIG1hdGUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IGNociAobWFwUT49NSkNCg0KYGBgDQoNCiMjIEdBVEsgU3BsaXROQ2lnYXJSZWFkczogU3BsaXQgcmVhZHMgaW50byBleG9uIGFuZCBpbnRyb24gc2VnbWVudHMgDQoNCg0KDQojIyMgTmVlZCBhIGdlbm9tZSBpbmRleCBmaWxlIGZvciB0aGUgcnVuOiBUaGUgKipyZWZfZ2Vub21lLmZhKiogZmlsZSBmcm9tICoqY3RhdF9nZW5vbWVfbGliX2J1aWxkX2RpcioqIGRpcmVjdG9yeSB3YXMgY29waWVkIHRvIHRoZSAic2Vjb25kX2FsaWduIiBkaXJlY3RvcnkgYW5kIGFuIGluZGV4IHdhcyBtYWRlIA0KDQoNCiMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBzYW10b29scyBmYWlkeCByZWZfZ2Vub21lLmZhDQoNCg0KIyMjIyBBZGRpdGlvbmFsIGZpbGVzL2RpcmVjdG9yaWVzIGZvbGxvd2luZyB0aGUgYWJvdmUgcnVuOiB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBscyAtbA0KIA0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgMzEzOTc1ODA4MiBGZWIgMjEgIDIwMTggcmVmX2dlbm9tZS5mYQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgICAgNzg4IE1hciAzMCAyMDo1OCByZWZfZ2Vub21lLmZhLmZhaQ0KDQoNCiMjIyAgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgZ2F0ayBTcGxpdE5DaWdhclJlYWRzIC1SIHJlZl9nZW5vbWUuZmEgLUkgY3RhdF9tdXRhdGlvbl9kZWR1cHBlZF9yZ19hZGRlZF9zb3J0ZWQuYmFtIC1PIGN0YXRfbXV0YXRpb25fc3BsaXQuYmFtICANCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvdWJ1bnR1L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjEuMC0wL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQpSdW5uaW5nOg0KICAgIGphdmEgLURzYW1qZGsudXNlX2FzeW5jX2lvX3JlYWRfc2FtdG9vbHM9ZmFsc2UgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3NhbXRvb2xzPXRydWUgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3RyaWJibGU9ZmFsc2UgLURzYW1qZGsuY29tcHJlc3Npb25fbGV2ZWw9MiAtamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXIgU3BsaXROQ2lnYXJSZWFkcyAtUiByZWZfZ2Vub21lLmZhIC1JIGN0YXRfbXV0YXRpb25fZGVkdXBwZWRfcmdfYWRkZWRfc29ydGVkLmJhbSAtTyBjdGF0X211dGF0aW9uX3NwbGl0LmJhbQ0KICAgIA0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW01hcmNoIDMwLCAyMDE5IDg6NTk6MjYgUE0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLnJuYXNlcS5TcGxpdE5DaWdhclJlYWRzIGRvbmUuIEVsYXBzZWQgdGltZTogMC4wOSBtaW51dGVzLg0KDQpSdW50aW1lLnRvdGFsTWVtb3J5KCk9MTQyMjM5MzM0NA0KDQoNCg0KIyMjIyBBZGRpdGlvbmFsIGZpbGVzL2RpcmVjdG9yaWVzIGZvbGxvd2luZyB0aGUgYWJvdmUgcnVuOiB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAxNDM5Mzg0IE1hciAzMCAyMDo1OSBjdGF0X211dGF0aW9uX3NwbGl0LmJhaQ0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgIDEwNzE0MDkyIE1hciAzMCAyMDo1OSBjdGF0X211dGF0aW9uX3NwbGl0LmJhbQ0KDQoNCg0KDQojIyBQZXJmb3JtIEJhc2UgcXVhbGl0eSBSZWNhbGlicmF0aW9uIChCUVNSKQ0KDQoNCiMjIyBkYnNucCB2Y2YgKGRiU05QcyBmb3IgR0FUSykgaXMgbmVlZGVkIGZvciB0aGUgcnVuOiBEb3dubG9hZCB0aGUgdmNmIGFuZCB0aGUgaW5kZXggZmlsZSBpbnRvIGEgZGlyZWN0b3J5IGNhbGxlZCAiZ2F0ay12Y2YiDQoNCg0KIyMjIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24vZ2F0ay12Y2YkIHdnZXQgZnRwOi8vZnRwLm5jYmkubmxtLm5paC5nb3Yvc25wL29yZ2FuaXNtcy9odW1hbl85NjA2X2IxNTFfR1JDaDM4cDcvVkNGL0dBVEsvY29tbW9uX2FsbF8yMDE4MDQxOC52Y2YuZ3oNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KY29tbW9uX2FsbF8yMDE4MDQxOC52Y2YuZ3ogICAgICAgICAgICAgICAgICAgICAgIDEwMCVbPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Pl0gICAxLjQ5RyAgIDEzNk1CL3MgICAgaW4gMTNzICAgICANCg0KDQoNCiMjIyMgIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24vZ2F0ay12Y2YkIHdnZXQgZnRwOi8vZnRwLm5jYmkubmxtLm5paC5nb3Yvc25wL29yZ2FuaXNtcy9odW1hbl85NjA2X2IxNTFfR1JDaDM4cDcvVkNGL0dBVEsvY29tbW9uX2FsbF8yMDE4MDQxOC52Y2YuZ3oudGJpDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCmNvbW1vbl9hbGxfMjAxODA0MTgudmNmLmd6LnRiaSAgICAgICAgICAgICAgICAgICAxMDAlWz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT5dICAgMi4xNU0gIDEzLjFNQi9zICAgIGluIDAuMnMgICAgDQoNCg0KDQoNCiMjIyMgQ2hlY2sgdGhlIGNvbnRlbnRzOiAgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgbHMgLWwgZ2F0ay12Y2YvDQoNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgIDE1OTU4NDg2MjUgTWFyIDMwIDIxOjM1IGNvbW1vbl9hbGxfMjAxODA0MTgudmNmLmd6DQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAyMjU4NjY0IE1hciAzMCAyMTozNiBjb21tb25fYWxsXzIwMTgwNDE4LnZjZi5nei50YmkNCg0KDQoNCg0KIyMjICB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBnYXRrIEJhc2VSZWNhbGlicmF0b3IgLVIgcmVmX2dlbm9tZS5mYSAtSSBjdGF0X211dGF0aW9uX3NwbGl0LmJhbSAtLWtub3duLXNpdGVzIGdhdGstdmNmL2NvbW1vbl9hbGxfMjAxODA0MTgudmNmLmd6IC1PIGN0YXRfbXV0YXRpb25fcmVjYWxfZGF0YS50YWJsZQ0KDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KUnVubmluZzoNCg0KICAgIGphdmEgLURzYW1qZGsudXNlX2FzeW5jX2lvX3JlYWRfc2FtdG9vbHM9ZmFsc2UgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3NhbXRvb2xzPXRydWUgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3RyaWJibGU9ZmFsc2UgLURzYW1qZGsuY29tcHJlc3Npb25fbGV2ZWw9MiAtamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXIgQmFzZVJlY2FsaWJyYXRvciAtUiByZWZfZ2Vub21lLmZhIC1JIGN0YXRfbXV0YXRpb25fc3BsaXQuYmFtIC0ta25vd24tc2l0ZXMgZ2F0ay12Y2YvY29tbW9uX2FsbF8yMDE4MDQxOC52Y2YuZ3ogLU8gY3RhdF9tdXRhdGlvbl9yZWNhbF9kYXRhLnRhYmxlDQogICAgDQoyMTozNzoyMy43MzAgSU5GTyAgTmF0aXZlTGlicmFyeUxvYWRlciAtIExvYWRpbmcgbGliZ2tsX2NvbXByZXNzaW9uLnNvIGZyb20NCg0KamFyOmZpbGU6L2hvbWUvdWJ1bnR1L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjEuMC0wL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphciEvY29tL2ludGVsL2drbC9uYXRpdmUvbGliZ2tsX2NvbXByZXNzaW9uLnNvDQoNCjIxOjM3OjIzLjg3NSBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCjIxOjM3OjIzLjg3NSBJTkZPICBCYXNlUmVjYWxpYnJhdG9yIC0gVGhlIEdlbm9tZSBBbmFseXNpcyBUb29sa2l0IChHQVRLKSB2NC4xLjEuMA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCltNYXJjaCAzMCwgMjAxOSA5OjM3OjI4IFBNIFVUQ10gb3JnLmJyb2FkaW5zdGl0dXRlLmhlbGxiZW5kZXIudG9vbHMud2Fsa2Vycy5icXNyLkJhc2VSZWNhbGlicmF0b3IgZG9uZS4gRWxhcHNlZCB0aW1lOiAwLjA4IG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0xLDQ1MiwyNzcsNzYwDQoNCg0KDQojIyMgVmVyaWZ5IGFkZGl0aW9uYWwgZmlsZXMvZGlyZWN0b3JpZXMgYW5kIGNvbnRlbnRzDQoNCg0KIyMjIyB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgMzY0OTc2IE1hciAzMCAyMTozNyBjdGF0X211dGF0aW9uX3JlY2FsX2RhdGEudGFibGUNCg0KDQoNCiMjIyMgIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24kIGNhdCBjdGF0X211dGF0aW9uX3JlY2FsX2RhdGEudGFibGUgfCBoZWFkIC0yMA0KDQo6R0FUS1JlcG9ydC52MS4xOjUNCg0KOkdBVEtUYWJsZToyOjE3OiVzOiVzOjsNCg0KOkdBVEtUYWJsZTpBcmd1bWVudHM6UmVjYWxpYnJhdGlvbiBhcmd1bWVudCBjb2xsZWN0aW9uIHZhbHVlcyB1c2VkIGluIHRoaXMgcnVuDQoNCkFyZ3VtZW50ICAgICAgICAgICAgICAgICAgICBWYWx1ZSAgICANCg0KYmluYXJ5X3RhZ19uYW1lICAgICAgICAgICAgIG51bGwgICANCg0KY292YXJpYXRlICAgICAgICAgICAgICAgICAgIFJlYWRHcm91cENvdmFyaWF0ZSxRdWFsaXR5U2NvcmVDb3ZhcmlhdGUsQ29udGV4dENvdmFyaWF0ZSxDeWNsZUNvdmFyaWF0ZQ0KDQpkZWZhdWx0X3BsYXRmb3JtICAgICAgICAgICAgbnVsbCAgICAgDQoNCmRlbGV0aW9uc19kZWZhdWx0X3F1YWxpdHkgICA0NSAgIA0KDQpmb3JjZV9wbGF0Zm9ybSAgICAgICAgICAgICAgbnVsbCANCg0KaW5kZWxzX2NvbnRleHRfc2l6ZSAgICAgICAgIDMgICAgDQoNCmluc2VydGlvbnNfZGVmYXVsdF9xdWFsaXR5ICA0NSAgDQoNCmxvd19xdWFsaXR5X3RhaWwgICAgICAgICAgICAyICANCg0KbWF4aW11bV9jeWNsZV92YWx1ZSAgICAgICAgIDUwMCANCg0KbWlzbWF0Y2hlc19jb250ZXh0X3NpemUgICAgIDIgIA0KDQptaXNtYXRjaGVzX2RlZmF1bHRfcXVhbGl0eSAgLTEgIA0KDQpub19zdGFuZGFyZF9jb3ZzICAgICAgICAgICAgZmFsc2UgICAgDQoNCnF1YW50aXppbmdfbGV2ZWxzICAgICAgICAgICAxNiAgIA0KDQpyZWNhbGlicmF0aW9uX3JlcG9ydCAgICAgICAgbnVsbCANCg0KcnVuX3dpdGhvdXRfZGJzbnAgICAgICAgICAgIGZhbHNlIA0KDQpzb2xpZF9ub2NhbGxfc3RyYXRlZ3kgICAgICAgVEhST1dfRVhDRVBUSU9OICANCg0KDQoNCiMjIyAgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgZ2F0ayBBcHBseUJRU1IgLVIgcmVmX2dlbm9tZS5mYSAtSSBjdGF0X211dGF0aW9uX3NwbGl0LmJhbSAtLWJxc3ItcmVjYWwtZmlsZSBjdGF0X211dGF0aW9uX3JlY2FsX2RhdGEudGFibGUgLU8gY3RhdF9tdXRhdGlvbl9yZWNhbF9zcGxpdC5iYW0NCg0KVXNpbmcgR0FUSyBqYXIgL2hvbWUvdWJ1bnR1L21pbmljb25kYTMvc2hhcmUvZ2F0azQtNC4xLjEuMC0wL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQpSdW5uaW5nOg0KICAgIGphdmEgLURzYW1qZGsudXNlX2FzeW5jX2lvX3JlYWRfc2FtdG9vbHM9ZmFsc2UgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3NhbXRvb2xzPXRydWUgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3RyaWJibGU9ZmFsc2UgLURzYW1qZGsuY29tcHJlc3Npb25fbGV2ZWw9MiAtamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXIgQXBwbHlCUVNSIC1SIHJlZl9nZW5vbWUuZmEgLUkgY3RhdF9tdXRhdGlvbl9zcGxpdC5iYW0gLS1icXNyLXJlY2FsLWZpbGUgY3RhdF9tdXRhdGlvbl9yZWNhbF9kYXRhLnRhYmxlIC1PIGN0YXRfbXV0YXRpb25fcmVjYWxfc3BsaXQuYmFtDQogICAgDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCltNYXJjaCAzMCwgMjAxOSA5OjQ5OjEwIFBNIFVUQ10gb3JnLmJyb2FkaW5zdGl0dXRlLmhlbGxiZW5kZXIudG9vbHMud2Fsa2Vycy5icXNyLkFwcGx5QlFTUiBkb25lLiBFbGFwc2VkIHRpbWU6IDAuMDQgbWludXRlcy4NCg0KUnVudGltZS50b3RhbE1lbW9yeSgpPTEyMzE1NTI1MTINCg0KDQojIyMjIENoZWNrIGNvbnRlbnQ6ICB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBzYW10b29scyB2aWV3IGN0YXRfbXV0YXRpb25fcmVjYWxfc3BsaXQuYmFtIHwgaGVhZCAtMTANCg0KSFdJLUVBUzQxODo1Ojg6NjM5OjEwMDIJMTYzCWNocjEJNjMzMzc1CTEJMVM0OU0JPQk2MzM0MTUJNTkwMzYxCUNHQ0NDQVRDR1RDQ1RBR0FBVFRBQVRUQ0NDQ1RBQUFBQVRDVFRUR0FBQVRBR0dHQ0NDCT87OTk7PT0+OT09PD48Pz0+PT48Pz0+Pj08PT48PT0+PT0+Pj4+Pj09PT08Pj09Ozo7UEc6WjpNYXJrRHVwbGljYXRlcwlSRzpaOjEyMwlISTppOjEJbk06aTowCUFTOmk6ODYNCg0KSFdJLUVBUzQxODo1Ojg6NjM5OjEwMDIJNDE5CWNocjEJNjMzMzc1CTEJMVM0OU0JPQk2MzM0MTUJNzgJQ0dDQ0NBVENHVENDVEFHQUFUVEFBVFRDQ0NDVEFBQUFBVENUVFRHQUFBVEFHR0dDQ0MJPzs5OTs9PT45PT08Pjw/PT49Pjw/PT4+PTw9Pjw9PT49PT4+Pj4+PT09PTw+PT07OjtQRzpaOk1hcmtEdXBsaWNhdGVzCVJHOlo6MTIzCUhJOmk6MgluTTppOjAJQVM6aTo4NQ0KDQpIV0ktRUFTNDE4OjU6ODo2Mzk6MTAwMgk4MwljaHIxCTYzMzQxNQkxCTM1TTE1Uwk9CTYzMzM3NQktNTkwMzYxCUFUQUdHR0NDQ0dUQVRUVEFDQ0NUQVRBR0NBQ0NDQ0NUQ1RBQ0NDQUNDR0NDQ0dUQ0NDCTw5PDw8PT07Oz08PT09PDg8PT46PTw+PT44Ozw7Oz87Pjs6Ozw+Ojs5PTs6Nzs8Nzw/U0E6WjpjaHIxLDEyMjM3MjEsLSwzNVMxNU0sMSwqOwlQRzpaOk1hcmtEdXBsaWNhdGVzCVJHOlo6MTIzCUhJOmk6MQluTTppOjAJQVM6aTo4Ng0KDQpIV0ktRUFTNDE4OjU6ODo2Mzk6MTAwMgkzMzkJY2hyMQk2MzM0MTUJMQkzOE0xMlMJPQk2MzMzNzUJLTc4CUFUQUdHR0NDQ0dUQVRUVEFDQ0NUQVRBR0NBQ0NDQ0NUQ1RBQ0NDQUNDR0NDQ0dUQ0NDCTw5PDw8PT07Oz08PT09PDg8PT46PTw+PT44Ozw7Oz87Pjs6Ozw+Ojs5PTs6Nzs8Nzw/UEc6WjpNYXJrRHVwbGljYXRlcwlSRzpaOjEyMwlISTppOjIJbk06aTowCUFTOmk6ODUNCg0KSFdJLUVBUzQxODozOjkxOjExMjI6MTMJOTkJY2hyMQk4OTE4ODYJNjAJNDZNNFMJPQk4OTE4OTMJMjI3MjI2CUNDR0dHVFRDQUFHVEFBVFRDVENDVEdDQ1RDQUdDQ1RDQ0NHQUdDQUdDVEdHR0FDQ0FDCT8+Ojs9Njs+PD4+Nzw+PDs+PT48OTg9PDo+Pjo9PDo+Ozw7OTU9Ozw9OzcmMTk6PDY8UEc6WjpNYXJrRHVwbGljYXRlcwlSRzpaOjEyMwlISTppOjEJbk06aToxCUFTOmk6OTANCg0KSFdJLUVBUzQxODozOjkxOjExMjI6MTMJMTQ3CWNocjEJODkxODkzCTYwCTMzTTE3Uwk9CTg5MTg4NgktMjI3MjI2CUNBQUdUQUFUVENUQ0NUR0NDVENBR0NDVENDQ0dBR0NBR0NUR0dHQUNDQUNBR0dUR1RHCTE5LzI4Ojo7PTw7PDU8Pjs1NTw4Ozs1KC46OD47Pj4+PT4+PT0+NTs+PD4+Ozw7OUA/U0E6WjpjaHIxLDExMTkwOTUsLSwzM1MxN00sNjAsKjsJUEc6WjpNYXJrRHVwbGljYXRlcwlSRzpaOjEyMwlISTppOjEJbk06aToxCUFTOmk6OTANCg0KSFdJLUVBUzQxODozOjg3OjE0MDk6NTIJMTYzCWNocjEJMTAyNTU1NQk2MAk1ME0JPQkxMDI1NzMyCTI0NTA4MwlUQ0NUQ0NDQ0FUVENDVEdDQ0FDQ0NUQ1RDQ1RHQ0NDQ0NUQ0NUR0FDVENDQUdHVFRDVAk/Ojg7PT06PD49Pj09Pz89Oz4+ODw+Pj4+PTs+OzQ8PDw9PTo7Pj01PT4uOj49Oj08PVBHOlo6TWFya0R1cGxpY2F0ZXMJUkc6WjoxMjMJSEk6aToxCW5NOmk6MQlBUzppOjg2DQoNCkhXSS1FQVM0MTg6Mzo4NzoxNDA5OjUyCTgzCWNocjEJMTAyNTczMgk2MAkzN00xM1MJPQkxMDI1NTU1CS0yNDUwODMJR0FHR0dDR0dBR0dHQ0NUQUNDVENUR1RDQ0NUQ0NDQ0FDVENBQ0NDQ0FBQ1RDQ0NDQ0MJNTo5MC86Mzc5MzA2PD48OD08Oj42PTk9PT46Ozs2Pjo8PT44PD09Pj09Pjs5PTg3PT9TQTpaOmNocjEsMTI3MDYyNSwtLDM3UzEzTSw2MCwqOwlQRzpaOk1hcmtEdXBsaWNhdGVzCVJHOlo6MTIzCUhJOmk6MQluTTppOjEJQVM6aTo4Ng0KDQpIV0ktRUFTNDE4OjM6MTAwOjE0MjU6NzUwCTk5CWNocjEJMTA0NDIxMQkzCTQ4TTJTCT0JMTA0NDQwNgk5NTYJR0dDQ0dUR1RHVENUR1RHQUNUVENBR0NUR0NDQUdBR1RHVENDQ0FHR0NBR0NDQ0dHR0cJPT05OTc6PTw+PT4+Pjw+PT4+Pj0+Pj06Pj48Pj49PDw8Oj49PDs+PT06Pj08PTo7LzwJUEc6WjpNYXJrRHVwbGljYXRlcwlSRzpaOjEyMwlISTppOjEJbk06aTowCUFTOmk6ODgNCg0KSFdJLUVBUzQxODozOjEwMDoxNDI1Ojc1MAkzNTUJY2hyMQkxMDQ0MjExCTMJNDhNMlMJPQkxMDQ0NDA2CTI1NDQ0MwlHR0NDR1RHVEdUQ1RHVEdBQ1RUQ0FHQ1RHQ0NBR0FHVEdUQ0NDQUdHQ0FHQ0NDR0dHRwk9PTk5Nzo9PD49Pj4+PD49Pj4+PT4+PTo+Pjw+Pj08PDw6Pj08Oz49PTo+PTw9OjsvPAlQRzpaOk1hcmtEdXBsaWNhdGVzCVJHOlo6MTIzCUhJOmk6MgluTTppOjAJQVM6aTo4OA0KDQoNCiMjIFVzZSBHQVRLIEhhcGxvdHlwZUNhbGxlciBmb3IgY2FsbCB2YXJpbmF0cyANCg0KDQojIyMgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgZ2F0ayBIYXBsb3R5cGVDYWxsZXIgLVIgcmVmX2dlbm9tZS5mYSAtSSBjdGF0X211dGF0aW9uX3JlY2FsX3NwbGl0LmJhbSAtLWRvbnQtdXNlLXNvZnQtY2xpcHBlZC1iYXNlcyAtc3RhbmQtY2FsbC1jb25mIDIwIC1PIGN0YXRfbXV0YXRpb25fY2FsbGVkX3ZhcmlhbnRzLnZjZg0KDQpVc2luZyBHQVRLIGphciAvaG9tZS91YnVudHUvbWluaWNvbmRhMy9zaGFyZS9nYXRrNC00LjEuMS4wLTAvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtbG9jYWwuamFyDQpSdW5uaW5nOg0KICAgIGphdmEgLURzYW1qZGsudXNlX2FzeW5jX2lvX3JlYWRfc2FtdG9vbHM9ZmFsc2UgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3NhbXRvb2xzPXRydWUgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3RyaWJibGU9ZmFsc2UgLURzYW1qZGsuY29tcHJlc3Npb25fbGV2ZWw9MiAtamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXIgSGFwbG90eXBlQ2FsbGVyIC1SIHJlZl9nZW5vbWUuZmEgLUkgY3RhdF9tdXRhdGlvbl9yZWNhbF9zcGxpdC5iYW0gLS1kb250LXVzZS1zb2Z0LWNsaXBwZWQtYmFzZXMgLXN0YW5kLWNhbGwtY29uZiAyMCAtTyBjdGF0X211dGF0aW9uX2NhbGxlZF92YXJpYW50cy52Y2YNCiAgICANCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCjIyOjA1OjE3LjczNyBJTkZPICBJbnRlbFBhaXJIbW0gLSBBdmFpbGFibGUgdGhyZWFkczogOA0KDQoyMjowNToxNy43MzcgSU5GTyAgSW50ZWxQYWlySG1tIC0gUmVxdWVzdGVkIHRocmVhZHM6IDQNCg0KMjI6MDU6MTcuNzM3IElORk8gIFBhaXJITU0gLSBVc2luZyB0aGUgT3Blbk1QIG11bHRpLXRocmVhZGVkIEFWWC1hY2NlbGVyYXRlZCBuYXRpdmUgUGFpckhNTSBpbXBsZW1lbnRhdGlvbg0KDQoyMjowNToxNy43NjMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFN0YXJ0aW5nIHRyYXZlcnNhbA0KDQoyMjowNToxNy43NjQgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMjI6MDU6MjcuNzY0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyMTo0NjE4MTg5NCAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgIDE1NDA1MCAgICAgICAgIDkyNDMwMC4wDQoNCjIyOjA1OjM3Ljc2NCBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMToxMDk0MzM2NDYgICAgICAgICAgICAgIDAuMyAgICAgICAgICAgICAgICAzNjQ4OTAgICAgICAgIDEwOTQ2NzAuMA0KDQoyMjowNTo0Ny43NjQgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjE6MTY5MjA5Njc5ICAgICAgICAgICAgICAwLjUgICAgICAgICAgICAgICAgNTY0MjAwICAgICAgICAxMTI4NDAwLjANCg0KMjI6MDU6NTcuNzY0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIxOjIzMDcyMTQyMCAgICAgICAgICAgICAgMC43ICAgICAgICAgICAgICAgIDc2OTI4MCAgICAgICAgMTE1MzkyMC4wDQoNCjIyOjA2OjA3Ljc2NCBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgIGNocjI6Mzg4ODAzMDEgICAgICAgICAgICAgIDAuOCAgICAgICAgICAgICAgICA5NTk2OTAgICAgICAgIDExNTE2MjguMA0KDQoyMjowNjoxNy43NjQgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjI6MTAxNjg1NzQ3ICAgICAgICAgICAgICAxLjAgICAgICAgICAgICAgICAxMTY5MDgwICAgICAgICAxMTY5MDgwLjANCg0KMjI6MDY6MjcuNzY0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIyOjE2NTM1NjYwMyAgICAgICAgICAgICAgMS4yICAgICAgICAgICAgICAgMTM4MTM0MCAgICAgICAgMTE4NDAwNS43DQoNCjIyOjA2OjM3Ljc2NCBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMjoyMjgyMzEzNjAgICAgICAgICAgICAgIDEuMyAgICAgICAgICAgICAgIDE1OTA5MzAgICAgICAgIDExOTMxOTcuNQ0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCjIyOjEyOjU3Ljc4MyBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMjE6MzUwNDM2MDEgICAgICAgICAgICAgIDcuNyAgICAgICAgICAgICAgIDkzNzcyMzAgICAgICAgIDEyMjMwNjYuNA0KDQoyMjoxMzowNy43ODMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjIyOjQ4MTQ5MTI2ICAgICAgICAgICAgICA3LjggICAgICAgICAgICAgICA5NTc2NjYwICAgICAgICAxMjIyNTAyLjkNCg0KMjI6MTM6MTcuNzgzIElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyWDo2MDI3OTYzNiAgICAgICAgICAgICAgOC4wICAgICAgICAgICAgICAgOTc4NjUwMCAgICAgICAgMTIyMzI2NC4xDQoNCjIyOjEzOjI3Ljc4MyBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyWDoxMjM1ODg4OTEgICAgICAgICAgICAgIDguMiAgICAgICAgICAgICAgIDk5OTc1NDAgICAgICAgIDEyMjQxNDEuMQ0KDQoyMjoxMzozNy43ODMgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBjaHJZOjI3MzY1NzAxICAgICAgICAgICAgICA4LjMgICAgICAgICAgICAgIDEwMTk2OTQwICAgICAgICAxMjIzNTg2LjMNCg0KDQoyMjoxMzo0My4wNTkgSU5GTyAgSGFwbG90eXBlQ2FsbGVyIC0gMjUwMTQgcmVhZChzKSBmaWx0ZXJlZCBieToNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uDQoNCjIyOjEzOjQzLjA1OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgIGNock06MTUwMDEgICAgICAgICAgICAgIDguNCAgICAgICAgICAgICAgMTAyOTY1MzUgICAgICAgIDEyMjI2MzYuNQ0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KW01hcmNoIDMwLCAyMDE5IDEwOjEzOjQzIFBNIFVUQ10gb3JnLmJyb2FkaW5zdGl0dXRlLmhlbGxiZW5kZXIudG9vbHMud2Fsa2Vycy5oYXBsb3R5cGVjYWxsZXIuSGFwbG90eXBlQ2FsbGVyIGRvbmUuIEVsYXBzZWQgdGltZTogOC40MyBtaW51dGVzLg0KDQpSdW50aW1lLnRvdGFsTWVtb3J5KCk9MTI2MDM4ODM1Mg0KDQoNCiMjIyMgVmVyZnkgYWRkaXRpb25hbCBjb250ZW50czogIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24kIGxzIC1sDQoNCi1ydy1ydy1yLS0gMSB1YnVudHUgdWJ1bnR1ICAgICAxMjAxMDQgTWFyIDMwIDIyOjEzIGN0YXRfbXV0YXRpb25fY2FsbGVkX3ZhcmlhbnRzLnZjZg0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgIDIzNTY2IE1hciAzMCAyMjoxMyBjdGF0X211dGF0aW9uX2NhbGxlZF92YXJpYW50cy52Y2YuaWR4DQoNCg0KDQojIyBWYXJpYW50IGZpbHRyYXRpb24gaW4gdGhlIGFic2VuY2Ugb2YgYSAicHJvcGVyIHJlZmVyZW5jZSIgdXNpbmcgY2VydGFpbiBjcml0ZXJpYQ0KDQoNCg0KIyMjICB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBnYXRrIFZhcmlhbnRGaWx0cmF0aW9uIC1SIHJlZl9nZW5vbWUuZmEgLVYgY3RhdF9tdXRhdGlvbl9jYWxsZWRfdmFyaWFudHMudmNmIC13aW5kb3cgMzUgLWNsdXN0ZXIgMyAtLWZpbHRlci1uYW1lIEZTIC1maWx0ZXIgIkZTID4gMzAuMCIgLU8gY3RhdF9tdXRhdGlvbl9maWx0ZXJlZF9jYWxsZWRfdmFyaWFudHMudmNmDQoNClVzaW5nIEdBVEsgamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KUnVubmluZzoNCg0KICAgIGphdmEgLURzYW1qZGsudXNlX2FzeW5jX2lvX3JlYWRfc2FtdG9vbHM9ZmFsc2UgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3NhbXRvb2xzPXRydWUgLURzYW1qZGsudXNlX2FzeW5jX2lvX3dyaXRlX3RyaWJibGU9ZmFsc2UgLURzYW1qZGsuY29tcHJlc3Npb25fbGV2ZWw9MiAtamFyIC9ob21lL3VidW50dS9taW5pY29uZGEzL3NoYXJlL2dhdGs0LTQuMS4xLjAtMC9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXIgVmFyaWFudEZpbHRyYXRpb24gLVIgcmVmX2dlbm9tZS5mYSAtViBjdGF0X211dGF0aW9uX2NhbGxlZF92YXJpYW50cy52Y2YgLXdpbmRvdyAzNSAtY2x1c3RlciAzIC0tZmlsdGVyLW5hbWUgRlMgLWZpbHRlciBGUyA+IDMwLjAgLU8gY3RhdF9tdXRhdGlvbl9maWx0ZXJlZF9jYWxsZWRfdmFyaWFudHMudmNmDQogICAgDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KKioyMjoyNTo0OS45ODcgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDU4NiB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4qKg0KDQoyMjoyNTo1MC4wOTMgSU5GTyAgVmFyaWFudEZpbHRyYXRpb24gLSBTaHV0dGluZyBkb3duIGVuZ2luZQ0KDQpbTWFyY2ggMzAsIDIwMTkgMTA6MjU6NTAgUE0gVVRDXSBvcmcuYnJvYWRpbnN0aXR1dGUuaGVsbGJlbmRlci50b29scy53YWxrZXJzLmZpbHRlcnMuVmFyaWFudEZpbHRyYXRpb24gZG9uZS4gRWxhcHNlZCB0aW1lOiAwLjAxIG1pbnV0ZXMuDQoNClJ1bnRpbWUudG90YWxNZW1vcnkoKT0xMTY0OTY3OTM2DQoNCg0KDQoNCiMjIyMgVmVyaWZ5IGFkZGl0aW9uYWwgY29udGVudHM6ICB+L0NUQVQtbXV0YXRpb24tdHV0b3JpYWwvc2Vjb25kX2FsaWduJCBscyAtbA0KDQotcnctcnctci0tIDEgdWJ1bnR1IHVidW50dSAgICAgMTIzNTYzIE1hciAzMCAyMjoyNSBjdGF0X211dGF0aW9uX2ZpbHRlcmVkX2NhbGxlZF92YXJpYW50cy52Y2YNCg0KLXJ3LXJ3LXItLSAxIHVidW50dSB1YnVudHUgICAgICAyMzU3NSBNYXIgMzAgMjI6MjUgY3RhdF9tdXRhdGlvbl9maWx0ZXJlZF9jYWxsZWRfdmFyaWFudHMudmNmLmlkeA0KDQoNCiMjIyMgIH4vQ1RBVC1tdXRhdGlvbi10dXRvcmlhbC9zZWNvbmRfYWxpZ24kIGJjZnRvb2xzIHN0YXRzIGN0YXRfbXV0YXRpb25fY2FsbGVkX3ZhcmlhbnRzLnZjZiB8IGhlYWQgLTIwDQoNCmBgYA0KDQpTTiwgU3VtbWFyeSBudW1iZXJzOiANCiANClNOCVsyXWlkCSAgICAgICAgWzNda2V5CSAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQogDQpTTgkwCW51bWJlciBvZiBzYW1wbGVzOgkgICAgICAgICAgICAgICAgICAgICAgICAxDQoNClNOCTAJbnVtYmVyIG9mIHJlY29yZHM6ICAgICAgCSAgICAgICAgICAgICAgICA1ODYNCg0KU04JMAludW1iZXIgb2Ygbm8tQUxUczoJICAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTgkwCW51bWJlciBvZiBTTlBzOgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTY3DQoNClNOCTAJbnVtYmVyIG9mIE1OUHM6CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOCTAJbnVtYmVyIG9mIGluZGVsczoJICAgICAgICAgICAgICAgICAgICAgICAgMTkNCg0KU04JMAludW1iZXIgb2Ygb3RoZXJzOgkgICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOCTAJbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBzaXRlczoJICAgICAgICAgICAgICAgIDENCg0KU04JMAludW1iZXIgb2YgbXVsdGlhbGxlbGljIFNOUCBzaXRlczoJICAgICAgICAwDQoNCg0KVFNUViwgdHJhbnNpdGlvbnMvdHJhbnN2ZXJzaW9uczoNCg0KVFNUVglbMl1pZAlbM110cwlbNF10dglbNV10cy90dglbNl10cyAoMXN0IEFMVCkJWzdddHYgKDFzdCBBTFQpCVs4XXRzL3R2ICgxc3QgQUxUKQ0KDQpUU1RWCTAJNDQ5CTExOAkzLjgxCSAgICAgICAgICAgICAgICAgICAgICAgIDQ0OQkgICAgICAgIDExOAkgICAgICAgIDMuODENCg0KYGBgDQoNCg0KIyMjIyAgfi9DVEFULW11dGF0aW9uLXR1dG9yaWFsL3NlY29uZF9hbGlnbiQgYmNmdG9vbHMgc3RhdHMgY3RhdF9tdXRhdGlvbl9maWx0ZXJlZF9jYWxsZWRfdmFyaWFudHMudmNmIHwgaGVhZCAtMjANCg0KYGBgDQoNClNOLCBTdW1tYXJ5IG51bWJlcnM6DQoNClNOCVsyXWlkCSAgICAgICAgWzNda2V5CSAgICAgICAgICAgICAgICAgICAgICAgIFs0XXZhbHVlDQoNClNOCTAJbnVtYmVyIG9mIHNhbXBsZXM6CSAgICAgICAgICAgICAgICAgICAgICAgIDENCg0KU04JMAludW1iZXIgb2YgcmVjb3JkczoJICAgICAgICAgICAgICAgICAgICAgICAgNTg2DQoNClNOCTAJbnVtYmVyIG9mIG5vLUFMVHM6CSAgICAgICAgICAgICAgICAgICAgICAgIDANCg0KU04JMAludW1iZXIgb2YgU05QczoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDU2Nw0KDQpTTgkwCW51bWJlciBvZiBNTlBzOgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTgkwCW51bWJlciBvZiBpbmRlbHM6CSAgICAgICAgICAgICAgICAgICAgICAgIDE5DQoNClNOCTAJbnVtYmVyIG9mIG90aGVyczoJICAgICAgICAgICAgICAgICAgICAgICAgMA0KDQpTTgkwCW51bWJlciBvZiBtdWx0aWFsbGVsaWMgc2l0ZXM6CSAgICAgICAgICAgICAgICAxDQoNClNOCTAJbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6CSAgICAgICAgMA0KDQoNClRTVFYsIHRyYW5zaXRpb25zL3RyYW5zdmVyc2lvbnM6DQoNClRTVFYJWzJdaWQJWzNddHMJWzRddHYJWzVddHMvdHYJWzZddHMgKDFzdCBBTFQpCVs3XXR2ICgxc3QgQUxUKQlbOF10cy90diAoMXN0IEFMVCkNCg0KVFNUVgkwCTQ0OQkxMTgJMy44MQkgICAgICAgICAgICAgICAgICAgICAgICA0NDkJICAgICAgICAxMTgJICAgICAgICAzLjgxDQoNCmBgYA0KDQoNCg==