1. Relevant notes
-The panel of normals not only represents common germline variant sites, it presents commonly noisy sites in sequencing data, e.g. mapping artifacts or other somewhat random but systematic artifacts of sequencing.
-When using a population germline resource, consider adjusting the –af-of-alleles-not-in-resource parameter from its default of 0.001.
-For example, the gnomAD resource af-only-gnomad_grch38.vcf.gz represents ~200k exomes and ~16k genomes and the tutorial data is exome data, so we adjust –af-of-alleles-not-in-resource to 0.0000025 which corresponds to 1/(2*exome samples).
-The default of 0.001 is appropriate for human sample analyses without any population resource. It is based on the human average rate of heterozygosity.
-The population allele frequencies (POP_AF) and the af-of-alleles-not-in-resource factor in probability calculations of the variant being somatic.
-Tutorial uses BAM files which are generated aligning the Fastq files to the hg38 reference genome using bwa mem algorithm.
-The normal and tumor BAM files will be used to discriminate the exclusive presence of mutation in the tumor tissues
3. Obtain the data (genome/reference and analysis datasets) and check contents
Extract the data into a directory named /home/b0d2647/gatk_data_ref
~/gatk_data_ref$ ls -l
drwxr-xr-x 4 b0d2647 b0d2647 4096 Apr 20 18:27 gatk_mutect2
(base) b0d2647@vcpu4-16gb:~/gatk_data_ref/gatk_mutect2$ ls -l
-rw-r–r– 1 b0d2647 b0d2647 607714 Jan 18 2018 4_NA19771.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 28618 Jan 18 2018 4_NA19771.vcf.gz.tbi
-rw-r–r– 1 b0d2647 b0d2647 754824 Jan 18 2018 5_HG02759.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 25282 Jan 18 2018 5_HG02759.vcf.gz.tbi
-rw-r–r– 1 b0d2647 b0d2647 3744912 Jan 18 2018 HG00190.bai
-rw-r–r– 1 b0d2647 b0d2647 373599558 Jan 18 2018 HG00190.bam
-rw-r–r– 1 b0d2647 b0d2647 757396 Jan 19 2018 chr17plus.interval_list
-rw-r–r– 1 b0d2647 b0d2647 2126864 Jan 18 2018 normal.bai
-rw-r–r– 1 b0d2647 b0d2647 437801420 Jan 18 2018 normal.bam
drwxrwxr-x 2 b0d2647 b0d2647 4096 Apr 20 18:47 output
drwxr-xr-x 2 b0d2647 b0d2647 4096 Apr 19 21:55 resources
-rw-r–r– 1 b0d2647 b0d2647 255301 Jan 18 2018 somatic_m2.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 34573 Jan 18 2018 somatic_m2.vcf.gz.tbi
-rw-r–r– 1 b0d2647 b0d2647 2096768 Jan 18 2018 tumor.bai
-rw-r–r– 1 b0d2647 b0d2647 567033677 Jan 18 2018 tumor.bam
-rw-r–r– 1 b0d2647 b0d2647 15312 Jan 18 2018 tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 b0d2647 b0d2647 78 Jan 18 2018 tumor_calculatecontamination.table
~/gatk_data_ref/gatk_mutect2$ ls -l resources/
-rw-r–r– 1 b0d2647 b0d2647 112767707 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 73800 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz.tbi
-rw-r–r– 1 b0d2647 b0d2647 594252 Jan 18 2018 chr17_m2pon.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 42439 Jan 18 2018 chr17_m2pon.vcf.gz.tbi
-rw-r–r– 1 b0d2647 b0d2647 100230 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz
-rw-r–r– 1 b0d2647 b0d2647 11629 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz.tbi
~/gatk_data_ref/gatk_mutect2$ ls -l output/
-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt
-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt
-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt
-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt
-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz
-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary
-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi
-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz
-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats
-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi
-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai
-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam
-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz
-rw-r–r– 1 root root 35 Apr 20 15:40 3_HG00190.vcf.gz.stats
-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi
-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz
-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi
-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table
-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table
-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz
-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv
-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi
** Our output should be similar to what is in the output folder.
4. Mount the data volume (i.e., gatk_data_ref) as ‘gatk_analysis’ in docker and check contents
b0d2647@vcpu4-16gb:~$ sudo docker run -v /home/b0d2647/gatk_data_ref/:/gatk/gatk_analysis -it broadinstitute/gatk:4.1.1.0
Docker contents
-rw-r–r– 1 root root 3635 Mar 28 23:43 GATKConfig.EXAMPLE.properties
-rw-r–r– 1 root root 37870 Mar 28 23:43 README.md
-rwxr-xr-x 1 root root 19494 Mar 28 23:43 gatk
-rw-r–r– 1 root root 836229 Mar 28 23:43 gatk-completion.sh
-rw-r–r– 1 root root 282832421 Mar 28 23:43 gatk-package-4.1.1.0-local.jar
-rw-r–r– 1 root root 137266125 Mar 28 23:43 gatk-package-4.1.1.0-spark.jar
lrwxrwxrwx 1 root root 36 Mar 28 23:45 gatk-spark.jar -> /gatk/gatk-package-4.1.1.0-spark.jar
lrwxrwxrwx 1 root root 36 Mar 28 23:46 gatk.jar -> /gatk/gatk-package-4.1.1.0-local.jar
-rw-r–r– 1 root root 114783 Mar 28 23:43 gatkPythonPackageArchive.zip
drwxrwxr-x 3 1002 1003 4096 Apr 20 11:51 gatk_analysis
-rw-r–r– 1 root root 964 Mar 28 23:43 gatkcondaenv.yml
drwxr-xr-x 2 root root 69632 Mar 28 23:43 gatkdoc
-rw-r–r– 1 root root 53 Mar 28 23:49 gatkenv.rc
-rw-r–r– 1 root root 1984 Mar 28 23:46 install_R_packages.R
-rw-r–r– 1 root root 648 Mar 28 23:46 run_unit_tests.sh
drwxr-xr-x 5 root root 4096 Mar 28 23:44 scripts
(gatk) root@4f080bb9249f:/gatk/gatk_analysis/gatk_mutect2# ls -l
-rw-r–r– 1 1002 1003 607714 Jan 18 2018 4_NA19771.vcf.gz
-rw-r–r– 1 1002 1003 28618 Jan 18 2018 4_NA19771.vcf.gz.tbi
-rw-r–r– 1 1002 1003 754824 Jan 18 2018 5_HG02759.vcf.gz
-rw-r–r– 1 1002 1003 25282 Jan 18 2018 5_HG02759.vcf.gz.tbi
-rw-r–r– 1 1002 1003 3744912 Jan 18 2018 HG00190.bai
-rw-r–r– 1 1002 1003 373599558 Jan 18 2018 HG00190.bam
-rw-r–r– 1 1002 1003 757396 Jan 19 2018 chr17plus.interval_list
-rw-r–r– 1 1002 1003 2126864 Jan 18 2018 normal.bai
-rw-r–r– 1 1002 1003 437801420 Jan 18 2018 normal.bam
drwxr-xr-x 2 1002 1003 4096 Apr 19 21:55 precomputed
drwxr-xr-x 2 1002 1003 4096 Apr 19 21:55 resources
-rw-r–r– 1 1002 1003 255301 Jan 18 2018 somatic_m2.vcf.gz
-rw-r–r– 1 1002 1003 34573 Jan 18 2018 somatic_m2.vcf.gz.tbi
-rw-r–r– 1 1002 1003 2096768 Jan 18 2018 tumor.bai
-rw-r–r– 1 1002 1003 567033677 Jan 18 2018 tumor.bam
-rw-r–r– 1 1002 1003 15312 Jan 18 2018 tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 1002 1003 78 Jan 18 2018 tumor_calculatecontamination.table
(gatk) root@4f080bb9249f:/gatk/gatk_analysis/gatk_mutect2# ls -l resources/
-rw-r–r– 1 1002 1003 112767707 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz
-rw-r–r– 1 1002 1003 73800 Jan 18 2018 chr17_af-only-gnomad_grch38.vcf.gz.tbi
-rw-r–r– 1 1002 1003 594252 Jan 18 2018 chr17_m2pon.vcf.gz
-rw-r–r– 1 1002 1003 42439 Jan 18 2018 chr17_m2pon.vcf.gz.tbi
-rw-r–r– 1 1002 1003 100230 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz
-rw-r–r– 1 1002 1003 11629 Jan 18 2018 chr17_small_exac_common_3_grch38.vcf.gz.tbi
(gatk) root@4f080bb9249f:/gatk/gatk_analysis/gatk_mutect2# ls -l precomputed/
total 4456 -rw-r–r– 1 1002 1003 17688 Jan 18 2018 10_tumor_artifact.bait_bias_detail_metrics.txt
-rw-r–r– 1 1002 1003 1881 Jan 18 2018 10_tumor_artifact.bait_bias_summary_metrics.txt
-rw-r–r– 1 1002 1003 1260 Jan 18 2018 10_tumor_artifact.error_summary_metrics.txt
-rw-r–r– 1 1002 1003 14214 Jan 18 2018 10_tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 1002 1003 1895 Jan 18 2018 10_tumor_artifact.pre_adapter_summary_metrics.txt
-rw-r–r– 1 1002 1003 297267 Jan 18 2018 11_somatic_twicefiltered.vcf.gz
-rw-r–r– 1 1002 1003 358 Jan 18 2018 11_somatic_twicefiltered.vcf.gz.summary
-rw-r–r– 1 1002 1003 34588 Jan 18 2018 11_somatic_twicefiltered.vcf.gz.tbi
-rw-r–r– 1 1002 1003 39765 Jan 18 2018 1_somatic_m2.vcf.gz
-rw-r–r– 1 1002 1003 1535 Jan 18 2018 1_somatic_m2.vcf.gz.tbi
-rw-r–r– 1 1002 1003 84304 Jan 18 2018 2_tumor_normal_m2.bai
-rw-r–r– 1 1002 1003 2673966 Jan 18 2018 2_tumor_normal_m2.bam
-rw-r–r– 1 1002 1003 855035 Jan 18 2018 3_HG00190.vcf.gz
-rw-r–r– 1 1002 1003 35118 Jan 18 2018 3_HG00190.vcf.gz.tbi
-rw-r–r– 1 1002 1003 85870 Jan 18 2018 6_threesamplepon.vcf.gz
-rw-r–r– 1 1002 1003 17558 Jan 18 2018 6_threesamplepon.vcf.gz.tbi
-rw-r–r– 1 1002 1003 53913 Jan 18 2018 7_tumor_getpileupsummaries.table
-rw-r–r– 1 1002 1003 79 Jan 18 2018 8_tumor_calculatecontamination.table
-rw-r–r– 1 1002 1003 267160 Jan 18 2018 9_somatic_oncefiltered.vcf.gz
-rw-r–r– 1 1002 1003 34630 Jan 18 2018 9_somatic_oncefiltered.vcf.gz.tbi
5. Create a sites-only panel of normal (PoN) with CreateSomaticPanelOfNormals
First, run gatk Mutect2 in tumor-only mode on each normal sample to call all detectable variants: Needs an interval list
(gatk) root@b19fa3f61650:/gatk/gatk_analysis/gatk_mutect2# cat chr17plus.interval_list | head -n 3
@HD VN:1.5 SO:unsorted
@SQ SN:chr1 LN:248956422 UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa AS:GRCh38 M5:6aef897c3d6ff0c78aff06ac189178dd SP:Human
@SQ SN:chr2 LN:242193529 UR:ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/technical/reference/GRCh38_reference_genome/GRCh38_full_analysis_set_plus_decoy_hla.fa AS:GRCh38 M5:f98db672eb0993dcfdabafe2a882905c SP:Human
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk Mutect2
-R Homo_sapiens_assembly38.fasta
-I gatk_mutect2/HG00190.bam
-tumor gatk_mutect2/HG00190.bam
--disable-read-filter MateOnSameContigOrNoMappedMateReadFilter
--intervals gatk_mutect2/chr17plus.interval_list
-O gatk_mutect2/output/3_HG00190.vcf.gz
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
…………………………
15:29:32.805 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute
15:29:42.851 INFO ProgressMeter - chr11:949097 0.2 200 1194.5
15:29:52.853 INFO ProgressMeter - chr17:233216 0.3 1970 5895.8
……………………
15:39:44.569 INFO ProgressMeter - chr17:80482649 10.2 326990 32070.2
15:39:54.589 INFO ProgressMeter - chr17:81892061 10.4 333070 32140.1
15:40:04.607 INFO ProgressMeter - chr11_KI270927v1_alt:80173 10.5 339170 32209.8
15:40:13.546 INFO Mutect2 -
934638 read(s) filtered by: (((((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter)AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonChimericOriginalAlignmentReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND ReadLengthReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)
…………………….
517298 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
517298 read(s) filtered by: MappingQualityReadFilter
3089 read(s) filtered by: NotSecondaryAlignmentReadFilter
414251 read(s) filtered by: NotDuplicateReadFilter
15:40:13.546 INFO ProgressMeter - HLA-A*24:03:01:2176 10.7 339828 31822.0
15:40:13.546 INFO ProgressMeter - Traversal complete. Processed 339828 total regions in 10.7 minutes.
Additional directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz
-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi
Run gatk CreateSomaticPanelOfNormals on the mutect2 output
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CreateSomaticPanelOfNormals
-V gatk_mutect2/output/3_HG00190.vcf.gz
-O gatk_mutect2/output/6_HG0190_pon.vcf.gz
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
…………..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: CreateSomaticPanelOfNormals is a BETA tool and is not yet ready for use in production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
………………….
17:01:10.342 INFO ProgressMeter - chr17:83057965 0.0 38386 2262436.1
17:01:10.342 INFO ProgressMeter - Traversal complete. Processed 38386 total variants in 0.0 minutes.
Additional directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz
-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi
6. call mutations in the tumor in somatic mode.
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk Mutect2
-R Homo_sapiens_assembly38.fasta
-I gatk_mutect2/tumor.bam
-I gatk_mutect2/normal.bam
-tumor HCC1143_tumor
-normal HCC1143_normal
-pon gatk_mutect2/resources/chr17_m2pon.vcf.gz
--germline-resource gatk_mutect2/resources/chr17_af-only-gnomad_grch38.vcf.gz
--af-of-alleles-not-in-resource 0.0000025
--disable-read-filter MateOnSameContigOrNoMappedMateReadFilter
-L gatk_mutect2/chr17plus.interval_list
-O gatk_mutect2/output/1_somatic_m2.vcf.gz
-bamout gatk_mutect2/output/2_tumor_normal_m2.bam
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
14:09:39.146 INFO ProgressMeter - Current Locus Elapsed Minutes Regions Processed Regions/Minute
14:09:49.154 INFO ProgressMeter - chr11:1073081 0.2 580 3477.9
14:09:59.265 INFO ProgressMeter - chr17:1678328 0.3 6540 19504.9
………..
14:14:10.085 INFO ProgressMeter - chr17:80459262 4.5 274360 60757.6
14:14:20.085 INFO ProgressMeter - chr17:82493081 4.7 281520 60124.1
14:14:29.317 INFO Mutect2 -
2495430 read(s) filtered by: (((((((((((MappingQualityReadFilter AND MappingQualityAvailableReadFilter) AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND NotSecondaryAlignmentReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonChimericOriginalAlignmentReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND ReadLengthReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)
1093427 read(s) filtered by: (MappingQualityReadFilter AND MappingQualityAvailableReadFilter)
1093427 read(s) filtered by: MappingQualityReadFilter
1402003 read(s) filtered by: NotDuplicateReadFilter
14:14:29.317 INFO ProgressMeter - HLA-A*24:03:01:2615 4.8 285005 58931.8
14:14:29.317 INFO ProgressMeter - Traversal complete. Processed 285005 total regions in 4.8 minutes.
Additional direcory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
total 1792
-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz
-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats
-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi
-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai
-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam
(gatk) root@7e308457ded6:/gatk/gatk_analysis# cat gatk_mutect2/output/1_somatic_m2.vcf.gz.stats
statistic value
callable 4810864.0
(base) b0d2647@vcpu4-16gb:~/gatk_data_ref/gatk_mutect2$ zcat output/1_somatic_m2.vcf.gz | awk ‘$5 ~“,”’ | head -n 2
chr17 8513688 . GTT G,GT . . DP=298;ECNT=1;MBQ=30,29,31;MFRL=160,158,151;MMQ=60,60,60;MPOS=21,24;NALOD=0.099,-7.345e+01;NLOD
=9.03,-7.382e+01;PON;POPAF=2.49,0.365;RPA=13,11,12;RU=T;STR;TLOD=4.92,215.42 GT:AD:AF:DP:F1R2:F2R1:SB 0/0:42,2,41:0.025,0.496:85:24,0,18:13,2
,22:11,31,13,30 0/1/2:11,8,101:0.056,0.859:120:5,3,36:4,4,54:6,5,26,83
chr17 17869308 . GAAAA G,GAAAAA . . DP=60;ECNT=1;MBQ=32,20,32;MFRL=136,97,144;MMQ=60,60,60;MPOS=29,28;NALOD=0.610,-
4.399e+00;NLOD=2.92,-3.482e+00;PON;POPAF=1.77,2.95;RPA=15,11,16;RU=A;STR;TLOD=3.06,14.28 GT:AD:AF:DP:F1R2:F2R1:SB 0/0:9,1,3:0.097,0.269:1
3:5,1,1:3,0,1:8,1,1,3 0/1/2:10,2,12:0.095,0.530:24:2,2,3:7,0,9:5,5,11,3
8. run GetPileupSummaries on the tumor BAM to summarize read support for a set of number of known variant sites.
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk GetPileupSummaries
-I gatk_mutect2/tumor.bam
-V gatk_mutect2/resources/chr17_small_exac_common_3_grch38.vcf.gz
-L gatk_mutect2/chr17plus.interval_list
-O gatk_mutect2/output/7_tumor_getpileupsummaries.table
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: GetPileupSummaries is a BETA tool and is not yet ready for use in production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
…………
17:24:14.981 INFO ProgressMeter - Current Locus Elapsed Minutes Loci Processed Loci/Minute
17:24:24.986 INFO ProgressMeter - chr17:7024112 0.2 1093000 6555377.8
………..
17:25:04.996 INFO ProgressMeter - chr17:80627464 0.8 9299000 11155453.4
17:25:07.921 INFO GetPileupSummaries - 1509862 read(s) filtered by: (((((((((MappingQualityAvailableReadFilter AND MappingQualityNotZeroReadFilter) AND MappedReadFilter) AND PrimaryLineReadFilter) AND NotDuplicateReadFilter) AND PassesVendorQualityCheckReadFilter) AND NonZeroReferenceLengthAlignmentReadFilter) AND MateOnSameContigOrNoMappedMateReadFilter) AND GoodCigarReadFilter) AND WellformedReadFilter)
..................
569508 read(s) filtered by: MappingQualityNotZeroReadFilter
22590 read(s) filtered by: PrimaryLineReadFilter
902676 read(s) filtered by: NotDuplicateReadFilter
1 read(s) filtered by: NonZeroReferenceLengthAlignmentReadFilter
15087 read(s) filtered by: MateOnSameContigOrNoMappedMateReadFilter
17:25:07.922 INFO ProgressMeter - chr11_KI270927v1_alt:91433 0.9 9906217 11227083.4
17:25:07.922 INFO ProgressMeter - Traversal complete. Processed 9906217 total loci in 0.9 minutes.
Additinal directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table
9. Calculate Contamination
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CalculateContamination
-I gatk_mutect2/output/7_tumor_getpileupsummaries.table
-O gatk_mutect2/output/8_tumor_calculatecontamination.table
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
…………….
17:35:01.223 WARN KernelSegmenter - Specified dimension of the kernel approximation (100) exceeds the number of data points (20) to segment; using all data points to calculate kernel matrix.
…………..
Tool returned: SUCCESS
Additinal directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table
-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz
10. Filter Mutect Calls
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk FilterMutectCalls
-R Homo_sapiens_assembly38.fasta
-V gatk_mutect2/output/1_somatic_m2.vcf.gz
--contamination-table gatk_mutect2/output/8_tumor_calculatecontamination.table
-O gatk_mutect2/output/9_somatic_oncefiltered.vcf.gz
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
17:53:14.449 INFO FeatureManager - Using codec VCFCodec to read file file:///gatk/gatk_analysis/gatk_mutect2/output/1_somatic_m2.vcf.gz
……..
17:53:15.087 INFO ProgressMeter - Current Locus Elapsed Minutes Variants Processed Variants/Minute
17:53:15.088 INFO FilterMutectCalls - Starting pass 0 through the variants
17:53:15.423 INFO FilterMutectCalls - Finished pass 0 through the variants
………………….
17:53:15.726 INFO FilterMutectCalls - No variants filtered by: AllowAllVariantsVariantFilter
17:53:15.726 INFO FilterMutectCalls - No reads filtered by: AllowAllReadsReadFilter
17:53:15.726 INFO ProgressMeter - unmapped 0.0 333 31267.6
17:53:15.726 INFO ProgressMeter - Traversal complete. Processed 333 total variants in 0.0 minutes.
Additinal directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz
-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv
-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi
11. Collect Sequencing Artifact Metrics
(gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk CollectSequencingArtifactMetrics
-R Homo_sapiens_assembly38.fasta
-I gatk_mutect2/tumor.bam
-O gatk_mutect2/output/10_tumor_artifact
-FILE_EXTENSION ".txt"
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
INFO 2019-04-20 18:09:58 SinglePassSamProgram Processed 1,000,000 records. Elapsed time: 00:00:48s. Time for last 1,000,000: 44s. Last read position: chr17:9,242,127
………….
INFO 2019-04-20 18:10:45 SinglePassSamProgram Processed 6,000,000 records. Elapsed time: 00:01:35s. Time for last 1,000,000: 17s. Last read position: chr17_KI270908v1_alt:1,059,821
[Sat Apr 20 18:10:47 UTC 2019] picard.analysis.artifacts.CollectSequencingArtifactMetrics done. Elapsed time: 1.64 minutes.
Additinal directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt
-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt
-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt
-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt
(gatk) root@7e308457ded6:/gatk/gatk_analysis# cat gatk_mutect2/output/10_tumor_artifact.pre_adapter_summary_metrics.txt | head -n 17
SAMPLE_ALIAS LIBRARY REF_BASE ALT_BASE TOTAL_QSCORE WORST_CXT WORST_CXT_QSCORE WORST_PRE_CXT WORST_PRE_CXT_QSCORE W
ORST_POST_CXT WORST_POST_CXT_QSCORE ARTIFACT_NAME
HCC1143_tumor Pond-147580 A C 60 TAC 46 AAN 53 NAC 49 NA
HCC1143_tumor Pond-147580 A G 49 CAT 42 CAN 46 NAT 46 NA
HCC1143_tumor Pond-147580 A T 100 CAC 47 AAN 100 NAA 100 NA
HCC1143_tumor Pond-147580 C A 100 ACA 100 ACN 100 NCA 100 NA
HCC1143_tumor Pond-147580 C G 100 GCA 41 GCN 47 NCA 53 NA
HCC1143_tumor Pond-147580 C T 46 ACG 37 ACN 42 NCA 45 Deamination
HCC1143_tumor Pond-147580 G A 100 CGA 42 AGN 100 NGA 100 NA
HCC1143_tumor Pond-147580 G C 51 AGG 41 AGN 45 NGT 45 NA
HCC1143_tumor Pond-147580 G T 36 CGC 33 CGN 35 NGA 35 OxoG
HCC1143_tumor Pond-147580 T A 47 CTA 42 CTN 45 NTA 44 NA
12. Filter By Orientation Bias
#### (gatk) root@7e308457ded6:/gatk/gatk_analysis# gatk FilterByOrientationBias
-V gatk_mutect2/output/9_somatic_oncefiltered.vcf.gz
-P gatk_mutect2/output/10_tumor_artifact.pre_adapter_detail_metrics.txt
-O gatk_mutect2/output/11_somatic_twicefiltered.vcf.gz
Using GATK jar /gatk/gatk-package-4.1.1.0-local.jar
……..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Warning: FilterByOrientationBias is an EXPERIMENTAL tool and should not be used for production !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
………………
18:47:58.174 INFO ProgressMeter - Current Locus Elapsed Minutes Records Processed Records/Minute
18:47:58.179 INFO ProgressMeter - unmapped 0.0 222 3330000.0
18:47:58.179 INFO ProgressMeter - Traversal complete. Processed 222 total records in 0.0 minutes.
18:47:58.186 INFO OrientationBiasFilterer - HCC1143_normal: Nothing to filter.
18:47:58.199 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (G>T) pre-preAdapterQ: 0 of 2
18:47:58.200 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (C>A) pre-preAdapterQ: -1 of 0
18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (total) pre-preAdapterQ: -1
18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (G>T) post-preAdapterQ: 0
18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Cutting (C>A) post-preAdapterQ: -1
18:47:58.201 INFO OrientationBiasFilterer - HCC1143_tumor: Adding orientation bias filter results to genotypes…
18:47:58.202 INFO OrientationBiasFilterer - Passing: HCC1143_tumor G* T p=7.0391265039049244E-9 Fob=0.38461538461538464
18:47:58.203 INFO OrientationBiasFilterer - Passing: HCC1143_tumor G* T p=0.0 Fob=0.5555555555555556
18:47:58.203 INFO OrientationBiasFilterer - Updating genotypes and creating final list of variants…
18:47:58.204 INFO ProgressMeter - Starting traversal
18:47:58.204 INFO ProgressMeter - Current Locus Elapsed Minutes Records Processed Records/Minute
18:47:58.206 INFO ProgressMeter - unmapped 0.0 111 3330000.0
18:47:58.206 INFO ProgressMeter - Traversal complete. Processed 111 total records in 0.0 minutes.
18:47:58.206 INFO FilterByOrientationBias - Writing variants to VCF…
18:47:58.268 INFO FilterByOrientationBias - Writing a simple summary table…
Additinal directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz
-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary
-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi
(gatk) root@7e308457ded6:/gatk/gatk_analysis# zcat gatk_mutect2/output/11_somatic_twicefiltered.vcf.gz | grep -v ‘#’ | awk ‘$7==“PASS”’ | wc -l
24
13. Record variant statistics
14. Output directory contents
(gatk) root@7e308457ded6:/gatk/gatk_analysis# ls -l gatk_mutect2/output/
-rw-r–r– 1 root root 17649 Apr 20 18:10 10_tumor_artifact.bait_bias_detail_metrics.txt
-rw-r–r– 1 root root 1842 Apr 20 18:10 10_tumor_artifact.bait_bias_summary_metrics.txt
-rw-r–r– 1 root root 1221 Apr 20 18:10 10_tumor_artifact.error_summary_metrics.txt
-rw-r–r– 1 root root 14175 Apr 20 18:10 10_tumor_artifact.pre_adapter_detail_metrics.txt
-rw-r–r– 1 root root 1856 Apr 20 18:10 10_tumor_artifact.pre_adapter_summary_metrics.txt
-rw-r–r– 1 root root 47102 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz
-rw-r–r– 1 root root 247 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.summary
-rw-r–r– 1 root root 1293 Apr 20 18:47 11_somatic_twicefiltered.vcf.gz.tbi
-rw-r–r– 1 root root 41959 Apr 20 14:14 1_somatic_m2.vcf.gz
-rw-r–r– 1 root root 35 Apr 20 14:14 1_somatic_m2.vcf.gz.stats
-rw-r–r– 1 root root 1286 Apr 20 14:14 1_somatic_m2.vcf.gz.tbi
-rw-r–r– 1 root root 69584 Apr 20 14:14 2_tumor_normal_m2.bai
-rw-r–r– 1 root root 1709147 Apr 20 14:14 2_tumor_normal_m2.bam
-rw-r–r– 1 root root 1450207 Apr 20 15:40 3_HG00190.vcf.gz
-rw-r–r– 1 root root 35 Apr 20 15:40 3_HG00190.vcf.gz.stats
-rw-r–r– 1 root root 52808 Apr 20 15:40 3_HG00190.vcf.gz.tbi
-rw-r–r– 1 root root 29292 Apr 20 17:01 6_HG0190_pon.vcf.gz
-rw-r–r– 1 root root 77 Apr 20 17:01 6_HG0190_pon.vcf.gz.tbi
-rw-r–r– 1 root root 46775 Apr 20 17:25 7_tumor_getpileupsummaries.table
-rw-r–r– 1 root root 84 Apr 20 17:35 8_tumor_calculatecontamination.table
-rw-r–r– 1 root root 45280 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz
-rw-r–r– 1 root root 1791 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.filteringStats.tsv
-rw-r–r– 1 root root 1299 Apr 20 17:53 9_somatic_oncefiltered.vcf.gz.tbi
```
LS0tDQp0aXRsZTogIkNhbGwgc29tYXRpYyBzaG9ydCB2YXJpYW50cyAoU05WcyBhbmQgaW5kZWxzKSB1c2luZyBnYXRrIG11dGVjdDIiDQphdXRob3I6ICJCaGFnaXJhdGhpIERhc2giDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyAxLiBSZWxldmFudCBub3RlcyANCg0KLVRoZSBwYW5lbCBvZiBub3JtYWxzIG5vdCBvbmx5IHJlcHJlc2VudHMgY29tbW9uIGdlcm1saW5lIHZhcmlhbnQgc2l0ZXMsIGl0IHByZXNlbnRzIGNvbW1vbmx5IG5vaXN5IHNpdGVzIGluIHNlcXVlbmNpbmcgZGF0YSwgZS5nLiBtYXBwaW5nIGFydGlmYWN0cyBvciBvdGhlciBzb21ld2hhdCByYW5kb20gYnV0IHN5c3RlbWF0aWMgYXJ0aWZhY3RzIG9mIHNlcXVlbmNpbmcuIA0KDQotV2hlbiB1c2luZyBhIHBvcHVsYXRpb24gZ2VybWxpbmUgcmVzb3VyY2UsIGNvbnNpZGVyIGFkanVzdGluZyB0aGUgLS1hZi1vZi1hbGxlbGVzLW5vdC1pbi1yZXNvdXJjZSBwYXJhbWV0ZXIgZnJvbSBpdHMgZGVmYXVsdCBvZiAwLjAwMS4gDQoNCi1Gb3IgZXhhbXBsZSwgdGhlIGdub21BRCByZXNvdXJjZSBhZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6IHJlcHJlc2VudHMgfjIwMGsgZXhvbWVzIGFuZCB+MTZrIGdlbm9tZXMgYW5kIHRoZSB0dXRvcmlhbCBkYXRhIGlzIGV4b21lIGRhdGEsIHNvIHdlIGFkanVzdCAtLWFmLW9mLWFsbGVsZXMtbm90LWluLXJlc291cmNlIHRvIDAuMDAwMDAyNSB3aGljaCBjb3JyZXNwb25kcyB0byAxLygyKmV4b21lIHNhbXBsZXMpLiANCg0KLVRoZSBkZWZhdWx0IG9mIDAuMDAxIGlzIGFwcHJvcHJpYXRlIGZvciBodW1hbiBzYW1wbGUgYW5hbHlzZXMgd2l0aG91dCBhbnkgcG9wdWxhdGlvbiByZXNvdXJjZS4gSXQgaXMgYmFzZWQgb24gdGhlIGh1bWFuIGF2ZXJhZ2UgcmF0ZSBvZiBoZXRlcm96eWdvc2l0eS4gDQoNCi1UaGUgcG9wdWxhdGlvbiBhbGxlbGUgZnJlcXVlbmNpZXMgKFBPUF9BRikgYW5kIHRoZSBhZi1vZi1hbGxlbGVzLW5vdC1pbi1yZXNvdXJjZSBmYWN0b3IgaW4gcHJvYmFiaWxpdHkgY2FsY3VsYXRpb25zIG9mIHRoZSB2YXJpYW50IGJlaW5nIHNvbWF0aWMuDQoNCi1UdXRvcmlhbCB1c2VzIEJBTSBmaWxlcyB3aGljaCBhcmUgZ2VuZXJhdGVkIGFsaWduaW5nIHRoZSBGYXN0cSBmaWxlcyB0byB0aGUgaGczOCByZWZlcmVuY2UgZ2Vub21lIHVzaW5nIGJ3YSBtZW0gYWxnb3JpdGhtLg0KDQotVGhlIG5vcm1hbCBhbmQgdHVtb3IgQkFNIGZpbGVzIHdpbGwgYmUgdXNlZCB0byBkaXNjcmltaW5hdGUgdGhlIGV4Y2x1c2l2ZSBwcmVzZW5jZSBvZiBtdXRhdGlvbiBpbiB0aGUgdHVtb3IgdGlzc3Vlcw0KDQoNCiMjIDIuIFJlZmVyZW5jZXMgYW5kIHJlc291cmNlcw0KDQoNCkdvb2dsZSBDbG91ZCBQbGF0Zm9ybSwgNCBWQ1BVcywgMTUgb3IgMTYgR0IgUkFNDQoNCg0KaHR0cHM6Ly9zb2Z0d2FyZS5icm9hZGluc3RpdHV0ZS5vcmcvZ2F0ay9kb2N1bWVudGF0aW9uL2FydGljbGU/aWQ9MTExMzYNCg0KR0FUSyBpbiBhIERvY2tlciBjb250YWluZXIgOiBodHRwczovL3NvZnR3YXJlLmJyb2FkaW5zdGl0dXRlLm9yZy9nYXRrL2RvY3VtZW50YXRpb24vYXJ0aWNsZT9pZD0xMTA5MA0KDQoNCg0KDQojIyAzLiBPYnRhaW4gdGhlIGRhdGEgKGdlbm9tZS9yZWZlcmVuY2UgYW5kIGFuYWx5c2lzIGRhdGFzZXRzKSBhbmQgY2hlY2sgY29udGVudHMNCg0KDQojIyMjIHdnZXQgZnRwOi8vZ3NhcHViZnRwLWFub255bW91c0BmdHAuYnJvYWRpbnN0aXR1dGUub3JnL3R1dG9yaWFscy9kYXRhc2V0cy90dXRvcmlhbF8xMTEzNi50YXIuZ3oNCg0KDQpFeHRyYWN0IHRoZSBkYXRhIGludG8gYSBkaXJlY3RvcnkgbmFtZWQgL2hvbWUvYjBkMjY0Ny9nYXRrX2RhdGFfcmVmDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmJCBscyAtbA0KDQpkcnd4ci14ci14IDQgYjBkMjY0NyBiMGQyNjQ3ICAgICAgIDQwOTYgQXByIDIwIDE4OjI3IGdhdGtfbXV0ZWN0Mg0KDQoNCg0KIyMjIyAoYmFzZSkgYjBkMjY0N0B2Y3B1NC0xNmdiOn4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIGxzIC1sDQoNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICA2MDc3MTQgSmFuIDE4ICAyMDE4IDRfTkExOTc3MS52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMjg2MTggSmFuIDE4ICAyMDE4IDRfTkExOTc3MS52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNzU0ODI0IEphbiAxOCAgMjAxOCA1X0hHMDI3NTkudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgIDI1MjgyIEphbiAxOCAgMjAxOCA1X0hHMDI3NTkudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMzc0NDkxMiBKYW4gMTggIDIwMTggSEcwMDE5MC5iYWkNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAzNzM1OTk1NTggSmFuIDE4ICAyMDE4IEhHMDAxOTAuYmFtDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNzU3Mzk2IEphbiAxOSAgMjAxOCBjaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdA0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMjEyNjg2NCBKYW4gMTggIDIwMTggbm9ybWFsLmJhaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3IDQzNzgwMTQyMCBKYW4gMTggIDIwMTggbm9ybWFsLmJhbQ0KDQoqKmRyd3hyd3hyLXggMiBiMGQyNjQ3IGIwZDI2NDcgICAgICA0MDk2IEFwciAyMCAxODo0NyBvdXRwdXQqKg0KDQoqKmRyd3hyLXhyLXggMiBiMGQyNjQ3IGIwZDI2NDcgICAgICA0MDk2IEFwciAxOSAyMTo1NSByZXNvdXJjZXMqKg0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgIDI1NTMwMSBKYW4gMTggIDIwMTggc29tYXRpY19tMi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMzQ1NzMgSmFuIDE4ICAyMDE4IHNvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgMjA5Njc2OCBKYW4gMTggIDIwMTggdHVtb3IuYmFpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgNTY3MDMzNjc3IEphbiAxOCAgMjAxOCB0dW1vci5iYW0NCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgMTUzMTIgSmFuIDE4ICAyMDE4IHR1bW9yX2FydGlmYWN0LnByZV9hZGFwdGVyX2RldGFpbF9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAgICA3OCBKYW4gMTggIDIwMTggdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQoNCg0KDQojIyMjIH4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIGxzIC1sIHJlc291cmNlcy8NCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAxMTI3Njc3MDcgSmFuIDE4ICAyMDE4IGNocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNzM4MDAgSmFuIDE4ICAyMDE4IGNocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSBiMGQyNjQ3IGIwZDI2NDcgICAgNTk0MjUyIEphbiAxOCAgMjAxOCBjaHIxN19tMnBvbi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAgNDI0MzkgSmFuIDE4ICAyMDE4IGNocjE3X20ycG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIGIwZDI2NDcgYjBkMjY0NyAgICAxMDAyMzAgSmFuIDE4ICAyMDE4IGNocjE3X3NtYWxsX2V4YWNfY29tbW9uXzNfZ3JjaDM4LnZjZi5neg0KDQotcnctci0tci0tIDEgYjBkMjY0NyBiMGQyNjQ3ICAgICAxMTYyOSBKYW4gMTggIDIwMTggY2hyMTdfc21hbGxfZXhhY19jb21tb25fM19ncmNoMzgudmNmLmd6LnRiaQ0KDQoNCiMjIyMgfi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0MiQgbHMgLWwgb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NzEwMiBBcHIgMjAgMTg6NDcgMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAyNDcgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ouc3VtbWFyeQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyOTMgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0MTk1OSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzUgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3ouc3RhdHMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjg2IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNjk1ODQgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE3MDkxNDcgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgIDM1IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnN0YXRzDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA1MjgwOCBBcHIgMjAgMTU6NDAgM19IRzAwMTkwLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQ2Nzc1IEFwciAyMCAxNzoyNSA3X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgODQgQXByIDIwIDE3OjM1IDhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDUyODAgQXByIDIwIDE3OjUzIDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTc5MSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3ouZmlsdGVyaW5nU3RhdHMudHN2DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTI5OSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCg0KKiogT3VyIG91dHB1dCBzaG91bGQgYmUgc2ltaWxhciB0byB3aGF0IGlzIGluIHRoZSBvdXRwdXQgZm9sZGVyLg0KDQoNCg0KDQojIyA0LiBNb3VudCB0aGUgZGF0YSB2b2x1bWUgKGkuZS4sIGdhdGtfZGF0YV9yZWYpIGFzICdnYXRrX2FuYWx5c2lzJyBpbiBkb2NrZXIgYW5kIGNoZWNrIGNvbnRlbnRzDQoNCg0KIyMjIyBiMGQyNjQ3QHZjcHU0LTE2Z2I6fiQgc3VkbyBkb2NrZXIgcnVuIC12IC9ob21lL2IwZDI2NDcvZ2F0a19kYXRhX3JlZi86L2dhdGsvZ2F0a19hbmFseXNpcyAtaXQgYnJvYWRpbnN0aXR1dGUvZ2F0azo0LjEuMS4wDQoNCg0KIyMjIERvY2tlciBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDRmMDgwYmI5MjQ5ZjovZ2F0ayMgbHMgLWwNCg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzYzNSBNYXIgMjggMjM6NDMgR0FUS0NvbmZpZy5FWEFNUExFLnByb3BlcnRpZXMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgMzc4NzAgTWFyIDI4IDIzOjQzIFJFQURNRS5tZA0KDQotcnd4ci14ci14IDEgcm9vdCByb290ICAgICAxOTQ5NCBNYXIgMjggMjM6NDMgZ2F0aw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDgzNjIyOSBNYXIgMjggMjM6NDMgZ2F0ay1jb21wbGV0aW9uLnNoDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgMjgyODMyNDIxIE1hciAyOCAyMzo0MyBnYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAxMzcyNjYxMjUgTWFyIDI4IDIzOjQzIGdhdGstcGFja2FnZS00LjEuMS4wLXNwYXJrLmphcg0KDQpscnd4cnd4cnd4IDEgcm9vdCByb290ICAgICAgICAzNiBNYXIgMjggMjM6NDUgZ2F0ay1zcGFyay5qYXIgLT4gL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtc3BhcmsuamFyDQoNCmxyd3hyd3hyd3ggMSByb290IHJvb3QgICAgICAgIDM2IE1hciAyOCAyMzo0NiBnYXRrLmphciAtPiAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMTQ3ODMgTWFyIDI4IDIzOjQzIGdhdGtQeXRob25QYWNrYWdlQXJjaGl2ZS56aXANCg0KKipkcnd4cnd4ci14IDMgMTAwMiAxMDAzICAgICAgNDA5NiBBcHIgMjAgMTE6NTEgZ2F0a19hbmFseXNpcyoqDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICAgOTY0IE1hciAyOCAyMzo0MyBnYXRrY29uZGFlbnYueW1sDQoNCioqZHJ3eHIteHIteCAyIHJvb3Qgcm9vdCAgICAgNjk2MzIgTWFyIDI4IDIzOjQzIGdhdGtkb2MqKg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgICA1MyBNYXIgMjggMjM6NDkgZ2F0a2Vudi5yYw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMTk4NCBNYXIgMjggMjM6NDYgaW5zdGFsbF9SX3BhY2thZ2VzLlINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgICA2NDggTWFyIDI4IDIzOjQ2IHJ1bl91bml0X3Rlc3RzLnNoDQoNCmRyd3hyLXhyLXggNSByb290IHJvb3QgICAgICA0MDk2IE1hciAyOCAyMzo0NCBzY3JpcHRzDQoNCg0KDQoNCiMjIyMgKGdhdGspIHJvb3RANGYwODBiYjkyNDlmOi9nYXRrL2dhdGtfYW5hbHlzaXMvZ2F0a19tdXRlY3QyIyBscyAtbA0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgIDYwNzcxNCBKYW4gMTggIDIwMTggNF9OQTE5NzcxLnZjZi5neg0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgICAyODYxOCBKYW4gMTggIDIwMTggNF9OQTE5NzcxLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICA3NTQ4MjQgSmFuIDE4ICAyMDE4IDVfSEcwMjc1OS52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMjUyODIgSmFuIDE4ICAyMDE4IDVfSEcwMjc1OS52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAzNzQ0OTEyIEphbiAxOCAgMjAxOCBIRzAwMTkwLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDM3MzU5OTU1OCBKYW4gMTggIDIwMTggSEcwMDE5MC5iYW0NCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICA3NTczOTYgSmFuIDE5ICAyMDE4IGNocjE3cGx1cy5pbnRlcnZhbF9saXN0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAyMTI2ODY0IEphbiAxOCAgMjAxOCBub3JtYWwuYmFpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgNDM3ODAxNDIwIEphbiAxOCAgMjAxOCBub3JtYWwuYmFtDQoNCioqZHJ3eHIteHIteCAyIDEwMDIgMTAwMyAgICAgIDQwOTYgQXByIDE5IDIxOjU1IHByZWNvbXB1dGVkKioNCg0KKipkcnd4ci14ci14IDIgMTAwMiAxMDAzICAgICAgNDA5NiBBcHIgMTkgMjE6NTUgcmVzb3VyY2VzKioNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAyNTUzMDEgSmFuIDE4ICAyMDE4IHNvbWF0aWNfbTIudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDM0NTczIEphbiAxOCAgMjAxOCBzb21hdGljX20yLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDIwOTY3NjggSmFuIDE4ICAyMDE4IHR1bW9yLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDU2NzAzMzY3NyBKYW4gMTggIDIwMTggdHVtb3IuYmFtDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDE1MzEyIEphbiAxOCAgMjAxOCB0dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgICAgNzggSmFuIDE4ICAyMDE4IHR1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUNCg0KDQoNCiMjIyMgKGdhdGspIHJvb3RANGYwODBiYjkyNDlmOi9nYXRrL2dhdGtfYW5hbHlzaXMvZ2F0a19tdXRlY3QyIyBscyAtbCByZXNvdXJjZXMvDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgMTEyNzY3NzA3IEphbiAxOCAgMjAxOCBjaHIxN19hZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDczODAwIEphbiAxOCAgMjAxOCBjaHIxN19hZi1vbmx5LWdub21hZF9ncmNoMzgudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgIDU5NDI1MiBKYW4gMTggIDIwMTggY2hyMTdfbTJwb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgIDQyNDM5IEphbiAxOCAgMjAxOCBjaHIxN19tMnBvbi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTAwMjMwIEphbiAxOCAgMjAxOCBjaHIxN19zbWFsbF9leGFjX2NvbW1vbl8zX2dyY2gzOC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMTE2MjkgSmFuIDE4ICAyMDE4IGNocjE3X3NtYWxsX2V4YWNfY29tbW9uXzNfZ3JjaDM4LnZjZi5nei50YmkNCg0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA0ZjA4MGJiOTI0OWY6L2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIjIGxzIC1sIHByZWNvbXB1dGVkLw0KdG90YWwgNDQ1Ng0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDE3Njg4IEphbiAxOCAgMjAxOCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfZGV0YWlsX21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTg4MSBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QuYmFpdF9iaWFzX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAxMjYwIEphbiAxOCAgMjAxOCAxMF90dW1vcl9hcnRpZmFjdC5lcnJvcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAxNDIxNCBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfZGV0YWlsX21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAgMTg5NSBKYW4gMTggIDIwMTggMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAyOTcyNjcgSmFuIDE4ICAyMDE4IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgMzU4IEphbiAxOCAgMjAxOCAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnN1bW1hcnkNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDM0NTg4IEphbiAxOCAgMjAxOCAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgMzk3NjUgSmFuIDE4ICAyMDE4IDFfc29tYXRpY19tMi52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAxNTM1IEphbiAxOCAgMjAxOCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgODQzMDQgSmFuIDE4ICAyMDE4IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzIDI2NzM5NjYgSmFuIDE4ICAyMDE4IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICA4NTUwMzUgSmFuIDE4ICAyMDE4IDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgIDM1MTE4IEphbiAxOCAgMjAxOCAzX0hHMDAxOTAudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgODU4NzAgSmFuIDE4ICAyMDE4IDZfdGhyZWVzYW1wbGVwb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICAxNzU1OCBKYW4gMTggIDIwMTggNl90aHJlZXNhbXBsZXBvbi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSAxMDAyIDEwMDMgICA1MzkxMyBKYW4gMTggIDIwMTggN190dW1vcl9nZXRwaWxldXBzdW1tYXJpZXMudGFibGUNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgICAgIDc5IEphbiAxOCAgMjAxOCA4X3R1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUNCg0KLXJ3LXItLXItLSAxIDEwMDIgMTAwMyAgMjY3MTYwIEphbiAxOCAgMjAxOCA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgMTAwMiAxMDAzICAgMzQ2MzAgSmFuIDE4ICAyMDE4IDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQoNCg0KDQojIyA1LiBDcmVhdGUgYSBzaXRlcy1vbmx5IHBhbmVsIG9mIG5vcm1hbCAoUG9OKSB3aXRoIENyZWF0ZVNvbWF0aWNQYW5lbE9mTm9ybWFscw0KDQoNCiMjIyBGaXJzdCwgcnVuIGdhdGsgTXV0ZWN0MiBpbiB0dW1vci1vbmx5IG1vZGUgb24gZWFjaCBub3JtYWwgc2FtcGxlIHRvIGNhbGwgYWxsIGRldGVjdGFibGUgdmFyaWFudHM6IE5lZWRzIGFuIGludGVydmFsIGxpc3QNCg0KIyMjIyAoZ2F0aykgcm9vdEBiMTlmYTNmNjE2NTA6L2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIjIGNhdCBjaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdCB8IGhlYWQgLW4gMw0KDQpASEQgICAgIFZOOjEuNSAgU086dW5zb3J0ZWQNCg0KQFNRICAgICBTTjpjaHIxIExOOjI0ODk1NjQyMiAgICBVUjpmdHA6Ly9mdHAuMTAwMGdlbm9tZXMuZWJpLmFjLnVrL3ZvbDEvZnRwL3RlY2huaWNhbC9yZWZlcmVuY2UvR1JDaDM4X3JlZmVyZW5jZV9nZW5vbWUvR1JDaDM4X2Z1bGxfYW5hbHlzaXNfc2V0X3BsdXNfZGVjb3lfaGxhLmZhICAgICAgQVM6R1JDaDM4ICAgICAgIE01OjZhZWY4OTdjM2Q2ZmYwYzc4YWZmMDZhYzE4OTE3OGRkICAgICAgIFNQOkh1bWFuDQoNCkBTUSAgICAgU046Y2hyMiBMTjoyNDIxOTM1MjkgICAgVVI6ZnRwOi8vZnRwLjEwMDBnZW5vbWVzLmViaS5hYy51ay92b2wxL2Z0cC90ZWNobmljYWwvcmVmZXJlbmNlL0dSQ2gzOF9yZWZlcmVuY2VfZ2Vub21lL0dSQ2gzOF9mdWxsX2FuYWx5c2lzX3NldF9wbHVzX2RlY295X2hsYS5mYSAgICAgIEFTOkdSQ2gzOCAgICAgICBNNTpmOThkYjY3MmViMDk5M2RjZmRhYmFmZTJhODgyOTA1YyAgICAgICBTUDpIdW1hbg0KDQoNCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBNdXRlY3QyIA0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLUkgZ2F0a19tdXRlY3QyL0hHMDAxOTAuYmFtIA0KDQotdHVtb3IgZ2F0a19tdXRlY3QyL0hHMDAxOTAuYmFtIA0KDQotLWRpc2FibGUtcmVhZC1maWx0ZXIgTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCg0KLS1pbnRlcnZhbHMgZ2F0a19tdXRlY3QyL2NocjE3cGx1cy5pbnRlcnZhbF9saXN0IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzNfSEcwMDE5MC52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQoxNToyOTozMi44MDUgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMTU6Mjk6NDIuODUxIElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgIGNocjExOjk0OTA5NyAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgIDIwMCAgICAgICAgICAgMTE5NC41DQoNCjE1OjI5OjUyLjg1MyBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICBjaHIxNzoyMzMyMTYgICAgICAgICAgICAgIDAuMyAgICAgICAgICAgICAgICAgIDE5NzAgICAgICAgICAgIDU4OTUuOA0KDQouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KMTU6Mzk6NDQuNTY5IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIxNzo4MDQ4MjY0OSAgICAgICAgICAgICAxMC4yICAgICAgICAgICAgICAgIDMyNjk5MCAgICAgICAgICAzMjA3MC4yDQoNCjE1OjM5OjU0LjU4OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMTc6ODE4OTIwNjEgICAgICAgICAgICAgMTAuNCAgICAgICAgICAgICAgICAzMzMwNzAgICAgICAgICAgMzIxNDAuMQ0KDQoxNTo0MDowNC42MDcgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIGNocjExX0tJMjcwOTI3djFfYWx0OjgwMTczICAgICAgICAgICAgIDEwLjUgICAgICAgICAgICAgICAgMzM5MTcwICAgICAgICAgIDMyMjA5LjgNCg0KMTU6NDA6MTMuNTQ2IElORk8gIE11dGVjdDIgLSANCg0KDQo5MzQ2MzggcmVhZChzKSBmaWx0ZXJlZCBieTogKCgoKCgoKCgoKChNYXBwaW5nUXVhbGl0eVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5QXZhaWxhYmxlUmVhZEZpbHRlcilBTkQgTWFwcGluZ1F1YWxpdHlOb3RaZXJvUmVhZEZpbHRlcikgQU5EIE1hcHBlZFJlYWRGaWx0ZXIpIEFORCBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25DaGltZXJpY09yaWdpbmFsQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE5vblplcm9SZWZlcmVuY2VMZW5ndGhBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgUmVhZExlbmd0aFJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUxNzI5OCByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTE3Mjk4IHJlYWQocykgZmlsdGVyZWQgYnk6IE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA4OSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb3RTZWNvbmRhcnlBbGlnbm1lbnRSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIDQxNDI1MSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb3REdXBsaWNhdGVSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCjE1OjQwOjEzLjU0NiBJTkZPICBQcm9ncmVzc01ldGVyIC0gIEhMQS1BKjI0OjAzOjAxOjIxNzYgICAgICAgICAgICAgMTAuNyAgICAgICAgICAgICAgICAzMzk4MjggICAgICAgICAgMzE4MjIuMA0KDQoxNTo0MDoxMy41NDYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDMzOTgyOCB0b3RhbCByZWdpb25zIGluIDEwLjcgbWludXRlcy4NCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDUyODA4IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnRiaQ0KDQoNCg0KDQojIyMgUnVuIGdhdGsgQ3JlYXRlU29tYXRpY1BhbmVsT2ZOb3JtYWxzIG9uIHRoZSBtdXRlY3QyIG91dHB1dA0KDQpgYGANCihnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIENyZWF0ZVNvbWF0aWNQYW5lbE9mTm9ybWFscyANCg0KLVYgZ2F0a19tdXRlY3QyL291dHB1dC8zX0hHMDAxOTAudmNmLmd6IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzZfSEcwMTkwX3Bvbi52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQoNCi4uLi4uLi4uLi4uLi4uDQoNCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgV2FybmluZzogQ3JlYXRlU29tYXRpY1BhbmVsT2ZOb3JtYWxzIGlzIGEgQkVUQSB0b29sIGFuZCBpcyBub3QgeWV0IHJlYWR5IGZvciB1c2UgaW4gcHJvZHVjdGlvbg0KICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQoNCi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4NCg0KKioxNzowMToxMC4zNDIgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjE3OjgzMDU3OTY1ICAgICAgICAgICAgICAwLjAgICAgICAgICAgICAgICAgIDM4Mzg2ICAgICAgICAyMjYyNDM2LjEgKioNCg0KDQoqKjE3OjAxOjEwLjM0MiBJTkZPICBQcm9ncmVzc01ldGVyIC0gVHJhdmVyc2FsIGNvbXBsZXRlLiBQcm9jZXNzZWQgMzgzODYgdG90YWwgdmFyaWFudHMgaW4gMC4wIG1pbnV0ZXMuKioNCg0KDQojIyMgQWRkaXRpb25hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KDQoNCiMjIDYuIGNhbGwgbXV0YXRpb25zIGluIHRoZSB0dW1vciBpbiBzb21hdGljIG1vZGUuIA0KDQoNCmBgYCANCg0KKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGdhdGsgTXV0ZWN0MiANCg0KLVIgSG9tb19zYXBpZW5zX2Fzc2VtYmx5MzguZmFzdGEgDQoNCi1JIGdhdGtfbXV0ZWN0Mi90dW1vci5iYW0gDQoNCi1JIGdhdGtfbXV0ZWN0Mi9ub3JtYWwuYmFtIA0KDQotdHVtb3IgSENDMTE0M190dW1vciANCg0KLW5vcm1hbCBIQ0MxMTQzX25vcm1hbCANCg0KLXBvbiBnYXRrX211dGVjdDIvcmVzb3VyY2VzL2NocjE3X20ycG9uLnZjZi5neiANCg0KLS1nZXJtbGluZS1yZXNvdXJjZSBnYXRrX211dGVjdDIvcmVzb3VyY2VzL2NocjE3X2FmLW9ubHktZ25vbWFkX2dyY2gzOC52Y2YuZ3ogDQoNCi0tYWYtb2YtYWxsZWxlcy1ub3QtaW4tcmVzb3VyY2UgMC4wMDAwMDI1IA0KDQotLWRpc2FibGUtcmVhZC1maWx0ZXIgTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCg0KLUwgZ2F0a19tdXRlY3QyL2NocjE3cGx1cy5pbnRlcnZhbF9saXN0IA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3ogDQoNCi1iYW1vdXQgZ2F0a19tdXRlY3QyL291dHB1dC8yX3R1bW9yX25vcm1hbF9tMi5iYW0NCg0KYGBgDQoNCg0KVXNpbmcgR0FUSyBqYXIgL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtbG9jYWwuamFyDQoNCg0KDQoxNDowOTozOS4xNDYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgIFJlZ2lvbnMgUHJvY2Vzc2VkICAgUmVnaW9ucy9NaW51dGUNCg0KMTQ6MDk6NDkuMTU0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyMTE6MTA3MzA4MSAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgICAgIDU4MCAgICAgICAgICAgMzQ3Ny45DQoNCjE0OjA5OjU5LjI2NSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgIGNocjE3OjE2NzgzMjggICAgICAgICAgICAgIDAuMyAgICAgICAgICAgICAgICAgIDY1NDAgICAgICAgICAgMTk1MDQuOQ0KDQouLi4uLi4uLi4uLg0KDQoxNDoxNDoxMC4wODUgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgIGNocjE3OjgwNDU5MjYyICAgICAgICAgICAgICA0LjUgICAgICAgICAgICAgICAgMjc0MzYwICAgICAgICAgIDYwNzU3LjYNCg0KMTQ6MTQ6MjAuMDg1IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICBjaHIxNzo4MjQ5MzA4MSAgICAgICAgICAgICAgNC43ICAgICAgICAgICAgICAgIDI4MTUyMCAgICAgICAgICA2MDEyNC4xDQoNCg0KMTQ6MTQ6MjkuMzE3IElORk8gIE11dGVjdDIgLSANCg0KDQoyNDk1NDMwIHJlYWQocykgZmlsdGVyZWQgYnk6ICgoKCgoKCgoKCgoTWFwcGluZ1F1YWxpdHlSZWFkRmlsdGVyIEFORCBNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIpIEFORCBNYXBwaW5nUXVhbGl0eU5vdFplcm9SZWFkRmlsdGVyKSBBTkQgTWFwcGVkUmVhZEZpbHRlcikgQU5EIE5vdFNlY29uZGFyeUFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBOb3REdXBsaWNhdGVSZWFkRmlsdGVyKSBBTkQgUGFzc2VzVmVuZG9yUXVhbGl0eUNoZWNrUmVhZEZpbHRlcikgQU5EIE5vbkNoaW1lcmljT3JpZ2luYWxBbGlnbm1lbnRSZWFkRmlsdGVyKSBBTkQgTm9uWmVyb1JlZmVyZW5jZUxlbmd0aEFsaWdubWVudFJlYWRGaWx0ZXIpIEFORCBSZWFkTGVuZ3RoUmVhZEZpbHRlcikgQU5EIEdvb2RDaWdhclJlYWRGaWx0ZXIpIEFORCBXZWxsZm9ybWVkUmVhZEZpbHRlcikNCiAgDQogDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwOTM0MjcgcmVhZChzKSBmaWx0ZXJlZCBieTogKE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciBBTkQgTWFwcGluZ1F1YWxpdHlBdmFpbGFibGVSZWFkRmlsdGVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDkzNDI3IHJlYWQocykgZmlsdGVyZWQgYnk6IE1hcHBpbmdRdWFsaXR5UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAxNDAyMDAzIHJlYWQocykgZmlsdGVyZWQgYnk6IE5vdER1cGxpY2F0ZVJlYWRGaWx0ZXIgDQogICAgICAgICAgICAgICAgICAgICAgICAgIA0KMTQ6MTQ6MjkuMzE3IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgSExBLUEqMjQ6MDM6MDE6MjYxNSAgICAgICAgICAgICAgNC44ICAgICAgICAgICAgICAgIDI4NTAwNSAgICAgICAgICA1ODkzMS44DQoNCioqMTQ6MTQ6MjkuMzE3IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAyODUwMDUgdG90YWwgcmVnaW9ucyBpbiA0LjggbWludXRlcy4qKg0KDQoNCg0KIyMjIyBBZGRpdGlvbmFsIGRpcmVjb3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCnRvdGFsIDE3OTINCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQxOTU5IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICAzNSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5nei5zdGF0cw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyODYgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA2OTU4NCBBcHIgMjAgMTQ6MTQgMl90dW1vcl9ub3JtYWxfbTIuYmFpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgMTcwOTE0NyBBcHIgMjAgMTQ6MTQgMl90dW1vcl9ub3JtYWxfbTIuYmFtDQoNCg0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBjYXQgZ2F0a19tdXRlY3QyL291dHB1dC8xX3NvbWF0aWNfbTIudmNmLmd6LnN0YXRzICAgICANCg0KYGBgDQpzdGF0aXN0aWMgICAgICAgdmFsdWUNCg0KY2FsbGFibGUgICAgICAgIDQ4MTA4NjQuMA0KDQpgYGANCg0KIyMjIyAoYmFzZSkgYjBkMjY0N0B2Y3B1NC0xNmdiOn4vZ2F0a19kYXRhX3JlZi9nYXRrX211dGVjdDIkIHpjYXQgb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3ogfCBhd2sgJyQ1IH4iLCInIHwgaGVhZCAtbiAyDQoNCg0KDQpgYGANCmNocjE3ICAgODUxMzY4OCAuICAgICAgIEdUVCAgICAgRyxHVCAgICAuICAgICAgIC4gICAgICAgRFA9Mjk4O0VDTlQ9MTtNQlE9MzAsMjksMzE7TUZSTD0xNjAsMTU4LDE1MTtNTVE9NjAsNjAsNjA7TVBPUz0yMSwyNDtOQUxPRD0wLjA5OSwtNy4zNDVlKzAxO05MT0QNCg0KPTkuMDMsLTcuMzgyZSswMTtQT047UE9QQUY9Mi40OSwwLjM2NTtSUEE9MTMsMTEsMTI7UlU9VDtTVFI7VExPRD00LjkyLDIxNS40MiAgICBHVDpBRDpBRjpEUDpGMVIyOkYyUjE6U0IgICAgICAgIDAvMDo0MiwyLDQxOjAuMDI1LDAuNDk2Ojg1OjI0LDAsMTg6MTMsMg0KDQosMjI6MTEsMzEsMTMsMzAgMC8xLzI6MTEsOCwxMDE6MC4wNTYsMC44NTk6MTIwOjUsMywzNjo0LDQsNTQ6Niw1LDI2LDgzDQoNCg0KY2hyMTcgICAxNzg2OTMwOCAgICAgICAgLiAgICAgICBHQUFBQSAgIEcsR0FBQUFBICAgICAgICAuICAgICAgIC4gICAgICAgRFA9NjA7RUNOVD0xO01CUT0zMiwyMCwzMjtNRlJMPTEzNiw5NywxNDQ7TU1RPTYwLDYwLDYwO01QT1M9MjksMjg7TkFMT0Q9MC42MTAsLQ0KDQo0LjM5OWUrMDA7TkxPRD0yLjkyLC0zLjQ4MmUrMDA7UE9OO1BPUEFGPTEuNzcsMi45NTtSUEE9MTUsMTEsMTY7UlU9QTtTVFI7VExPRD0zLjA2LDE0LjI4ICAgICAgICBHVDpBRDpBRjpEUDpGMVIyOkYyUjE6U0IgICAgICAgIDAvMDo5LDEsMzowLjA5NywwLjI2OToxDQoNCjM6NSwxLDE6MywwLDE6OCwxLDEsMyAgIDAvMS8yOjEwLDIsMTI6MC4wOTUsMC41MzA6MjQ6MiwyLDM6NywwLDk6NSw1LDExLDMNCg0KYGBgDQoNCiMjIDcuIFJlcG9ydCB2YXJpYW50IHN0YXRpc3RpY3MgdXNpbmcgYmNmdG9vbHMNCg0KDQojIyMjIChiYXNlKSBiMGQyNjQ3QHZjcHU0LTE2Z2I6fi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0MiQgYmNmdG9vbHMgc3RhdHMgfi9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0Mi9vdXRwdXQvMV9zb21hdGljX20yLnZjZi5neg0KDQoNCg0KYGBgDQojIFRoaXMgZmlsZSB3YXMgcHJvZHVjZWQgYnkgYmNmdG9vbHMgc3RhdHMgKDEuOStodHNsaWItMS45KSBhbmQgY2FuIGJlIHBsb3R0ZWQgdXNpbmcgcGxvdC12Y2ZzdGF0cy4NCg0KDQojIFRoZSBjb21tYW5kIGxpbmUgd2FzOiBiY2Z0b29scyBzdGF0cyAgL2hvbWUvYjBkMjY0Ny9nYXRrX2RhdGFfcmVmL2dhdGtfbXV0ZWN0Mi9vdXRwdXQvMV9zb21hdGljX20yLnZjZi5neg0KIw0KIyBTTiAgICBbMl1pZCAgIFszXWtleSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF12YWx1ZQ0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIHNhbXBsZXM6ICAgICAgICAgICAgICAgICAgICAgIDINCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgICAgICAgICAgICAgICAgICAxMTENCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBuby1BTFRzOiAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgU05QczogICAgICAgICAgICAgICAgICAgICAgICAgOTMNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgaW5kZWxzOiAgICAgICAgICAgICAgICAgICAgICAgMTgNCg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBvdGhlcnM6ICAgICAgICAgICAgICAgICAgICAgICAwDQoNClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgICAgICAgICAgNw0KDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG11bHRpYWxsZWxpYyBTTlAgc2l0ZXM6ICAgICAgIDANCg0KYGBgDQoNCg0KDQoNCg0KIyMgOC4gcnVuIEdldFBpbGV1cFN1bW1hcmllcyBvbiB0aGUgdHVtb3IgQkFNIHRvIHN1bW1hcml6ZSByZWFkIHN1cHBvcnQgZm9yIGEgc2V0IG9mIG51bWJlciBvZiBrbm93biB2YXJpYW50IHNpdGVzLg0KDQpgYGANCihnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIEdldFBpbGV1cFN1bW1hcmllcyANCg0KLUkgZ2F0a19tdXRlY3QyL3R1bW9yLmJhbSANCg0KLVYgZ2F0a19tdXRlY3QyL3Jlc291cmNlcy9jaHIxN19zbWFsbF9leGFjX2NvbW1vbl8zX2dyY2gzOC52Y2YuZ3ogDQoNCi1MIGdhdGtfbXV0ZWN0Mi9jaHIxN3BsdXMuaW50ZXJ2YWxfbGlzdCANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC83X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQpgYGANCg0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQogICAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISENCiAgIFdhcm5pbmc6IEdldFBpbGV1cFN1bW1hcmllcyBpcyBhIEJFVEEgdG9vbCBhbmQgaXMgbm90IHlldCByZWFkeSBmb3IgdXNlIGluIHByb2R1Y3Rpb24NCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgDQouLi4uLi4uLi4uLi4NCg0KDQoxNzoyNDoxNC45ODEgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtICAgICAgICBDdXJyZW50IExvY3VzICBFbGFwc2VkIE1pbnV0ZXMgICAgICAgIExvY2kgUHJvY2Vzc2VkICAgICAgTG9jaS9NaW51dGUNCg0KMTc6MjQ6MjQuOTg2IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgY2hyMTc6NzAyNDExMiAgICAgICAgICAgICAgMC4yICAgICAgICAgICAgICAgMTA5MzAwMCAgICAgICAgNjU1NTM3Ny44DQoNCi4uLi4uLi4uLi4uDQoNCjE3OjI1OjA0Ljk5NiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgY2hyMTc6ODA2Mjc0NjQgICAgICAgICAgICAgIDAuOCAgICAgICAgICAgICAgIDkyOTkwMDAgICAgICAgMTExNTU0NTMuNA0KDQoxNzoyNTowNy45MjEgSU5GTyAgR2V0UGlsZXVwU3VtbWFyaWVzIC0gMTUwOTg2MiByZWFkKHMpIGZpbHRlcmVkIGJ5OiAoKCgoKCgoKChNYXBwaW5nUXVhbGl0eUF2YWlsYWJsZVJlYWRGaWx0ZXIgQU5EIE1hcHBpbmdRdWFsaXR5Tm90WmVyb1JlYWRGaWx0ZXIpIEFORCBNYXBwZWRSZWFkRmlsdGVyKSBBTkQgUHJpbWFyeUxpbmVSZWFkRmlsdGVyKSBBTkQgTm90RHVwbGljYXRlUmVhZEZpbHRlcikgQU5EIFBhc3Nlc1ZlbmRvclF1YWxpdHlDaGVja1JlYWRGaWx0ZXIpIEFORCBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlcikgQU5EIE1hdGVPblNhbWVDb250aWdPck5vTWFwcGVkTWF0ZVJlYWRGaWx0ZXIpIEFORCBHb29kQ2lnYXJSZWFkRmlsdGVyKSBBTkQgV2VsbGZvcm1lZFJlYWRGaWx0ZXIpDQogICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4uLi4uLi4uLi4uLi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1Njk1MDggcmVhZChzKSBmaWx0ZXJlZCBieTogTWFwcGluZ1F1YWxpdHlOb3RaZXJvUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgMjI1OTAgcmVhZChzKSBmaWx0ZXJlZCBieTogUHJpbWFyeUxpbmVSZWFkRmlsdGVyIA0KICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA5MDI2NzYgcmVhZChzKSBmaWx0ZXJlZCBieTogTm90RHVwbGljYXRlUmVhZEZpbHRlciANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgMSByZWFkKHMpIGZpbHRlcmVkIGJ5OiBOb25aZXJvUmVmZXJlbmNlTGVuZ3RoQWxpZ25tZW50UmVhZEZpbHRlciANCiAgICAgICAgICAgICAgDQogICAgICAgICAgMTUwODcgcmVhZChzKSBmaWx0ZXJlZCBieTogTWF0ZU9uU2FtZUNvbnRpZ09yTm9NYXBwZWRNYXRlUmVhZEZpbHRlciANCiAgICAgICAgICANCiAgICAgICAgICANCjE3OjI1OjA3LjkyMiBJTkZPICBQcm9ncmVzc01ldGVyIC0gY2hyMTFfS0kyNzA5Mjd2MV9hbHQ6OTE0MzMgICAgICAgICAgICAgIDAuOSAgICAgICAgICAgICAgIDk5MDYyMTcgICAgIDExMjI3MDgzLjQNCg0KMTc6MjU6MDcuOTIyIElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCA5OTA2MjE3IHRvdGFsIGxvY2kgaW4gMC45IG1pbnV0ZXMuDQoNCg0KIyMjIEFkZGl0aW5hbCBkaXJlY3RvcnkgY29udGVudHMNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgbHMgLWwgZ2F0a19tdXRlY3QyL291dHB1dC8NCg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDY3NzUgQXByIDIwIDE3OjI1IDdfdHVtb3JfZ2V0cGlsZXVwc3VtbWFyaWVzLnRhYmxlDQoNCg0KDQoNCg0KIyMgOS4gQ2FsY3VsYXRlIENvbnRhbWluYXRpb24NCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBDYWxjdWxhdGVDb250YW1pbmF0aW9uIA0KDQotSSBnYXRrX211dGVjdDIvb3V0cHV0LzdfdHVtb3JfZ2V0cGlsZXVwc3VtbWFyaWVzLnRhYmxlIA0KDQotTyBnYXRrX211dGVjdDIvb3V0cHV0LzhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQpgYGANCg0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQouLi4uLi4uLi4uLi4uLi4uDQoNCjE3OjM1OjAxLjIyMyBXQVJOICBLZXJuZWxTZWdtZW50ZXIgLSBTcGVjaWZpZWQgZGltZW5zaW9uIG9mIHRoZSBrZXJuZWwgYXBwcm94aW1hdGlvbiAoMTAwKSBleGNlZWRzIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgKDIwKSB0byBzZWdtZW50OyB1c2luZyBhbGwgZGF0YSBwb2ludHMgdG8gY2FsY3VsYXRlIGtlcm5lbCBtYXRyaXguDQoNCi4uLi4uLi4uLi4uLi4uDQoNClRvb2wgcmV0dXJuZWQ6IFNVQ0NFU1MNCg0KDQoNCiMjIyBBZGRpdGluYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA4NCBBcHIgMjAgMTc6MzUgOF90dW1vcl9jYWxjdWxhdGVjb250YW1pbmF0aW9uLnRhYmxlDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NTI4MCBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KDQoNCiMjIDEwLiBGaWx0ZXIgTXV0ZWN0IENhbGxzDQoNCg0KYGBgDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBGaWx0ZXJNdXRlY3RDYWxscw0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLVYgZ2F0a19tdXRlY3QyL291dHB1dC8xX3NvbWF0aWNfbTIudmNmLmd6IA0KDQotLWNvbnRhbWluYXRpb24tdGFibGUgZ2F0a19tdXRlY3QyL291dHB1dC84X3R1bW9yX2NhbGN1bGF0ZWNvbnRhbWluYXRpb24udGFibGUgDQoNCi1PIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KYGBgDQoNClVzaW5nIEdBVEsgamFyIC9nYXRrL2dhdGstcGFja2FnZS00LjEuMS4wLWxvY2FsLmphcg0KDQoNCjE3OjUzOjE0LjQ0OSBJTkZPICBGZWF0dXJlTWFuYWdlciAtIFVzaW5nIGNvZGVjIFZDRkNvZGVjIHRvIHJlYWQgZmlsZSBmaWxlOi8vL2dhdGsvZ2F0a19hbmFseXNpcy9nYXRrX211dGVjdDIvb3V0cHV0LzFfc29tYXRpY19tMi52Y2YuZ3oNCg0KLi4uLi4uLi4NCg0KMTc6NTM6MTUuMDg3IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgIFZhcmlhbnRzIFByb2Nlc3NlZCAgVmFyaWFudHMvTWludXRlDQoNCjE3OjUzOjE1LjA4OCBJTkZPICBGaWx0ZXJNdXRlY3RDYWxscyAtIFN0YXJ0aW5nIHBhc3MgMCB0aHJvdWdoIHRoZSB2YXJpYW50cw0KDQoxNzo1MzoxNS40MjMgSU5GTyAgRmlsdGVyTXV0ZWN0Q2FsbHMgLSBGaW5pc2hlZCBwYXNzIDAgdGhyb3VnaCB0aGUgdmFyaWFudHMNCg0KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLg0KDQoxNzo1MzoxNS43MjYgSU5GTyAgRmlsdGVyTXV0ZWN0Q2FsbHMgLSBObyB2YXJpYW50cyBmaWx0ZXJlZCBieTogQWxsb3dBbGxWYXJpYW50c1ZhcmlhbnRGaWx0ZXINCg0KMTc6NTM6MTUuNzI2IElORk8gIEZpbHRlck11dGVjdENhbGxzIC0gTm8gcmVhZHMgZmlsdGVyZWQgYnk6IEFsbG93QWxsUmVhZHNSZWFkRmlsdGVyDQoNCjE3OjUzOjE1LjcyNiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAzMzMgICAgICAgICAgMzEyNjcuNg0KDQoxNzo1MzoxNS43MjYgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDMzMyB0b3RhbCB2YXJpYW50cyBpbiAwLjAgbWludXRlcy4NCg0KDQoNCiMjIyBBZGRpdGluYWwgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgKGdhdGspIHJvb3RAN2UzMDg0NTdkZWQ2Oi9nYXRrL2dhdGtfYW5hbHlzaXMjIGxzIC1sIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NTI4MCBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxNzkxIEFwciAyMCAxNzo1MyA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5nei5maWx0ZXJpbmdTdGF0cy50c3YNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjk5IEFwciAyMCAxNzo1MyA5X3NvbWF0aWNfb25jZWZpbHRlcmVkLnZjZi5nei50YmkNCg0KDQoNCiMjIDExLiBDb2xsZWN0IFNlcXVlbmNpbmcgQXJ0aWZhY3QgTWV0cmljcw0KDQoNCmBgYA0KDQooZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgZ2F0ayBDb2xsZWN0U2VxdWVuY2luZ0FydGlmYWN0TWV0cmljcw0KDQotUiBIb21vX3NhcGllbnNfYXNzZW1ibHkzOC5mYXN0YSANCg0KLUkgZ2F0a19tdXRlY3QyL3R1bW9yLmJhbSANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC8xMF90dW1vcl9hcnRpZmFjdCANCg0KLUZJTEVfRVhURU5TSU9OICIudHh0IiAgIA0KDQpgYGANCg0KVXNpbmcgR0FUSyBqYXIgL2dhdGsvZ2F0ay1wYWNrYWdlLTQuMS4xLjAtbG9jYWwuamFyDQoNCg0KDQpJTkZPICAgIDIwMTktMDQtMjAgMTg6MDk6NTggICAgIFNpbmdsZVBhc3NTYW1Qcm9ncmFtICAgIFByb2Nlc3NlZCAgICAgMSwwMDAsMDAwIHJlY29yZHMuICBFbGFwc2VkIHRpbWU6IDAwOjAwOjQ4cy4gIFRpbWUgZm9yIGxhc3QgMSwwMDAsMDAwOiAgIDQ0cy4gIExhc3QgcmVhZCBwb3NpdGlvbjogY2hyMTc6OSwyNDIsMTI3DQoNCg0KLi4uLi4uLi4uLi4uLg0KDQoNCklORk8gICAgMjAxOS0wNC0yMCAxODoxMDo0NSAgICAgU2luZ2xlUGFzc1NhbVByb2dyYW0gICAgUHJvY2Vzc2VkICAgICA2LDAwMCwwMDAgcmVjb3Jkcy4gIEVsYXBzZWQgdGltZTogMDA6MDE6MzVzLiAgVGltZSBmb3IgbGFzdCAxLDAwMCwwMDA6ICAgMTdzLiAgTGFzdCByZWFkIHBvc2l0aW9uOiBjaHIxN19LSTI3MDkwOHYxX2FsdDoxLDA1OSw4MjENCg0KW1NhdCBBcHIgMjAgMTg6MTA6NDcgVVRDIDIwMTldIHBpY2FyZC5hbmFseXNpcy5hcnRpZmFjdHMuQ29sbGVjdFNlcXVlbmNpbmdBcnRpZmFjdE1ldHJpY3MgZG9uZS4gRWxhcHNlZCB0aW1lOiAxLjY0IG1pbnV0ZXMuDQoNCg0KDQojIyMgQWRkaXRpbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCg0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgY2F0IGdhdGtfbXV0ZWN0Mi9vdXRwdXQvMTBfdHVtb3JfYXJ0aWZhY3QucHJlX2FkYXB0ZXJfc3VtbWFyeV9tZXRyaWNzLnR4dCB8IGhlYWQgLW4gMTcNCg0KDQpgYGANClNBTVBMRV9BTElBUyAgICBMSUJSQVJZIFJFRl9CQVNFICAgICAgICBBTFRfQkFTRSAgICAgICAgVE9UQUxfUVNDT1JFICAgIFdPUlNUX0NYVCAgICAgICBXT1JTVF9DWFRfUVNDT1JFICAgICAgICBXT1JTVF9QUkVfQ1hUICAgV09SU1RfUFJFX0NYVF9RU0NPUkUgIFcNCk9SU1RfUE9TVF9DWFQgICBXT1JTVF9QT1NUX0NYVF9RU0NPUkUgICBBUlRJRkFDVF9OQU1FDQoNCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBBICAgICAgIEMgICAgICAgNjAgICAgICBUQUMgICAgIDQ2ICAgICAgQUFOICAgICA1MyAgICAgIE5BQyAgICAgNDkgICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEEgICAgICAgRyAgICAgICA0OSAgICAgIENBVCAgICAgNDIgICAgICBDQU4gICAgIDQ2ICAgICAgTkFUICAgICA0NiAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgQSAgICAgICBUICAgICAgIDEwMCAgICAgQ0FDICAgICA0NyAgICAgIEFBTiAgICAgMTAwICAgICBOQUEgICAgIDEwMCAgICAgTkENCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBDICAgICAgIEEgICAgICAgMTAwICAgICBBQ0EgICAgIDEwMCAgICAgQUNOICAgICAxMDAgICAgIE5DQSAgICAgMTAwICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEMgICAgICAgRyAgICAgICAxMDAgICAgIEdDQSAgICAgNDEgICAgICBHQ04gICAgIDQ3ICAgICAgTkNBICAgICA1MyAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgQyAgICAgICBUICAgICAgIDQ2ICAgICAgQUNHICAgICAzNyAgICAgIEFDTiAgICAgNDIgICAgICBOQ0EgICAgIDQ1ICAgICAgRGVhbWluYXRpb24NCg0KSENDMTE0M190dW1vciAgIFBvbmQtMTQ3NTgwICAgICBHICAgICAgIEEgICAgICAgMTAwICAgICBDR0EgICAgIDQyICAgICAgQUdOICAgICAxMDAgICAgIE5HQSAgICAgMTAwICAgICBOQQ0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIEcgICAgICAgQyAgICAgICA1MSAgICAgIEFHRyAgICAgNDEgICAgICBBR04gICAgIDQ1ICAgICAgTkdUICAgICA0NSAgICAgIE5BDQoNCkhDQzExNDNfdHVtb3IgICBQb25kLTE0NzU4MCAgICAgRyAgICAgICBUICAgICAgIDM2ICAgICAgQ0dDICAgICAzMyAgICAgIENHTiAgICAgMzUgICAgICBOR0EgICAgIDM1ICAgICAgT3hvRw0KDQpIQ0MxMTQzX3R1bW9yICAgUG9uZC0xNDc1ODAgICAgIFQgICAgICAgQSAgICAgICA0NyAgICAgIENUQSAgICAgNDIgICAgICBDVE4gICAgIDQ1ICAgICAgTlRBICAgICA0NCAgICAgIE5BDQoNCmBgYA0KDQoNCiMjIDEyLiBGaWx0ZXIgQnkgT3JpZW50YXRpb24gQmlhcw0KDQoNCmBgYA0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBnYXRrIEZpbHRlckJ5T3JpZW50YXRpb25CaWFzIA0KDQotViBnYXRrX211dGVjdDIvb3V0cHV0Lzlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6IA0KDQotUCBnYXRrX211dGVjdDIvb3V0cHV0LzEwX3R1bW9yX2FydGlmYWN0LnByZV9hZGFwdGVyX2RldGFpbF9tZXRyaWNzLnR4dCANCg0KLU8gZ2F0a19tdXRlY3QyL291dHB1dC8xMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6DQoNCmBgYA0KDQpVc2luZyBHQVRLIGphciAvZ2F0ay9nYXRrLXBhY2thZ2UtNC4xLjEuMC1sb2NhbC5qYXINCg0KDQoNCi4uLi4uLi4uDQoNCiAgICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQ0KICAgV2FybmluZzogRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgaXMgYW4gRVhQRVJJTUVOVEFMIHRvb2wgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgcHJvZHVjdGlvbg0KICAgISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhDQogICANCiAgIA0KLi4uLi4uLi4uLi4uLi4uLi4uDQoNCg0KMTg6NDc6NTguMTc0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgICBSZWNvcmRzIFByb2Nlc3NlZCAgIFJlY29yZHMvTWludXRlDQoNCjE4OjQ3OjU4LjE3OSBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAyMjIgICAgMzMzMDAwMC4wDQogICAgDQogICAgDQoxODo0Nzo1OC4xNzkgSU5GTyAgUHJvZ3Jlc3NNZXRlciAtIFRyYXZlcnNhbCBjb21wbGV0ZS4gUHJvY2Vzc2VkIDIyMiB0b3RhbCByZWNvcmRzIGluIDAuMCBtaW51dGVzLg0KDQoxODo0Nzo1OC4xODYgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBIQ0MxMTQzX25vcm1hbDogTm90aGluZyB0byBmaWx0ZXIuDQoNCjE4OjQ3OjU4LjE5OSBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIEhDQzExNDNfdHVtb3I6IEN1dHRpbmcgKEc+VCkgcHJlLXByZUFkYXB0ZXJROiAwIG9mIDINCg0KMTg6NDc6NTguMjAwIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAoQz5BKSBwcmUtcHJlQWRhcHRlclE6IC0xIG9mIDANCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAodG90YWwpIHByZS1wcmVBZGFwdGVyUTogLTENCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQ3V0dGluZyAoRz5UKSBwb3N0LXByZUFkYXB0ZXJROiAwDQoNCjE4OjQ3OjU4LjIwMSBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIEhDQzExNDNfdHVtb3I6IEN1dHRpbmcgKEM+QSkgcG9zdC1wcmVBZGFwdGVyUTogLTENCg0KMTg6NDc6NTguMjAxIElORk8gIE9yaWVudGF0aW9uQmlhc0ZpbHRlcmVyIC0gSENDMTE0M190dW1vcjogQWRkaW5nIG9yaWVudGF0aW9uIGJpYXMgZmlsdGVyIHJlc3VsdHMgdG8gZ2Vub3R5cGVzLi4uDQoNCjE4OjQ3OjU4LjIwMiBJTkZPICBPcmllbnRhdGlvbkJpYXNGaWx0ZXJlciAtIFBhc3Npbmc6IEhDQzExNDNfdHVtb3IgRyogVCBwPTcuMDM5MTI2NTAzOTA0OTI0NEUtOSBGb2I9MC4zODQ2MTUzODQ2MTUzODQ2NA0KDQoxODo0Nzo1OC4yMDMgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBQYXNzaW5nOiBIQ0MxMTQzX3R1bW9yIEcqIFQgcD0wLjAgRm9iPTAuNTU1NTU1NTU1NTU1NTU1Ng0KDQoxODo0Nzo1OC4yMDMgSU5GTyAgT3JpZW50YXRpb25CaWFzRmlsdGVyZXIgLSBVcGRhdGluZyBnZW5vdHlwZXMgYW5kIGNyZWF0aW5nIGZpbmFsIGxpc3Qgb2YgdmFyaWFudHMuLi4NCg0KMTg6NDc6NTguMjA0IElORk8gIFByb2dyZXNzTWV0ZXIgLSBTdGFydGluZyB0cmF2ZXJzYWwNCg0KMTg6NDc6NTguMjA0IElORk8gIFByb2dyZXNzTWV0ZXIgLSAgICAgICAgQ3VycmVudCBMb2N1cyAgRWxhcHNlZCBNaW51dGVzICAgICBSZWNvcmRzIFByb2Nlc3NlZCAgIFJlY29yZHMvTWludXRlDQoNCjE4OjQ3OjU4LjIwNiBJTkZPICBQcm9ncmVzc01ldGVyIC0gICAgICAgICAgICAgdW5tYXBwZWQgICAgICAgICAgICAgIDAuMCAgICAgICAgICAgICAgICAgICAxMTEgICAgIDMzMzAwMDAuMA0KICAgIA0KMTg6NDc6NTguMjA2IElORk8gIFByb2dyZXNzTWV0ZXIgLSBUcmF2ZXJzYWwgY29tcGxldGUuIFByb2Nlc3NlZCAxMTEgdG90YWwgcmVjb3JkcyBpbiAwLjAgbWludXRlcy4NCg0KDQoxODo0Nzo1OC4yMDYgSU5GTyAgRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgLSBXcml0aW5nIHZhcmlhbnRzIHRvIFZDRi4uLg0KDQoxODo0Nzo1OC4yNjggSU5GTyAgRmlsdGVyQnlPcmllbnRhdGlvbkJpYXMgLSBXcml0aW5nIGEgc2ltcGxlIHN1bW1hcnkgdGFibGUuLi4NCg0KDQojIyMgQWRkaXRpbmFsIGRpcmVjdG9yeSBjb250ZW50cw0KDQojIyMjIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDcxMDIgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgMjQ3IEFwciAyMCAxODo0NyAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnN1bW1hcnkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjkzIEFwciAyMCAxODo0NyAxMV9zb21hdGljX3R3aWNlZmlsdGVyZWQudmNmLmd6LnRiaQ0KDQoNCg0KIyMjIyAoZ2F0aykgcm9vdEA3ZTMwODQ1N2RlZDY6L2dhdGsvZ2F0a19hbmFseXNpcyMgemNhdCBnYXRrX211dGVjdDIvb3V0cHV0LzExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ogfCBncmVwIC12ICcjJyB8IGF3ayAnJDc9PSJQQVNTIicgfCB3YyAtbA0KDQoyNA0KDQoNCg0KDQojIyAxMy4gUmVjb3JkIHZhcmlhbnQgc3RhdGlzdGljcw0KDQoNCiMjIyMgKGJhc2UpIGIwZDI2NDdAdmNwdTQtMTZnYjp+L2dhdGtfZGF0YV9yZWYkIGJjZnRvb2xzIHN0YXRzIGdhdGtfbXV0ZWN0Mi9vdXRwdXQvMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQoNCmBgYA0KIyBUaGlzIGZpbGUgd2FzIHByb2R1Y2VkIGJ5IGJjZnRvb2xzIHN0YXRzICgxLjkraHRzbGliLTEuOSkgYW5kIGNhbiBiZSBwbG90dGVkIHVzaW5nIHBsb3QtdmNmc3RhdHMuDQoNCiMgU04gICAgWzJdaWQgICBbM11rZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRddmFsdWUNClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygc2FtcGxlczogICAgICAgICAgICAgICAgICAgICAgMg0KU04gICAgICAwICAgICAgIG51bWJlciBvZiByZWNvcmRzOiAgICAgICAgICAgICAgICAgICAgICAxMTENClNOICAgICAgMCAgICAgICBudW1iZXIgb2Ygbm8tQUxUczogICAgICAgICAgICAgICAgICAgICAgMA0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBTTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICA5Mw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBNTlBzOiAgICAgICAgICAgICAgICAgICAgICAgICAwDQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIGluZGVsczogICAgICAgICAgICAgICAgICAgICAgIDE4DQpTTiAgICAgIDAgICAgICAgbnVtYmVyIG9mIG90aGVyczogICAgICAgICAgICAgICAgICAgICAgIDANClNOICAgICAgMCAgICAgICBudW1iZXIgb2YgbXVsdGlhbGxlbGljIHNpdGVzOiAgICAgICAgICAgNw0KU04gICAgICAwICAgICAgIG51bWJlciBvZiBtdWx0aWFsbGVsaWMgU05QIHNpdGVzOiAgICAgICAwDQpgYGANCg0KDQoNCiMjIDE0LiBPdXRwdXQgZGlyZWN0b3J5IGNvbnRlbnRzDQoNCiMjIyMgIChnYXRrKSByb290QDdlMzA4NDU3ZGVkNjovZ2F0ay9nYXRrX2FuYWx5c2lzIyBscyAtbCBnYXRrX211dGVjdDIvb3V0cHV0Lw0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgMTc2NDkgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmJhaXRfYmlhc19kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODQyIEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5iYWl0X2JpYXNfc3VtbWFyeV9tZXRyaWNzLnR4dA0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyMjEgQXByIDIwIDE4OjEwIDEwX3R1bW9yX2FydGlmYWN0LmVycm9yX3N1bW1hcnlfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDE0MTc1IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9kZXRhaWxfbWV0cmljcy50eHQNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxODU2IEFwciAyMCAxODoxMCAxMF90dW1vcl9hcnRpZmFjdC5wcmVfYWRhcHRlcl9zdW1tYXJ5X21ldHJpY3MudHh0DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0NzEwMiBBcHIgMjAgMTg6NDcgMTFfc29tYXRpY190d2ljZWZpbHRlcmVkLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAyNDcgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3ouc3VtbWFyeQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgIDEyOTMgQXByIDIwIDE4OjQ3IDExX3NvbWF0aWNfdHdpY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA0MTk1OSBBcHIgMjAgMTQ6MTQgMV9zb21hdGljX20yLnZjZi5neg0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgMzUgQXByIDIwIDE0OjE0IDFfc29tYXRpY19tMi52Y2YuZ3ouc3RhdHMNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAxMjg2IEFwciAyMCAxNDoxNCAxX3NvbWF0aWNfbTIudmNmLmd6LnRiaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNjk1ODQgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhaQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE3MDkxNDcgQXByIDIwIDE0OjE0IDJfdHVtb3Jfbm9ybWFsX20yLmJhbQ0KDQotcnctci0tci0tIDEgcm9vdCByb290IDE0NTAyMDcgQXByIDIwIDE1OjQwIDNfSEcwMDE5MC52Y2YuZ3oNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgICAgIDM1IEFwciAyMCAxNTo0MCAzX0hHMDAxOTAudmNmLmd6LnN0YXRzDQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICA1MjgwOCBBcHIgMjAgMTU6NDAgM19IRzAwMTkwLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDI5MjkyIEFwciAyMCAxNzowMSA2X0hHMDE5MF9wb24udmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgICA3NyBBcHIgMjAgMTc6MDEgNl9IRzAxOTBfcG9uLnZjZi5nei50YmkNCg0KLXJ3LXItLXItLSAxIHJvb3Qgcm9vdCAgIDQ2Nzc1IEFwciAyMCAxNzoyNSA3X3R1bW9yX2dldHBpbGV1cHN1bW1hcmllcy50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgICAgODQgQXByIDIwIDE3OjM1IDhfdHVtb3JfY2FsY3VsYXRlY29udGFtaW5hdGlvbi50YWJsZQ0KDQotcnctci0tci0tIDEgcm9vdCByb290ICAgNDUyODAgQXByIDIwIDE3OjUzIDlfc29tYXRpY19vbmNlZmlsdGVyZWQudmNmLmd6DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTc5MSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3ouZmlsdGVyaW5nU3RhdHMudHN2DQoNCi1ydy1yLS1yLS0gMSByb290IHJvb3QgICAgMTI5OSBBcHIgMjAgMTc6NTMgOV9zb21hdGljX29uY2VmaWx0ZXJlZC52Y2YuZ3oudGJpDQoNCg0KDQoNCg0KDQpgYGANCg0KDQoNCg0KDQoNCg0K