ANOVA ANALISIS

Albani

2024-03-06

Pengertian Anova

ANOVA dapat digunakan untuk memahami apakah terdapat perbedaan yang signifikan antara rata-rata hasil atau kinerja dari beberapa kelompok.

Jadi Anova itu melakukan perbandingan data. Kalau hanya perbandingan data? Kenapa gak pakai Uji T atau Z aja? Kenapa mesti harus pakai ANOVA??

Pertanyaan yang sangat Intelek saudara-saudara.

ANOVA memang fokus pada pemeriksaan perbedaan antara tiga atau lebih kelompok, tetapi pendekatan ini lebih spesifik. ANOVA tidak hanya menentukan bahwa ada perbedaan, tetapi juga memberikan informasi tentang di mana perbedaan tersebut terletak. Dengan kata lain, ANOVA membantu mengidentifikasi kelompok yang memiliki rata-rata yang berbeda secara signifikan di antara beberapa kelompok.

Perbedaan utama antara uji-t dan ANOVA terletak pada jumlah kelompok yang dianalisis. Uji-t digunakan ketika hanya ada dua kelompok yang dibandingkan, sementara ANOVA digunakan ketika ada tiga atau lebih kelompok. ANOVA dapat meminimalkan risiko kesalahan tipe I yang dapat terjadi jika Anda melakukan beberapa uji-t secara berulang kali pada set data yang sama.

ANOVA umumnya digunakan ketika Anda memiliki lebih dari dua kelompok atau variabel bebas yang ingin Anda bandingkan. Ini bisa berupa satu variabel dependen yang diukur dalam berbagai kelompok atau dua atau lebih variabel independen yang berpotensi mempengaruhi variabel dependen.

Jadi Anova di gunakan ketika data yang akan di analisa perbedaanya berjumlah 3 Variable.


One-Way Anova

One-Way ANOVA digunakan ketika kita ingin membandingkan rata-rata dari tiga atau lebih kelompok yang berbeda. Ini memeriksa apakah terdapat perbedaan yang signifikan antara kelompok-kelompok tersebut.

Contoh Kasus: Pengaruh Dosis Obat Terhadap Penurunan Tekanan Darah

Misalkan kita ingin menguji pengaruh dosis obat terhadap penurunan tekanan darah pada pasien. Kita memiliki tiga kelompok pasien yang menerima dosis obat yang berbeda: kelompok A (dosis rendah), kelompok B (dosis sedang), dan kelompok C (dosis tinggi). Untuk mengetahui jenis jenis Anova maka sebaiknya belajar dulu jenis data. Klik di sini


Two-Way ANOVA

Two-Way ANOVA (Analisis Varians Dua Arah) digunakan ketika kita ingin memeriksa pengaruh dua faktor yang independen terhadap variabel dependen. Dua faktor ini dapat berinteraksi satu sama lain, dan Two-Way ANOVA membantu untuk memahami apakah ada efek utama dari masing-masing faktor atau interaksi antara keduanya.

Contoh Kasus: Pengaruh Dosis Obat dan Jenis Kelamin Terhadap Penurunan Tekanan Darah

Misalkan kita ingin memeriksa pengaruh dua faktor, yaitu dosis obat (A: rendah, B: sedang, C: tinggi) dan jenis kelamin pasien (X: pria, Y: wanita) terhadap penurunan tekanan darah.


Repeated Measures ANOVA

Repeated Measures ANOVA (Analysis of Variance) adalah suatu metode statistik yang digunakan untuk menganalisis perbedaan rata-rata antara tiga atau lebih kelompok dalam situasi di mana subjek diukur lebih dari satu kali (dikenal sebagai “pengukuran berulang”). Ini sangat berguna ketika Anda ingin menguji perubahan dari waktu ke waktu atau efek dari suatu intervensi yang diukur pada berbagai waktu.

contoh yang lebih rinci dan konkret. Misalkan kita memiliki data hasil tes kognitif pada sekelompok siswa yang diukur pada tiga waktu yang berbeda: sebelum pembelajaran (pretest), setelah satu minggu pembelajaran (posttest1), dan setelah dua minggu pembelajaran (posttest2). Tujuan kita adalah untuk menentukan apakah ada perbedaan signifikan dalam rata-rata hasil tes kognitif pada ketiga waktu pengukuran.


Multivariate Analysis of Variance (MANOVA)

MANOVA menguji perbedaan rata-rata antara kelompok pada dua atau lebih variabel dependen yang saling terkait. Nah ini ada Dependen lagi. Masih ingetkan apa yang di maksud dengan Dependen. Yah benar sekali sample yang saling berhubungan. Klik di sini untuk penjelasanya.

Contohnya adalah : Menganalisis apakah ada perbedaan yang signifikan dalam hasil tes kognitif, emosional, dan sosial antara tiga metode pengajaran (Metode X, Y, Z).


Analysis of Covariance (ANCOVA)

Analysis of Covariance (ANCOVA) adalah metode statistik yang digunakan untuk membandingkan rata-rata antara dua atau lebih kelompok, sambil mengontrol pengaruh variabel lain yang tidak diinginkan (covariate). Ini menggabungkan elemen analisis varians (ANOVA) dan analisis regresi.

Contohnya penggunaan Ancova Menganalisis apakah ada perbedaan signifikan dalam hasil tes antara kelompok kontrol dan kelompok perlakuan setelah mengontrol tingkat kecerdasan.

ANCOVA membantu kita untuk mengisolasi efek variabel kategorikal (kelompok) pada variabel dependen (hasil tes) setelah mengontrol atau mengkoreksi pengaruh variabel kovariat (tingkat kecerdasan).


Mixed-Design ANOVA

Mixed-Design ANOVA, atau disebut juga repeated-measures ANOVA, adalah metode statistik yang digunakan dalam analisis riset pasar untuk memahami efek perubahan pada variabel dependen sepanjang waktu atau dalam berbagai kondisi, sambil mempertimbangkan pengaruh faktor-faktor antar subjek (between-subjects) dan faktor-faktor dalam subjek (within-subjects). Dalam konteks riset pasar, mixed-design ANOVA dapat membantu memahami perubahan perilaku konsumen seiring waktu atau dalam situasi yang berbeda.

Nah loh,, kenapa di sebut repeated measures Anova? Bukanya di atas sudah di jelaskan?

Mixed-Design ANOVA dan Repeated-Measures ANOVA sebenarnya memiliki perbedaan, meskipun keduanya seringkali digunakan dalam konteks analisis statistik untuk data berulang atau dalam-subjek.

Analisis Antara Subjek:

Repeated-Measures ANOVA: Fokus utama pada analisis perubahan dalam subjek.

Mixed-Design ANOVA: Memiliki dimensi tambahan untuk mempertimbangkan efek antar subjek dan interaksi antara faktor antar dan dalam subjek.

Dengan kata lain, Repeated-Measures ANOVA adalah subset dari Mixed-Design ANOVA yang terbatas pada situasi di mana kita hanya memiliki faktor dalam subjek. Mixed-Design ANOVA memberikan fleksibilitas tambahan dengan memungkinkan kita memasukkan faktor antar subjek dan menilai interaksi antara faktor-faktor tersebut.


Asumsi yang harus di penuhi


Secara umum, semua jenis ANOVA (Analysis of Variance) memiliki beberapa asumsi yang serupa, tetapi ada beberapa perbedaan berdasarkan jenis ANOVA yang digunakan. Asumsi utama ANOVA termasuk normalitas, homogenitas varians, dan independensi. Namun, beberapa jenis ANOVA memiliki asumsi tambahan atau berbeda dalam penekanan pada beberapa asumsi tertentu. Berikut adalah gambaran umum:

  • Normalitas:

Umum untuk Semua ANOVA: Data di setiap kelompok atau kondisi dianggap mengikuti distribusi normal. Asumsi ini penting untuk memastikan hasil analisis yang dapat diandalkan. ini sudah pernah saya bahas di di sini.

  • Homogenitas Varians:

Umum untuk Semua ANOVA: Varians dari data di setiap kelompok atau kondisi dianggap sekitar sama. Asumsi ini penting agar hasil analisis dapat diinterpretasikan dengan benar.

  • Independensi:

Umum untuk Semua ANOVA: Pengamatan di setiap kelompok atau kondisi harus independen satu sama lain. Ini mencakup independensi antara subjek atau unit pengamatan.

  • Linearitas (pada ANCOVA):

Khusus untuk ANCOVA: Jika covariate (faktor antar subjek) digunakan, hubungannya dengan variabel dependen harus bersifat linier.

  • Sphericity (Khusus untuk Repeated-Measures ANOVA):

Khusus untuk Repeated-Measures ANOVA: Sphericity mengacu pada homogenitas varians antar sel di dalam matriks kovarians pengukuran berulang. Diperlukan ketika ada pengukuran berulang pada subjek yang sama.


PERSIAPAAN


Package

package yang di gunakan adalah :

library(knitr)
library(readr)
library(readxl)
library(tidyselect)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stats)
library(agricolae)  # Uji post-hoc test 
## Warning: package 'agricolae' was built under R version 4.3.3
library(httr)

Data set

Data set yang di gunakan mengambil dari Github klik di sini

# Data untuk oneway anova
oneway_anova_data = read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "ONE WAY")

# Data untuk twoway anova
twoway_anova_data = read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "TWO WAY")
## New names:
## • `` -> `...1`
# Data untuk Repleated measure anova
Repleated_measure_anova_data = read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "Repeated Measures ANOVA ")

# Data untuk Manova
Manova_data = read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "Manova")

# Data untuk Analysis of covariancy
Ancova= read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "ANCOVA")

# Data untuk Mixed design Anova
Mixes_anove = read_excel("C:/Users/Administrator/Downloads/06. Anova_Analysis_Data_Set(1).xlsx", sheet = "Mixed-Design ANOVA")

Data di atas adalah sebagai berikut :

str(oneway_anova_data)
## tibble [150 × 3] (S3: tbl_df/tbl/data.frame)
##  $ NO                     : num [1:150] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Dosis                  : chr [1:150] "Dosis_Rendah" "Dosis_Rendah" "Dosis_Rendah" "Dosis_Rendah" ...
##  $ Penurunan_Tekanan_Darah: num [1:150] 3.88 4.54 8.12 5.14 5.26 ...
str(twoway_anova_data)
## tibble [150 × 4] (S3: tbl_df/tbl/data.frame)
##  $ ...1                   : num [1:150] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Dosis                  : chr [1:150] "Dosis Rendah" "Dosis Rendah" "Dosis Rendah" "Dosis Rendah" ...
##  $ Jenis_Kelamin          : chr [1:150] "Pria" "Pria" "Pria" "Pria" ...
##  $ Penurunan_Tekanan_Darah: num [1:150] 6.58 6.54 5.66 2.98 4.76 ...
str(Repleated_measure_anova_data)
## tibble [12 × 5] (S3: tbl_df/tbl/data.frame)
##  $ No       : num [1:12] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Nama     : chr [1:12] "Amin" "Amir" "Try" "Ban" ...
##  $ Pretest  : num [1:12] 20 19 50 90 70 64 65 50 70 48 ...
##  $ posttest1: num [1:12] 25 30 85 95 65 62 80 68 85 65 ...
##  $ posttest2: num [1:12] 30 40 70 98 78 78 85 75 88 72 ...
str(Manova_data)
## tibble [20 × 5] (S3: tbl_df/tbl/data.frame)
##  $ ID            : num [1:20] 1 1 2 2 3 3 4 4 5 5 ...
##  $ Kelompok      : chr [1:20] "Kelompok1" "Kelompok1" "Kelompok1" "Kelompok1" ...
##  $ Waktu         : chr [1:20] "Pretest" "Pretest" "Pretest" "Pretest" ...
##  $ TesKognitif   : num [1:20] 60 75 80 85 90 55 70 75 80 85 ...
##  $ TesKreativitas: num [1:20] 35 40 45 50 55 30 38 42 48 53 ...
str(Ancova)
## tibble [20 × 4] (S3: tbl_df/tbl/data.frame)
##  $ ID      : num [1:20] 1 2 3 4 5 6 7 8 9 10 ...
##  $ Kelompok: chr [1:20] "A" "A" "A" "A" ...
##  $ Pretest : num [1:20] 45 50 42 48 55 40 46 38 50 52 ...
##  $ Posttest: num [1:20] 68 75 62 70 80 65 72 60 78 76 ...
str(Mixes_anove)
## tibble [40 × 5] (S3: tbl_df/tbl/data.frame)
##  $ NO             : num [1:40] 1 2 3 4 5 6 7 8 9 10 ...
##  $ ID             : num [1:40] 1 1 2 2 3 3 4 4 5 5 ...
##  $ JenisIntervensi: chr [1:40] "A" "A" "A" "A" ...
##  $ Waktu          : chr [1:40] "Pretest" "Posttest" "Pretest" "Posttest" ...
##  $ TesKognitif    : num [1:40] 65 70 78 80 85 60 65 72 75 80 ...

Analysis case

Pedoman Penting

Penting untuk diingat bahwa hasil yang signifikan dalam uji ANOVA hanya memberi tahu Anda bahwa ada perbedaan di antara kelompok-kelompok tersebut, namun tidak memberikan informasi tentang kelompok mana yang berbeda secara signifikan. Oleh karena itu, jika Anda mendapatkan hasil yang signifikan dalam ANOVA, perlu dilakukan analisis lanjutan, seperti uji perbandingan kelompok (post-hoc test), untuk menentukan kelompok yang menyebabkan perbedaan tersebut.

Bagaimana menentukan apakah nilai F-statistic besar atau kecil dapat relatif dan tergantung pada konteksnya. Beberapa pedoman umum adalah:

Jika nilai F-statistic lebih besar dari satu, dan p-value kecil (< 0.05): Ini dapat dianggap sebagai indikator adanya perbedaan yang signifikan antara kelompok.

Jika nilai F-statistic mendekati 1 atau p-value besar (> 0.05): Ini dapat menunjukkan bahwa perbedaan antara kelompok tidak signifikan.

Namun, penting untuk selalu memperhitungkan konteks spesifik eksperimen atau analisis Anda. Terkadang, penilaian lebih lanjut seperti melihat distribusi data, ukuran sampel, dan pertimbangan praktis lainnya juga diperlukan untuk interpretasi yang akurat.

Let’s Goooooooooo


One-Way ANOVA

Pengaruh Dosis Obat Penurun Tekanan Darah Terhadap Penurunan Tekanan Darah Pasien

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi pengaruh dosis obat penurun tekanan darah terhadap penurunan tekanan darah pada pasien. Penelitian ini menggunakan metode statistik One-Way ANOVA untuk membandingkan rata-rata penurunan tekanan darah antara tiga kelompok dosis obat yang berbeda.

Desain penelitian

INGAT ANOVA DI GUNAKAN UNTUK MEMBANDINGKAN DATA BERBEDA (Independen)

Variabel Independen:

Dosis Obat (Faktor Tunggal)

  • Kelompok 1 (Dosis Rendah)
  • Kelompok 2 (Dosis Sedang)
  • Kelompok 3 (Dosis Tinggi)

Metode

  • Pengumpulan Data:

Data penurunan tekanan darah dikumpulkan dari pasien yang menerima dosis obat berbeda.

  • Analisis Statistik:

Melakukan One-Way ANOVA untuk mengevaluasi apakah terdapat perbedaan signifikan antara rata-rata penurunan tekanan darah di tiga kelompok dosis obat.

Hasil

head(oneway_anova_data,5)
## # A tibble: 5 × 3
##      NO Dosis        Penurunan_Tekanan_Darah
##   <dbl> <chr>                          <dbl>
## 1     1 Dosis_Rendah                    3.88
## 2     2 Dosis_Rendah                    4.54
## 3     3 Dosis_Rendah                    8.12
## 4     4 Dosis_Rendah                    5.14
## 5     5 Dosis_Rendah                    5.26
result_onewayanova = aov(Penurunan_Tekanan_Darah ~ Dosis, data = oneway_anova_data)
summary(result_onewayanova)
##              Df Sum Sq Mean Sq F value Pr(>F)    
## Dosis         2  683.4   341.7    96.5 <2e-16 ***
## Residuals   147  520.5     3.5                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Silahkan baca pedoman di subab di atas, karena F statsitic lebih besar dari 1 maka dapat dianggap sebagai indikator adanya perbedaan yang signifikan antara kelompok.

Uji Post Host test

Post-hoc test digunakan setelah Anda mendapatkan hasil yang signifikan dalam analisis ANOVA dan ingin menentukan perbedaan khusus antara kelompok-kelompok tertentu. Beberapa post-hoc test yang umum digunakan termasuk Tukey’s Honest Significant Difference (HSD), Bonferroni, dan lainnya.

oneway_postgic_tukey = TukeyHSD(result_onewayanova, "Dosis", conf.level = 0.05)
print(oneway_postgic_tukey)
##   Tukey multiple comparisons of means
##     5% family-wise confidence level
## 
## Fit: aov(formula = Penurunan_Tekanan_Darah ~ Dosis, data = oneway_anova_data)
## 
## $Dosis
##                               diff      lwr      upr p adj
## Dosis_Sedang-Dosis_Rendah 2.423392 2.308565 2.538219     0
## Dosis_Tinggi-Dosis_Rendah 5.224009 5.109182 5.338837     0
## Dosis_Tinggi-Dosis_Sedang 2.800617 2.685790 2.915445     0
diff (Difference): Nilai ini menunjukkan perbedaan rata-rata antara dua kelompok dosis yang dibandingkan.

lwr (Lower Confidence Interval): Batas bawah dari interval kepercayaan 95% untuk perbedaan rata-rata.

upr (Upper Confidence Interval): Batas atas dari interval kepercayaan 95% untuk perbedaan rata-rata.

p adj (Adjusted p-value): Nilai p yang telah disesuaikan untuk mengendalikan tingkat kesalahan tipe I (family-wise error rate) dalam perbandingan multipel. Nilai ini menunjukkan seberapa signifikan perbedaan rata-rata antara dua kelompok dosis.

Dalam kesimpulan umum:

Jika nilai "p adj" kurang dari tingkat signifikansi yang dipilih (biasanya 0.05), kita dapat menyimpulkan bahwa perbedaan rata-rata antara dua kelompok dosis tersebut adalah signifikan secara statistik.

Perhatikan bahwa dalam kasus Anda, semua nilai "p adj" sangat kecil (0), menunjukkan bahwa perbedaan rata-rata antara setiap pasangan kelompok dosis adalah signifikan secara statistik.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


Two-Way ANOVA

Pengaruh Dosis Obat dan Jenis Kelamin terhadap Penurunan Tekanan Darah

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi pengaruh dua faktor, yaitu dosis obat (Dosis) dan jenis kelamin pasien (Jenis Kelamin), terhadap penurunan tekanan darah. Analisis ini menggunakan metode statistik Two-Way ANOVA untuk memahami apakah terdapat perbedaan signifikan dan interaksi antara kedua faktor tersebut.

Desain

Variabel Independen:

  • Dosis Obat (Dosis)

    Dosis Rendah Dosis Sedang Dosis Tinggi

  • Jenis Kelamin (Jenis Kelamin)

    Pria Wanita

Variabel Dependen:

  • Penurunan Tekanan Darah

Metode

Melakukan Two-Way ANOVA untuk menilai efek dosis obat, efek jenis kelamin, dan interaksi di antara keduanya terhadap penurunan tekanan darah. Data penurunan tekanan darah dikumpulkan dari pasien yang dibagi berdasarkan dosis obat yang diterima dan jenis kelamin.

Hasil

head(twoway_anova_data, 5)
## # A tibble: 5 × 4
##    ...1 Dosis        Jenis_Kelamin Penurunan_Tekanan_Darah
##   <dbl> <chr>        <chr>                           <dbl>
## 1     1 Dosis Rendah Pria                             6.58
## 2     2 Dosis Rendah Pria                             6.54
## 3     3 Dosis Rendah Pria                             5.66
## 4     4 Dosis Rendah Pria                             2.98
## 5     5 Dosis Rendah Pria                             4.76
result_twowayanova = aov(Penurunan_Tekanan_Darah ~ Dosis * Jenis_Kelamin, data = twoway_anova_data)
summary(result_twowayanova)
##                      Df Sum Sq Mean Sq F value Pr(>F)    
## Dosis                 2  491.8  245.90  69.373 <2e-16 ***
## Jenis_Kelamin         1   19.0   19.03   5.369 0.0219 *  
## Dosis:Jenis_Kelamin   2  333.5  166.73  47.037 <2e-16 ***
## Residuals           144  510.4    3.54                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Kesimpulan:

Efek dosis, jenis kelamin, dan interaksi antara keduanya memiliki nilai p yang sangat kecil, menunjukkan bahwa mereka semua signifikan secara statistik.
Efek dosis memiliki F-statistic yang tinggi, menunjukkan adanya perbedaan yang signifikan antara dosis.
Efek jenis kelamin juga signifikan, meskipun dengan F-statistic yang lebih rendah.
Interaksi antara dosis dan jenis kelamin juga signifikan, menunjukkan bahwa efek dosis dapat bervariasi tergantung pada jenis kelamin.

Namun, untuk menentukan perbedaan spesifik antar kelompok, Anda mungkin ingin melihat hasil post-hoc test seperti Tukey’s HSD.

post-hoc test

print(result_twowayanova)
## Call:
##    aov(formula = Penurunan_Tekanan_Darah ~ Dosis * Jenis_Kelamin, 
##     data = twoway_anova_data)
## 
## Terms:
##                    Dosis Jenis_Kelamin Dosis:Jenis_Kelamin Residuals
## Sum of Squares  491.8016       19.0299            333.4590  510.4246
## Deg. of Freedom        2             1                   2       144
## 
## Residual standard error: 1.882715
## Estimated effects may be unbalanced
post_hoc_twowayanova = TukeyHSD(result_twowayanova, c("Dosis", "Jenis_Kelamin", "Dosis:Jenis_Kelamin"))
print(post_hoc_twowayanova)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = Penurunan_Tekanan_Darah ~ Dosis * Jenis_Kelamin, data = twoway_anova_data)
## 
## $Dosis
##                               diff      lwr      upr   p adj
## Dosis Sedang-Dosis Rendah 1.905345 1.013617 2.797073 3.8e-06
## Dosis Tinggi-Dosis Rendah 4.421288 3.529560 5.313016 0.0e+00
## Dosis Tinggi-Dosis Sedang 2.515943 1.624214 3.407671 0.0e+00
## 
## $Jenis_Kelamin
##                  diff       lwr      upr     p adj
## Wanita-Pria 0.7123657 0.1046755 1.320056 0.0219113
## 
## $`Dosis:Jenis_Kelamin`
##                                               diff        lwr         upr
## Dosis Sedang:Pria-Dosis Rendah:Pria      4.7845108  3.2463645  6.32265697
## Dosis Tinggi:Pria-Dosis Rendah:Pria      3.9149585  2.3768122  5.45310467
## Dosis Rendah:Wanita-Dosis Rendah:Pria    2.2942564  0.7561102  3.83240264
## Dosis Sedang:Wanita-Dosis Rendah:Pria    1.3204362 -0.2177100  2.85858238
## Dosis Tinggi:Wanita-Dosis Rendah:Pria    7.2218737  5.6837274  8.76001986
## Dosis Tinggi:Pria-Dosis Sedang:Pria     -0.8695523 -2.4076985  0.66859391
## Dosis Rendah:Wanita-Dosis Sedang:Pria   -2.4902543 -4.0284005 -0.95210812
## Dosis Sedang:Wanita-Dosis Sedang:Pria   -3.4640746 -5.0022208 -1.92592838
## Dosis Tinggi:Wanita-Dosis Sedang:Pria    2.4373629  0.8992167  3.97550911
## Dosis Rendah:Wanita-Dosis Tinggi:Pria   -1.6207020 -3.1588482 -0.08255582
## Dosis Sedang:Wanita-Dosis Tinggi:Pria   -2.5945223 -4.1326685 -1.05637608
## Dosis Tinggi:Wanita-Dosis Tinggi:Pria    3.3069152  1.7687690  4.84506140
## Dosis Sedang:Wanita-Dosis Rendah:Wanita -0.9738203 -2.5119665  0.56432595
## Dosis Tinggi:Wanita-Dosis Rendah:Wanita  4.9276172  3.3894710  6.46576344
## Dosis Tinggi:Wanita-Dosis Sedang:Wanita  5.9014375  4.3632913  7.43958370
##                                             p adj
## Dosis Sedang:Pria-Dosis Rendah:Pria     0.0000000
## Dosis Tinggi:Pria-Dosis Rendah:Pria     0.0000000
## Dosis Rendah:Wanita-Dosis Rendah:Pria   0.0004287
## Dosis Sedang:Wanita-Dosis Rendah:Pria   0.1370875
## Dosis Tinggi:Wanita-Dosis Rendah:Pria   0.0000000
## Dosis Tinggi:Pria-Dosis Sedang:Pria     0.5782385
## Dosis Rendah:Wanita-Dosis Sedang:Pria   0.0000962
## Dosis Sedang:Wanita-Dosis Sedang:Pria   0.0000000
## Dosis Tinggi:Wanita-Dosis Sedang:Pria   0.0001453
## Dosis Rendah:Wanita-Dosis Tinggi:Pria   0.0325327
## Dosis Sedang:Wanita-Dosis Tinggi:Pria   0.0000419
## Dosis Tinggi:Wanita-Dosis Tinggi:Pria   0.0000001
## Dosis Sedang:Wanita-Dosis Rendah:Wanita 0.4507205
## Dosis Tinggi:Wanita-Dosis Rendah:Wanita 0.0000000
## Dosis Tinggi:Wanita-Dosis Sedang:Wanita 0.0000000

Dosis:

Perbedaan antara Dosis Sedang dan Dosis Rendah signifikan (p = 3.8e-06), dengan perbedaan sekitar 1.91.

Perbedaan antara Dosis Tinggi dan Dosis Rendah juga signifikan (p = 0.0), dengan perbedaan sekitar 4.42.

Perbedaan antara Dosis Tinggi dan Dosis Sedang signifikan (p = 0.0), dengan perbedaan sekitar 2.52.

Jenis Kelamin:

Terdapat perbedaan signifikan antara wanita dan pria (p = 0.0219), dengan perbedaan sekitar 0.71.

Kesimpulan:

  • Terdapat perbedaan signifikan dalam penurunan tekanan darah antara setiap tingkat dosis.

  • Jenis kelamin juga memberikan dampak yang signifikan terhadap penurunan tekanan darah.

  • Terdapat interaksi yang signifikan antara dosis dan jenis kelamin, menunjukkan bahwa efek dosis dapat bervariasi tergantung pada jenis kelamin.

  • Dalam beberapa kasus, perbedaan signifikan juga terjadi antara dosis dan jenis kelamin spesifik. Misalnya, dosis tinggi pada wanita memiliki perbedaan yang signifikan dengan dosis tinggi pada pria, dosis rendah pada pria, dan dosis sedang pada pria.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


Repeated Measures ANOVA

mengevaluasi perubahan dalam hasil tes kognitif pada sekelompok siswa sebelum, selama, dan setelah periode pembelajaran.

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi perubahan dalam hasil tes kognitif pada sekelompok siswa sebelum, selama, dan setelah periode pembelajaran. Metode analisis yang digunakan adalah Repeated Measures Analysis of Variance (ANOVA) untuk menilai apakah terdapat perbedaan signifikan dalam rata-rata hasil tes kognitif pada ketiga waktu pengukuran

Desain

Penelitian ini menggunakan desain Repeated Measures, di mana setiap partisipan diukur pada ketiga waktu yang berbeda.

Model

Analisis statistik Repeated Measures ANOVA dilakukan untuk menilai apakah terdapat perbedaan signifikan dalam hasil tes kognitif pada ketiga waktu pengukuran.

Hasil

head(Repleated_measure_anova_data, 5)
## # A tibble: 5 × 5
##      No Nama  Pretest posttest1 posttest2
##   <dbl> <chr>   <dbl>     <dbl>     <dbl>
## 1     1 Amin       20        25        30
## 2     2 Amir       19        30        40
## 3     3 Try        50        85        70
## 4     4 Ban        90        95        98
## 5     5 May        70        65        78
result_Measure_anova = aov(cbind(Pretest, posttest1, posttest2) ~ 1 + Error(No), data = Repleated_measure_anova_data)

summary(result_Measure_anova)
## 
## Error: No
##  Response Pretest :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals  1 680.73  680.73               
## 
##  Response posttest1 :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals  1 1082.8  1082.8               
## 
##  Response posttest2 :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals  1 1254.2  1254.2               
## 
## 
## Error: Within
##  Response Pretest :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 10 3857.9  385.79               
## 
##  Response posttest1 :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 10 3808.1  380.81               
## 
##  Response posttest2 :
##           Df Sum Sq Mean Sq F value Pr(>F)
## Residuals 10 2812.7  281.27

Error: Within”, yang menunjukkan analisis efek dalam (within-subject effects). Analisis ini memberikan informasi tentang variabilitas residu setelah pengaruh faktor-faktor yang diukur dalam analisis Repeated Measures ANOVA.

Residuals: Df = 10 (jumlah subjek - 1), Sum Sq = 3857.9 (total sum of squares residu), Mean Sq = 385.79 (rata-rata kuadrat residu), F value = Tidak diberikan, dan Pr(>F) = Tidak diberikan. Ini memberikan informasi tentang variabilitas residu untuk variabel Pretest setelah pengaruh semua faktor yang diukur dalam analisis.

Proses ini diulangi untuk variabel Response posttest1 dan posttest2, memberikan informasi yang serupa tetapi terkait dengan variabel respons tersebut.

Ringkasan ini memberikan pandangan awal tentang signifikansi statistik dari efek dalam dan efek antara (antara subjek) dalam analisis Repeated Measures ANOVA untuk setiap variabel respons yang diukur. Nilai-nilai F dan nilai p (Pr(>F)) digunakan untuk menilai signifikansi statistik dari efek-efek ini.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


Multivariate Analysis of Variance (MANOVA)

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi perbedaan rata-rata hasil tes kognitif dan hasil tes kreativitas pada sekelompok siswa pada dua kelompok kondisi pembelajaran yang berbeda. Analisis yang digunakan adalah Multivariate Analysis of Variance (MANOVA) untuk menilai apakah terdapat perbedaan signifikan dalam kombinasi variabel dependen.

Desain

Penelitian ini menggunakan desain faktorial dengan dua faktor: kondisi pembelajaran dan waktu pengukuran.

Setiap partisipan diukur pada dua variabel dependen: hasil tes kognitif dan hasil tes kreativitas.

Model

Analisis statistik MANOVA dilakukan untuk menilai apakah ada perbedaan signifikan antara kelompok kondisi pembelajaran, waktu pengukuran, dan interaksi antara keduanya.

Hasil

head(Manova_data, 5)
## # A tibble: 5 × 5
##      ID Kelompok  Waktu   TesKognitif TesKreativitas
##   <dbl> <chr>     <chr>         <dbl>          <dbl>
## 1     1 Kelompok1 Pretest          60             35
## 2     1 Kelompok1 Pretest          75             40
## 3     2 Kelompok1 Pretest          80             45
## 4     2 Kelompok1 Pretest          85             50
## 5     3 Kelompok1 Pretest          90             55
result_manova = manova(cbind(TesKognitif, TesKreativitas) ~ Kelompok * Waktu, data = Manova_data)
summary(result_manova)
##           Df   Pillai approx F num Df den Df Pr(>F)
## Kelompok   1 0.091625  0.85737      2     17 0.4418
## Residuals 18

Pillai Ini adalah nilai statistik Pillai’s Trace, yang menunjukkan seberapa besar efek faktor “Kelompok” dalam menjelaskan variasi dalam variabel respons (TesKognitif dan TesKreativitas). Nilai ini berkisar antara 0 dan 1, dan semakin mendekati 1, semakin besar efeknya.

hasil menunjukkan bahwa faktor “Kelompok” tidak memiliki efek signifikan terhadap TesKognitif dan TesKreativitas, berdasarkan nilai p yang tinggi. Perlu diingat bahwa interpretasi lebih lanjut dapat bergantung pada konteks eksperimen dan pengetahuan domain spesifik.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


Analysis of Covariance (ANCOVA)

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi perbedaan rata-rata hasil tes kognitif antara dua kelompok kondisi pembelajaran, dengan mempertimbangkan variabel kontrol berupa skor pretest sebagai covariate. Analisis yang digunakan adalah Analysis of Covariance (ANCOVA) untuk mengendalikan pengaruh variabel kontrol dan menentukan apakah perbedaan antara kelompok tetap signifikan.

Desain

Penelitian ini menggunakan desain eksperimental dengan faktor kondisi pembelajaran (Kelompok) dan variabel kontrol (Pretest). Masing-masing partisipan diukur pada dua waktu yang berbeda: sebelum pembelajaran (pretest) dan setelah pembelajaran (posttest).

Model

Analisis statistik ANCOVA dilakukan untuk menilai perbedaan rata-rata hasil tes kognitif antara kedua kelompok, dengan mengendalikan skor pretest sebagai covariate.

Hasil

head(Ancova, 5)
## # A tibble: 5 × 4
##      ID Kelompok Pretest Posttest
##   <dbl> <chr>      <dbl>    <dbl>
## 1     1 A             45       68
## 2     2 A             50       75
## 3     3 A             42       62
## 4     4 A             48       70
## 5     5 A             55       80
result_Ancova = aov(Posttest ~ Kelompok + Pretest, data = Ancova)
summary(result_Ancova)
##             Df Sum Sq Mean Sq F value   Pr(>F)    
## Kelompok     1  720.0   720.0   227.6 2.83e-11 ***
## Pretest      1  559.0   559.0   176.7 2.07e-10 ***
## Residuals   17   53.8     3.2                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Berdasarkan hasil ini, dapat disimpulkan bahwa baik variabel kelompok maupun kovariat Pretest memiliki efek yang signifikan pada variabel Posttest. Hal ini dapat bermanfaat dalam memahami pengaruh faktor kelompok dan kovariat dalam menjelaskan variasi dalam hasil Posttest.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


Mixed-Design ANOVA

Pendahuluan

Penelitian ini bertujuan untuk mengevaluasi pengaruh dua faktor, yaitu jenis intervensi (Intervensi A dan Intervensi B) dan waktu pengukuran (pretest dan posttest), serta interaksi antara keduanya, terhadap hasil tes kognitif siswa. Analisis yang digunakan adalah Mixed-Design Analysis of Variance (ANOVA) untuk mengidentifikasi apakah ada perbedaan signifikan dalam hasil tes kognitif pada berbagai tingkatan waktu dan jenis intervensi.

Desain

Penelitian ini menggunakan desain faktorial dengan dua faktor: jenis intervensi (Intervensi A dan Intervensi B) dan waktu pengukuran (pretest dan posttest). Masing-masing partisipan diukur pada dua waktu yang berbeda.

Model

Analisis statistik Mixed-Design ANOVA dilakukan untuk mengevaluasi pengaruh jenis intervensi, waktu pengukuran, dan interaksi antara keduanya terhadap hasil tes kognitif.

Hasil

sintaks di bawah ini mencoba untuk memahami bagaimana intervensi atau perlakuan (dengan JenisIntervensi) dan waktu pengukuran (Waktu) mempengaruhi variabel TesKognitif. Model ini juga memperhitungkan efek acak individu pada variabel Waktu, menunjukkan bahwa ada variasi antar individu yang mungkin perlu diperhitungkan

result_mixed_anova <- aov(TesKognitif ~ JenisIntervensi * Waktu + Error(ID/Waktu), data = Mixes_anove)
summary(result_mixed_anova)
## 
## Error: ID
##                 Df Sum Sq Mean Sq
## JenisIntervensi  1  47.94   47.94
## 
## Error: ID:Waktu
##       Df Sum Sq Mean Sq
## Waktu  1   22.2    22.2
## 
## Error: Within
##                       Df Sum Sq Mean Sq F value   Pr(>F)    
## JenisIntervensi        1 2883.1  2883.1  42.719 1.75e-07 ***
## Waktu                  1    0.9     0.9   0.013    0.909    
## JenisIntervensi:Waktu  1    0.3     0.3   0.004    0.950    
## Residuals             34 2294.6    67.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ringkasan hasil ANOVA campuran yang diberikan menunjukkan informasi tentang pengaruh variabel JenisIntervensi, Waktu, serta interaksi antara keduanya terhadap variabel TesKognitif. Berikut adalah interpretasi hasilnya:

  • Error: ID (Variabilitas antar Individu):

JenisIntervensi: Terdapat variasi yang signifikan dalam TesKognitif antar individu (ID). Hal ini dilihat dari nilai F-ratio yang signifikan (42.719) dengan nilai p yang sangat rendah (1.75e-07 atau 0.000000175), ditandai dengan tanda tiga bintang (***). Oleh karena itu, ada bukti yang kuat bahwa terdapat perbedaan signifikan dalam TesKognitif antar individu berdasarkan JenisIntervensi.

  • Error: ID:Waktu (Variabilitas antar Individu terhadap Waktu):

Waktu: Terdapat variasi yang signifikan dalam TesKognitif antar individu untuk perubahan waktu. Meskipun nilai F-ratio (0.013) cukup rendah dan nilai p (0.909) sangat tinggi, ini menunjukkan bahwa variabilitas TesKognitif terkait dengan individu, meskipun tidak signifikan secara statistik terhadap Waktu.

  • Error: Within (Variabilitas dalam Individu):

JenisIntervensi: Terdapat variasi yang signifikan dalam TesKognitif antar individu dalam kelompok yang sama. Hal ini dilihat dari nilai F-ratio yang signifikan (42.719) dengan nilai p yang sangat rendah (1.75e-07), ditandai dengan tanda tiga bintang (***). Oleh karena itu, ada bukti yang kuat bahwa terdapat perbedaan signifikan dalam TesKognitif antar individu berdasarkan JenisIntervensi.

Waktu: Tidak ada variasi yang signifikan dalam TesKognitif antar individu untuk perubahan waktu. Nilai p yang tinggi (0.909) menunjukkan bahwa efek Waktu tidak signifikan terhadap TesKognitif antar individu.

JenisIntervensi:Waktu: Tidak ada variasi yang signifikan dalam TesKognitif antar individu untuk interaksi antara JenisIntervensi dan Waktu. Nilai p yang tinggi (0.950) menunjukkan bahwa efek interaksi antara JenisIntervensi dan Waktu tidak signifikan terhadap TesKognitif antar individu.

Residuals: Sisa atau variabilitas yang tidak dapat dijelaskan oleh variabel-variabel yang dimasukkan ke dalam model.

Signif. codes:

***: Signifikansi pada tingkat 0.001.
**: Signifikansi pada tingkat 0.01.
*: Signifikansi pada tingkat 0.05.
.: Signifikansi pada tingkat 0.1.
1: Tidak signifikan.

Catatan: Data set di atas hanya bersifat fiktif dan dibuat untuk tujuan demonstrasi. Anda dapat menggunakan data sebenarnya dari penelitian Anda untuk melakukan analisis Repeated Measures ANOVA.


LS0tDQp0aXRsZTogIkFOT1ZBIEFOQUxJU0lTIg0KYXV0aG9yOiAiQWxiYW5pIg0KZGF0ZTogIjIwMjQtMDMtMDYiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OmRvd25jdXRlOg0KICAgIGNvZGVfZm9sZGluZyA6IHNob3cNCiAgICBjb2RlX2Rvd25sb2FkIDogeWVzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5pbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGhpZ2hsaWdodDogTlVMTA0KICAgIHVzZV9ib29rZG93bjogZmFsc2UNCnBrZ2Rvd246DQogIGFzX2lzOiB0cnVlDQotLS0NCg0KIyBQZW5nZXJ0aWFuIEFub3ZhDQpBTk9WQSBkYXBhdCBkaWd1bmFrYW4gdW50dWsgbWVtYWhhbWkgYXBha2FoIHRlcmRhcGF0IHBlcmJlZGFhbiB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIHJhdGEtcmF0YSBoYXNpbCBhdGF1IGtpbmVyamEgZGFyaSBiZWJlcmFwYSBrZWxvbXBvay4gDQoNCkphZGkgQW5vdmEgaXR1IG1lbGFrdWthbiBwZXJiYW5kaW5nYW4gZGF0YS4gS2FsYXUgaGFueWEgcGVyYmFuZGluZ2FuIGRhdGE/IEtlbmFwYSBnYWsgcGFrYWkgVWppIFQgYXRhdSBaIGFqYT8gS2VuYXBhIG1lc3RpIGhhcnVzIHBha2FpIEFOT1ZBPz8gDQoNClBlcnRhbnlhYW4geWFuZyBzYW5nYXQgSW50ZWxlayBzYXVkYXJhLXNhdWRhcmEuIA0KDQpBTk9WQSBtZW1hbmcgZm9rdXMgcGFkYSBwZW1lcmlrc2FhbiBwZXJiZWRhYW4gYW50YXJhIHRpZ2EgYXRhdSBsZWJpaCBrZWxvbXBvaywgdGV0YXBpIHBlbmRla2F0YW4gaW5pIGxlYmloIHNwZXNpZmlrLiBBTk9WQSB0aWRhayBoYW55YSBtZW5lbnR1a2FuIGJhaHdhIGFkYSBwZXJiZWRhYW4sIHRldGFwaSBqdWdhIG1lbWJlcmlrYW4gaW5mb3JtYXNpIHRlbnRhbmcgZGkgbWFuYSBwZXJiZWRhYW4gdGVyc2VidXQgdGVybGV0YWsuIERlbmdhbiBrYXRhIGxhaW4sIEFOT1ZBIG1lbWJhbnR1IG1lbmdpZGVudGlmaWthc2kga2Vsb21wb2sgeWFuZyBtZW1pbGlraSByYXRhLXJhdGEgeWFuZyBiZXJiZWRhIHNlY2FyYSBzaWduaWZpa2FuIGRpIGFudGFyYSBiZWJlcmFwYSBrZWxvbXBvay4gDQoNClBlcmJlZGFhbiB1dGFtYSBhbnRhcmEgdWppLXQgZGFuIEFOT1ZBIHRlcmxldGFrIHBhZGEganVtbGFoIGtlbG9tcG9rIHlhbmcgZGlhbmFsaXNpcy4gVWppLXQgZGlndW5ha2FuIGtldGlrYSBoYW55YSBhZGEgZHVhIGtlbG9tcG9rIHlhbmcgZGliYW5kaW5na2FuLCBzZW1lbnRhcmEgQU5PVkEgZGlndW5ha2FuIGtldGlrYSBhZGEgdGlnYSBhdGF1IGxlYmloIGtlbG9tcG9rLiBBTk9WQSBkYXBhdCBtZW1pbmltYWxrYW4gcmlzaWtvIGtlc2FsYWhhbiB0aXBlIEkgeWFuZyBkYXBhdCB0ZXJqYWRpIGppa2EgQW5kYSBtZWxha3VrYW4gYmViZXJhcGEgdWppLXQgc2VjYXJhIGJlcnVsYW5nIGthbGkgcGFkYSBzZXQgZGF0YSB5YW5nIHNhbWEuIA0KDQpBTk9WQSB1bXVtbnlhIGRpZ3VuYWthbiBrZXRpa2EgQW5kYSBtZW1pbGlraSBsZWJpaCBkYXJpIGR1YSBrZWxvbXBvayBhdGF1IHZhcmlhYmVsIGJlYmFzIHlhbmcgaW5naW4gQW5kYSBiYW5kaW5na2FuLiBJbmkgYmlzYSBiZXJ1cGEgc2F0dSB2YXJpYWJlbCBkZXBlbmRlbiB5YW5nIGRpdWt1ciBkYWxhbSBiZXJiYWdhaSBrZWxvbXBvayBhdGF1IGR1YSBhdGF1IGxlYmloIHZhcmlhYmVsIGluZGVwZW5kZW4geWFuZyBiZXJwb3RlbnNpIG1lbXBlbmdhcnVoaSB2YXJpYWJlbCBkZXBlbmRlbi4gDQoNCkphZGkgQW5vdmEgZGkgZ3VuYWthbiBrZXRpa2EgZGF0YSB5YW5nIGFrYW4gZGkgYW5hbGlzYSBwZXJiZWRhYW55YSBiZXJqdW1sYWggMyBWYXJpYWJsZS4gDQoNCi0tLQ0KDQojIyBPbmUtV2F5IEFub3ZhIA0KT25lLVdheSBBTk9WQSBkaWd1bmFrYW4ga2V0aWthIGtpdGEgaW5naW4gbWVtYmFuZGluZ2thbiByYXRhLXJhdGEgZGFyaSB0aWdhIGF0YXUgbGViaWgga2Vsb21wb2sgeWFuZyBiZXJiZWRhLiBJbmkgbWVtZXJpa3NhIGFwYWthaCB0ZXJkYXBhdCBwZXJiZWRhYW4geWFuZyBzaWduaWZpa2FuIGFudGFyYSBrZWxvbXBvay1rZWxvbXBvayB0ZXJzZWJ1dC4gDQoNCkNvbnRvaCBLYXN1czogUGVuZ2FydWggRG9zaXMgT2JhdCBUZXJoYWRhcCBQZW51cnVuYW4gVGVrYW5hbiBEYXJhaCANCg0KTWlzYWxrYW4ga2l0YSBpbmdpbiBtZW5ndWppIHBlbmdhcnVoIGRvc2lzIG9iYXQgdGVyaGFkYXAgcGVudXJ1bmFuIHRla2FuYW4gZGFyYWggcGFkYSBwYXNpZW4uIEtpdGEgbWVtaWxpa2kgdGlnYSBrZWxvbXBvayBwYXNpZW4geWFuZyBtZW5lcmltYSBkb3NpcyBvYmF0IHlhbmcgYmVyYmVkYToga2Vsb21wb2sgQSAoZG9zaXMgcmVuZGFoKSwga2Vsb21wb2sgQiAoZG9zaXMgc2VkYW5nKSwgZGFuIGtlbG9tcG9rIEMgKGRvc2lzIHRpbmdnaSkuIFVudHVrIG1lbmdldGFodWkgamVuaXMgamVuaXMgQW5vdmEgbWFrYSBzZWJhaWtueWEgYmVsYWphciBkdWx1IGplbmlzIGRhdGEuIEtsaWsgW2RpIHNpbmldKGh0dHBzOi8vcnB1YnMuY29tL2FsYmFuaTg4L0RlcGVuZGVuLWRhbi1JbmRlcGVuZGVuKQ0KDQotLS0NCg0KIyMgVHdvLVdheSBBTk9WQQ0KVHdvLVdheSBBTk9WQSAoQW5hbGlzaXMgVmFyaWFucyBEdWEgQXJhaCkgZGlndW5ha2FuIGtldGlrYSBraXRhIGluZ2luIG1lbWVyaWtzYSBwZW5nYXJ1aCBkdWEgZmFrdG9yIHlhbmcgaW5kZXBlbmRlbiB0ZXJoYWRhcCB2YXJpYWJlbCBkZXBlbmRlbi4gRHVhIGZha3RvciBpbmkgZGFwYXQgYmVyaW50ZXJha3NpIHNhdHUgc2FtYSBsYWluLCBkYW4gVHdvLVdheSBBTk9WQSBtZW1iYW50dSB1bnR1ayBtZW1haGFtaSBhcGFrYWggYWRhIGVmZWsgdXRhbWEgZGFyaSBtYXNpbmctbWFzaW5nIGZha3RvciBhdGF1IGludGVyYWtzaSBhbnRhcmEga2VkdWFueWEuIA0KDQpDb250b2ggS2FzdXM6IFBlbmdhcnVoIERvc2lzIE9iYXQgZGFuIEplbmlzIEtlbGFtaW4gVGVyaGFkYXAgUGVudXJ1bmFuIFRla2FuYW4gRGFyYWggDQoNCk1pc2Fsa2FuIGtpdGEgaW5naW4gbWVtZXJpa3NhIHBlbmdhcnVoIGR1YSBmYWt0b3IsIHlhaXR1IGRvc2lzIG9iYXQgKEE6IHJlbmRhaCwgQjogc2VkYW5nLCBDOiB0aW5nZ2kpIGRhbiBqZW5pcyBrZWxhbWluIHBhc2llbiAoWDogcHJpYSwgWTogd2FuaXRhKSB0ZXJoYWRhcCBwZW51cnVuYW4gdGVrYW5hbiBkYXJhaC4gDQoNCi0tLQ0KDQojIyBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQSANCg0KUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEgKEFuYWx5c2lzIG9mIFZhcmlhbmNlKSBhZGFsYWggc3VhdHUgbWV0b2RlIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5nYW5hbGlzaXMgcGVyYmVkYWFuIHJhdGEtcmF0YSBhbnRhcmEgdGlnYSBhdGF1IGxlYmloIGtlbG9tcG9rIGRhbGFtIHNpdHVhc2kgZGkgbWFuYSBzdWJqZWsgZGl1a3VyIGxlYmloIGRhcmkgc2F0dSBrYWxpIChkaWtlbmFsIHNlYmFnYWkgInBlbmd1a3VyYW4gYmVydWxhbmciKS4gSW5pIHNhbmdhdCBiZXJndW5hIGtldGlrYSBBbmRhIGluZ2luIG1lbmd1amkgcGVydWJhaGFuIGRhcmkgd2FrdHUga2Ugd2FrdHUgYXRhdSBlZmVrIGRhcmkgc3VhdHUgaW50ZXJ2ZW5zaSB5YW5nIGRpdWt1ciBwYWRhIGJlcmJhZ2FpIHdha3R1LiANCg0KIA0KY29udG9oIHlhbmcgbGViaWggcmluY2kgZGFuIGtvbmtyZXQuIE1pc2Fsa2FuIGtpdGEgbWVtaWxpa2kgZGF0YSBoYXNpbCB0ZXMga29nbml0aWYgcGFkYSBzZWtlbG9tcG9rIHNpc3dhIHlhbmcgZGl1a3VyIHBhZGEgdGlnYSB3YWt0dSB5YW5nIGJlcmJlZGE6IHNlYmVsdW0gcGVtYmVsYWphcmFuIChwcmV0ZXN0KSwgc2V0ZWxhaCBzYXR1IG1pbmdndSBwZW1iZWxhamFyYW4gKHBvc3R0ZXN0MSksIGRhbiBzZXRlbGFoIGR1YSBtaW5nZ3UgcGVtYmVsYWphcmFuIChwb3N0dGVzdDIpLiBUdWp1YW4ga2l0YSBhZGFsYWggdW50dWsgbWVuZW50dWthbiBhcGFrYWggYWRhIHBlcmJlZGFhbiBzaWduaWZpa2FuIGRhbGFtIHJhdGEtcmF0YSBoYXNpbCB0ZXMga29nbml0aWYgcGFkYSBrZXRpZ2Egd2FrdHUgcGVuZ3VrdXJhbi4gDQoNCi0tLQ0KDQojIyBNdWx0aXZhcmlhdGUgQW5hbHlzaXMgb2YgVmFyaWFuY2UgKE1BTk9WQSkgDQoNCk1BTk9WQSBtZW5ndWppIHBlcmJlZGFhbiByYXRhLXJhdGEgYW50YXJhIGtlbG9tcG9rIHBhZGEgZHVhIGF0YXUgbGViaWggdmFyaWFiZWwgZGVwZW5kZW4geWFuZyBzYWxpbmcgdGVya2FpdC4gTmFoIGluaSBhZGEgRGVwZW5kZW4gbGFnaS4gTWFzaWggaW5nZXRrYW4gYXBhIHlhbmcgZGkgbWFrc3VkIGRlbmdhbiBEZXBlbmRlbi4gWWFoIGJlbmFyIHNla2FsaSBzYW1wbGUgeWFuZyBzYWxpbmcgYmVyaHVidW5nYW4uIEtsaWsgW2RpIHNpbmldKGh0dHBzOi8vcnB1YnMuY29tL2FsYmFuaTg4L0RlcGVuZGVuLWRhbi1JbmRlcGVuZGVuKSB1bnR1ayBwZW5qZWxhc2FueWEuIA0KDQpDb250b2hueWEgYWRhbGFoIDogTWVuZ2FuYWxpc2lzIGFwYWthaCBhZGEgcGVyYmVkYWFuIHlhbmcgc2lnbmlmaWthbiBkYWxhbSBoYXNpbCB0ZXMga29nbml0aWYsIGVtb3Npb25hbCwgZGFuIHNvc2lhbCBhbnRhcmEgdGlnYSBtZXRvZGUgcGVuZ2FqYXJhbiAoTWV0b2RlIFgsIFksIFopLiANCg0KLS0tDQoNCiMjIEFuYWx5c2lzIG9mIENvdmFyaWFuY2UgKEFOQ09WQSkgDQoNCkFuYWx5c2lzIG9mIENvdmFyaWFuY2UgKEFOQ09WQSkgYWRhbGFoIG1ldG9kZSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVtYmFuZGluZ2thbiByYXRhLXJhdGEgYW50YXJhIGR1YSBhdGF1IGxlYmloIGtlbG9tcG9rLCBzYW1iaWwgbWVuZ29udHJvbCBwZW5nYXJ1aCB2YXJpYWJlbCBsYWluIHlhbmcgdGlkYWsgZGlpbmdpbmthbiAoY292YXJpYXRlKS4gSW5pIG1lbmdnYWJ1bmdrYW4gZWxlbWVuIGFuYWxpc2lzIHZhcmlhbnMgKEFOT1ZBKSBkYW4gYW5hbGlzaXMgcmVncmVzaS4gDQoNCkNvbnRvaG55YSBwZW5nZ3VuYWFuIEFuY292YSBNZW5nYW5hbGlzaXMgYXBha2FoIGFkYSBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBoYXNpbCB0ZXMgYW50YXJhIGtlbG9tcG9rIGtvbnRyb2wgZGFuIGtlbG9tcG9rIHBlcmxha3VhbiBzZXRlbGFoIG1lbmdvbnRyb2wgdGluZ2thdCBrZWNlcmRhc2FuLiANCg0KQU5DT1ZBIG1lbWJhbnR1IGtpdGEgdW50dWsgbWVuZ2lzb2xhc2kgZWZlayB2YXJpYWJlbCBrYXRlZ29yaWthbCAoa2Vsb21wb2spIHBhZGEgdmFyaWFiZWwgZGVwZW5kZW4gKGhhc2lsIHRlcykgc2V0ZWxhaCBtZW5nb250cm9sIGF0YXUgbWVuZ2tvcmVrc2kgcGVuZ2FydWggdmFyaWFiZWwga292YXJpYXQgKHRpbmdrYXQga2VjZXJkYXNhbikuIA0KDQotLS0NCg0KIyMgTWl4ZWQtRGVzaWduIEFOT1ZBIA0KDQpNaXhlZC1EZXNpZ24gQU5PVkEsIGF0YXUgZGlzZWJ1dCBqdWdhIHJlcGVhdGVkLW1lYXN1cmVzIEFOT1ZBLCBhZGFsYWggbWV0b2RlIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiBkYWxhbSBhbmFsaXNpcyByaXNldCBwYXNhciB1bnR1ayBtZW1haGFtaSBlZmVrIHBlcnViYWhhbiBwYWRhIHZhcmlhYmVsIGRlcGVuZGVuIHNlcGFuamFuZyB3YWt0dSBhdGF1IGRhbGFtIGJlcmJhZ2FpIGtvbmRpc2ksIHNhbWJpbCBtZW1wZXJ0aW1iYW5na2FuIHBlbmdhcnVoIGZha3Rvci1mYWt0b3IgYW50YXIgc3ViamVrIChiZXR3ZWVuLXN1YmplY3RzKSBkYW4gZmFrdG9yLWZha3RvciBkYWxhbSBzdWJqZWsgKHdpdGhpbi1zdWJqZWN0cykuIERhbGFtIGtvbnRla3MgcmlzZXQgcGFzYXIsIG1peGVkLWRlc2lnbiBBTk9WQSBkYXBhdCBtZW1iYW50dSBtZW1haGFtaSBwZXJ1YmFoYW4gcGVyaWxha3Uga29uc3VtZW4gc2VpcmluZyB3YWt0dSBhdGF1IGRhbGFtIHNpdHVhc2kgeWFuZyBiZXJiZWRhLiANCg0KIA0KDQpOYWggbG9oLCwga2VuYXBhIGRpIHNlYnV0IHJlcGVhdGVkIG1lYXN1cmVzIEFub3ZhPyBCdWthbnlhIGRpIGF0YXMgc3VkYWggZGkgamVsYXNrYW4/IA0KDQogDQoNCk1peGVkLURlc2lnbiBBTk9WQSBkYW4gUmVwZWF0ZWQtTWVhc3VyZXMgQU5PVkEgc2ViZW5hcm55YSBtZW1pbGlraSBwZXJiZWRhYW4sIG1lc2tpcHVuIGtlZHVhbnlhIHNlcmluZ2thbGkgZGlndW5ha2FuIGRhbGFtIGtvbnRla3MgYW5hbGlzaXMgc3RhdGlzdGlrIHVudHVrIGRhdGEgYmVydWxhbmcgYXRhdSBkYWxhbS1zdWJqZWsuICANCg0KIA0KDQpBbmFsaXNpcyBBbnRhcmEgU3ViamVrOiANCg0KUmVwZWF0ZWQtTWVhc3VyZXMgQU5PVkE6IEZva3VzIHV0YW1hIHBhZGEgYW5hbGlzaXMgcGVydWJhaGFuIGRhbGFtIHN1Ymplay4gDQoNCk1peGVkLURlc2lnbiBBTk9WQTogTWVtaWxpa2kgZGltZW5zaSB0YW1iYWhhbiB1bnR1ayBtZW1wZXJ0aW1iYW5na2FuIGVmZWsgYW50YXIgc3ViamVrIGRhbiBpbnRlcmFrc2kgYW50YXJhIGZha3RvciBhbnRhciBkYW4gZGFsYW0gc3ViamVrLiANCg0KRGVuZ2FuIGthdGEgbGFpbiwgUmVwZWF0ZWQtTWVhc3VyZXMgQU5PVkEgYWRhbGFoIHN1YnNldCBkYXJpIE1peGVkLURlc2lnbiBBTk9WQSB5YW5nIHRlcmJhdGFzIHBhZGEgc2l0dWFzaSBkaSBtYW5hIGtpdGEgaGFueWEgbWVtaWxpa2kgZmFrdG9yIGRhbGFtIHN1Ymplay4gTWl4ZWQtRGVzaWduIEFOT1ZBIG1lbWJlcmlrYW4gZmxla3NpYmlsaXRhcyB0YW1iYWhhbiBkZW5nYW4gbWVtdW5na2lua2FuIGtpdGEgbWVtYXN1a2thbiBmYWt0b3IgYW50YXIgc3ViamVrIGRhbiBtZW5pbGFpIGludGVyYWtzaSBhbnRhcmEgZmFrdG9yLWZha3RvciB0ZXJzZWJ1dC4gDQoNCi0tLQ0KDQojIEFzdW1zaSB5YW5nIGhhcnVzIGRpIHBlbnVoaQ0KDQotLS0NCg0KU2VjYXJhIHVtdW0sIHNlbXVhIGplbmlzIEFOT1ZBIChBbmFseXNpcyBvZiBWYXJpYW5jZSkgbWVtaWxpa2kgYmViZXJhcGEgYXN1bXNpIHlhbmcgc2VydXBhLCB0ZXRhcGkgYWRhIGJlYmVyYXBhIHBlcmJlZGFhbiBiZXJkYXNhcmthbiBqZW5pcyBBTk9WQSB5YW5nIGRpZ3VuYWthbi4gQXN1bXNpIHV0YW1hIEFOT1ZBIHRlcm1hc3VrIG5vcm1hbGl0YXMsIGhvbW9nZW5pdGFzIHZhcmlhbnMsIGRhbiBpbmRlcGVuZGVuc2kuIE5hbXVuLCBiZWJlcmFwYSBqZW5pcyBBTk9WQSBtZW1pbGlraSBhc3Vtc2kgdGFtYmFoYW4gYXRhdSBiZXJiZWRhIGRhbGFtIHBlbmVrYW5hbiBwYWRhIGJlYmVyYXBhIGFzdW1zaSB0ZXJ0ZW50dS4gQmVyaWt1dCBhZGFsYWggZ2FtYmFyYW4gdW11bToNCg0KLSBOb3JtYWxpdGFzOg0KDQpVbXVtIHVudHVrIFNlbXVhIEFOT1ZBOiBEYXRhIGRpIHNldGlhcCBrZWxvbXBvayBhdGF1IGtvbmRpc2kgZGlhbmdnYXAgbWVuZ2lrdXRpIGRpc3RyaWJ1c2kgbm9ybWFsLiBBc3Vtc2kgaW5pIHBlbnRpbmcgdW50dWsgbWVtYXN0aWthbiBoYXNpbCBhbmFsaXNpcyB5YW5nIGRhcGF0IGRpYW5kYWxrYW4uIGluaSBzdWRhaCBwZXJuYWggc2F5YSBiYWhhcyBkaSBbZGkgc2luaV0oImh0dHBzOi8vcnB1YnMuY29tL2FsYmFuaTg4L05vcm1hbGl0eV9jaGVjayIpLg0KDQotIEhvbW9nZW5pdGFzIFZhcmlhbnM6DQoNClVtdW0gdW50dWsgU2VtdWEgQU5PVkE6IFZhcmlhbnMgZGFyaSBkYXRhIGRpIHNldGlhcCBrZWxvbXBvayBhdGF1IGtvbmRpc2kgZGlhbmdnYXAgc2VraXRhciBzYW1hLiBBc3Vtc2kgaW5pIHBlbnRpbmcgYWdhciBoYXNpbCBhbmFsaXNpcyBkYXBhdCBkaWludGVycHJldGFzaWthbiBkZW5nYW4gYmVuYXIuIA0KDQotIEluZGVwZW5kZW5zaToNCg0KVW11bSB1bnR1ayBTZW11YSBBTk9WQTogUGVuZ2FtYXRhbiBkaSBzZXRpYXAga2Vsb21wb2sgYXRhdSBrb25kaXNpIGhhcnVzIGluZGVwZW5kZW4gc2F0dSBzYW1hIGxhaW4uIEluaSBtZW5jYWt1cCBpbmRlcGVuZGVuc2kgYW50YXJhIHN1YmplayBhdGF1IHVuaXQgcGVuZ2FtYXRhbi4NCg0KLSBMaW5lYXJpdGFzIChwYWRhIEFOQ09WQSk6DQoNCktodXN1cyB1bnR1ayBBTkNPVkE6IEppa2EgY292YXJpYXRlIChmYWt0b3IgYW50YXIgc3ViamVrKSBkaWd1bmFrYW4sIGh1YnVuZ2FubnlhIGRlbmdhbiB2YXJpYWJlbCBkZXBlbmRlbiBoYXJ1cyBiZXJzaWZhdCBsaW5pZXIuDQoNCi0gU3BoZXJpY2l0eSAoS2h1c3VzIHVudHVrIFJlcGVhdGVkLU1lYXN1cmVzIEFOT1ZBKToNCg0KS2h1c3VzIHVudHVrIFJlcGVhdGVkLU1lYXN1cmVzIEFOT1ZBOiBTcGhlcmljaXR5IG1lbmdhY3UgcGFkYSBob21vZ2VuaXRhcyB2YXJpYW5zIGFudGFyIHNlbCBkaSBkYWxhbSBtYXRyaWtzIGtvdmFyaWFucyBwZW5ndWt1cmFuIGJlcnVsYW5nLiBEaXBlcmx1a2FuIGtldGlrYSBhZGEgcGVuZ3VrdXJhbiBiZXJ1bGFuZyBwYWRhIHN1YmplayB5YW5nIHNhbWEuDQoNCi0tLQ0KDQojIFBFUlNJQVBBQU4NCg0KDQotLS0NCg0KIyMgUGFja2FnZQ0KDQpwYWNrYWdlIHlhbmcgZGkgZ3VuYWthbiBhZGFsYWggOg0KYGBge3J9DQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeSh0aWR5c2VsZWN0KQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoc3RhdHMpDQpsaWJyYXJ5KGFncmljb2xhZSkgICMgVWppIHBvc3QtaG9jIHRlc3QgDQpsaWJyYXJ5KGh0dHIpDQpgYGANCg0KLS0tDQoNCiMjIERhdGEgc2V0DQoNCkRhdGEgc2V0IHlhbmcgZGkgZ3VuYWthbiBtZW5nYW1iaWwgZGFyaSBHaXRodWIgW2tsaWsgZGkgc2luaV0oaHR0cHM6Ly9naXRodWIuY29tL2I0bjg4L1BST0pFSy1TdGF0aXN0aWthZGFzYXIvYmxvYi9tYWluLzA2LiUyMEFub3ZhX0FuYWx5c2lzX0RhdGFfU2V0Lnhsc3gpDQoNCmBgYHtyfQ0KIyBEYXRhIHVudHVrIG9uZXdheSBhbm92YQ0Kb25ld2F5X2Fub3ZhX2RhdGEgPSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9BZG1pbmlzdHJhdG9yL0Rvd25sb2Fkcy8wNi4gQW5vdmFfQW5hbHlzaXNfRGF0YV9TZXQoMSkueGxzeCIsIHNoZWV0ID0gIk9ORSBXQVkiKQ0KDQojIERhdGEgdW50dWsgdHdvd2F5IGFub3ZhDQp0d293YXlfYW5vdmFfZGF0YSA9IHJlYWRfZXhjZWwoIkM6L1VzZXJzL0FkbWluaXN0cmF0b3IvRG93bmxvYWRzLzA2LiBBbm92YV9BbmFseXNpc19EYXRhX1NldCgxKS54bHN4Iiwgc2hlZXQgPSAiVFdPIFdBWSIpDQoNCiMgRGF0YSB1bnR1ayBSZXBsZWF0ZWQgbWVhc3VyZSBhbm92YQ0KUmVwbGVhdGVkX21lYXN1cmVfYW5vdmFfZGF0YSA9IHJlYWRfZXhjZWwoIkM6L1VzZXJzL0FkbWluaXN0cmF0b3IvRG93bmxvYWRzLzA2LiBBbm92YV9BbmFseXNpc19EYXRhX1NldCgxKS54bHN4Iiwgc2hlZXQgPSAiUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEgIikNCg0KIyBEYXRhIHVudHVrIE1hbm92YQ0KTWFub3ZhX2RhdGEgPSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9BZG1pbmlzdHJhdG9yL0Rvd25sb2Fkcy8wNi4gQW5vdmFfQW5hbHlzaXNfRGF0YV9TZXQoMSkueGxzeCIsIHNoZWV0ID0gIk1hbm92YSIpDQoNCiMgRGF0YSB1bnR1ayBBbmFseXNpcyBvZiBjb3ZhcmlhbmN5DQpBbmNvdmE9IHJlYWRfZXhjZWwoIkM6L1VzZXJzL0FkbWluaXN0cmF0b3IvRG93bmxvYWRzLzA2LiBBbm92YV9BbmFseXNpc19EYXRhX1NldCgxKS54bHN4Iiwgc2hlZXQgPSAiQU5DT1ZBIikNCg0KIyBEYXRhIHVudHVrIE1peGVkIGRlc2lnbiBBbm92YQ0KTWl4ZXNfYW5vdmUgPSByZWFkX2V4Y2VsKCJDOi9Vc2Vycy9BZG1pbmlzdHJhdG9yL0Rvd25sb2Fkcy8wNi4gQW5vdmFfQW5hbHlzaXNfRGF0YV9TZXQoMSkueGxzeCIsIHNoZWV0ID0gIk1peGVkLURlc2lnbiBBTk9WQSIpDQpgYGANCkRhdGEgZGkgYXRhcyBhZGFsYWggc2ViYWdhaSBiZXJpa3V0IDoNCg0KYGBge3J9DQpzdHIob25ld2F5X2Fub3ZhX2RhdGEpDQpgYGANCg0KYGBge3J9DQpzdHIodHdvd2F5X2Fub3ZhX2RhdGEpDQpgYGANCg0KYGBge3J9DQpzdHIoUmVwbGVhdGVkX21lYXN1cmVfYW5vdmFfZGF0YSkNCmBgYA0KDQpgYGB7cn0NCnN0cihNYW5vdmFfZGF0YSkNCmBgYA0KDQpgYGB7cn0NCnN0cihBbmNvdmEpDQpgYGANCg0KYGBge3J9DQpzdHIoTWl4ZXNfYW5vdmUpDQpgYGANCg0KLS0tDQoNCiMgQW5hbHlzaXMgY2FzZQ0KDQojIyBQZWRvbWFuIFBlbnRpbmcNCg0KUGVudGluZyB1bnR1ayBkaWluZ2F0IGJhaHdhIGhhc2lsIHlhbmcgc2lnbmlmaWthbiBkYWxhbSB1amkgQU5PVkEgaGFueWEgbWVtYmVyaSB0YWh1IEFuZGEgYmFod2EgYWRhIHBlcmJlZGFhbiBkaSBhbnRhcmEga2Vsb21wb2sta2Vsb21wb2sgdGVyc2VidXQsIG5hbXVuIHRpZGFrIG1lbWJlcmlrYW4gaW5mb3JtYXNpIHRlbnRhbmcga2Vsb21wb2sgbWFuYSB5YW5nIGJlcmJlZGEgc2VjYXJhIHNpZ25pZmlrYW4uIE9sZWgga2FyZW5hIGl0dSwgamlrYSBBbmRhIG1lbmRhcGF0a2FuIGhhc2lsIHlhbmcgc2lnbmlmaWthbiBkYWxhbSBBTk9WQSwgcGVybHUgZGlsYWt1a2FuIGFuYWxpc2lzIGxhbmp1dGFuLCBzZXBlcnRpIHVqaSBwZXJiYW5kaW5nYW4ga2Vsb21wb2sgKHBvc3QtaG9jIHRlc3QpLCB1bnR1ayBtZW5lbnR1a2FuIGtlbG9tcG9rIHlhbmcgbWVueWViYWJrYW4gcGVyYmVkYWFuIHRlcnNlYnV0Lg0KDQpCYWdhaW1hbmEgbWVuZW50dWthbiBhcGFrYWggbmlsYWkgRi1zdGF0aXN0aWMgYmVzYXIgYXRhdSBrZWNpbCBkYXBhdCByZWxhdGlmIGRhbiB0ZXJnYW50dW5nIHBhZGEga29udGVrc255YS4gQmViZXJhcGEgcGVkb21hbiB1bXVtIGFkYWxhaDoNCg0KICAgIEppa2EgbmlsYWkgRi1zdGF0aXN0aWMgbGViaWggYmVzYXIgZGFyaSBzYXR1LCBkYW4gcC12YWx1ZSBrZWNpbCAoPCAwLjA1KTogSW5pIGRhcGF0IGRpYW5nZ2FwIHNlYmFnYWkgaW5kaWthdG9yIGFkYW55YSBwZXJiZWRhYW4geWFuZyBzaWduaWZpa2FuIGFudGFyYSBrZWxvbXBvay4NCg0KICAgIEppa2EgbmlsYWkgRi1zdGF0aXN0aWMgbWVuZGVrYXRpIDEgYXRhdSBwLXZhbHVlIGJlc2FyICg+IDAuMDUpOiBJbmkgZGFwYXQgbWVudW5qdWtrYW4gYmFod2EgcGVyYmVkYWFuIGFudGFyYSBrZWxvbXBvayB0aWRhayBzaWduaWZpa2FuLg0KDQpOYW11biwgcGVudGluZyB1bnR1ayBzZWxhbHUgbWVtcGVyaGl0dW5na2FuIGtvbnRla3Mgc3Blc2lmaWsgZWtzcGVyaW1lbiBhdGF1IGFuYWxpc2lzIEFuZGEuIFRlcmthZGFuZywgcGVuaWxhaWFuIGxlYmloIGxhbmp1dCBzZXBlcnRpIG1lbGloYXQgZGlzdHJpYnVzaSBkYXRhLCB1a3VyYW4gc2FtcGVsLCBkYW4gcGVydGltYmFuZ2FuIHByYWt0aXMgbGFpbm55YSBqdWdhIGRpcGVybHVrYW4gdW50dWsgaW50ZXJwcmV0YXNpIHlhbmcgYWt1cmF0Lg0KDQpMZXQncyBHb29vb29vb29vbyANCg0KLS0tDQoNCiMjIE9uZS1XYXkgQU5PVkENCg0KKipQZW5nYXJ1aCBEb3NpcyBPYmF0IFBlbnVydW4gVGVrYW5hbiBEYXJhaCBUZXJoYWRhcCBQZW51cnVuYW4gVGVrYW5hbiBEYXJhaCBQYXNpZW4qKg0KDQojIyMgUGVuZGFodWx1YW4NCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbmdldmFsdWFzaSBwZW5nYXJ1aCBkb3NpcyBvYmF0IHBlbnVydW4gdGVrYW5hbiBkYXJhaCB0ZXJoYWRhcCBwZW51cnVuYW4gdGVrYW5hbiBkYXJhaCBwYWRhIHBhc2llbi4gUGVuZWxpdGlhbiBpbmkgbWVuZ2d1bmFrYW4gbWV0b2RlIHN0YXRpc3RpayBPbmUtV2F5IEFOT1ZBIHVudHVrIG1lbWJhbmRpbmdrYW4gcmF0YS1yYXRhIHBlbnVydW5hbiB0ZWthbmFuIGRhcmFoIGFudGFyYSB0aWdhIGtlbG9tcG9rIGRvc2lzIG9iYXQgeWFuZyBiZXJiZWRhLg0KDQojIyMgRGVzYWluIHBlbmVsaXRpYW4NCg0KSU5HQVQgQU5PVkEgREkgR1VOQUtBTiBVTlRVSyBNRU1CQU5ESU5HS0FOIERBVEEgQkVSQkVEQSAoSW5kZXBlbmRlbikNCg0KVmFyaWFiZWwgSW5kZXBlbmRlbjoNCg0KRG9zaXMgT2JhdCAoRmFrdG9yIFR1bmdnYWwpDQoNCi0gS2Vsb21wb2sgMSAoRG9zaXMgUmVuZGFoKQ0KLSBLZWxvbXBvayAyIChEb3NpcyBTZWRhbmcpDQotIEtlbG9tcG9rIDMgKERvc2lzIFRpbmdnaSkNCg0KIyMjIE1ldG9kZQ0KDQotIFBlbmd1bXB1bGFuIERhdGE6DQoNCkRhdGEgcGVudXJ1bmFuIHRla2FuYW4gZGFyYWggZGlrdW1wdWxrYW4gZGFyaSBwYXNpZW4geWFuZyBtZW5lcmltYSBkb3NpcyBvYmF0IGJlcmJlZGEuDQoNCi0gQW5hbGlzaXMgU3RhdGlzdGlrOg0KICANCk1lbGFrdWthbiBPbmUtV2F5IEFOT1ZBIHVudHVrIG1lbmdldmFsdWFzaSBhcGFrYWggdGVyZGFwYXQgcGVyYmVkYWFuIHNpZ25pZmlrYW4gYW50YXJhIHJhdGEtcmF0YSBwZW51cnVuYW4gdGVrYW5hbiBkYXJhaCBkaSB0aWdhIGtlbG9tcG9rIGRvc2lzIG9iYXQuDQoNCiMjIyBIYXNpbA0KDQpgYGB7cn0NCmhlYWQob25ld2F5X2Fub3ZhX2RhdGEsNSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmVzdWx0X29uZXdheWFub3ZhID0gYW92KFBlbnVydW5hbl9UZWthbmFuX0RhcmFoIH4gRG9zaXMsIGRhdGEgPSBvbmV3YXlfYW5vdmFfZGF0YSkNCnN1bW1hcnkocmVzdWx0X29uZXdheWFub3ZhKQ0KYGBgDQoNClNpbGFoa2FuIGJhY2EgcGVkb21hbiBkaSBzdWJhYiBkaSBhdGFzLCBrYXJlbmEgRiBzdGF0c2l0aWMgbGViaWggYmVzYXIgZGFyaSAxIG1ha2EgZGFwYXQgZGlhbmdnYXAgc2ViYWdhaSBpbmRpa2F0b3IgYWRhbnlhIHBlcmJlZGFhbiB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIGtlbG9tcG9rLg0KDQojIyMgVWppIFBvc3QgSG9zdCB0ZXN0DQoNClBvc3QtaG9jIHRlc3QgZGlndW5ha2FuIHNldGVsYWggQW5kYSBtZW5kYXBhdGthbiBoYXNpbCB5YW5nIHNpZ25pZmlrYW4gZGFsYW0gYW5hbGlzaXMgQU5PVkEgZGFuIGluZ2luIG1lbmVudHVrYW4gcGVyYmVkYWFuIGtodXN1cyBhbnRhcmEga2Vsb21wb2sta2Vsb21wb2sgdGVydGVudHUuIEJlYmVyYXBhIHBvc3QtaG9jIHRlc3QgeWFuZyB1bXVtIGRpZ3VuYWthbiB0ZXJtYXN1ayBUdWtleSdzIEhvbmVzdCBTaWduaWZpY2FudCBEaWZmZXJlbmNlIChIU0QpLCBCb25mZXJyb25pLCBkYW4gbGFpbm55YS4NCg0KYGBge3J9DQpvbmV3YXlfcG9zdGdpY190dWtleSA9IFR1a2V5SFNEKHJlc3VsdF9vbmV3YXlhbm92YSwgIkRvc2lzIiwgY29uZi5sZXZlbCA9IDAuMDUpDQpwcmludChvbmV3YXlfcG9zdGdpY190dWtleSkNCmBgYA0KICAgIGRpZmYgKERpZmZlcmVuY2UpOiBOaWxhaSBpbmkgbWVudW5qdWtrYW4gcGVyYmVkYWFuIHJhdGEtcmF0YSBhbnRhcmEgZHVhIGtlbG9tcG9rIGRvc2lzIHlhbmcgZGliYW5kaW5na2FuLg0KDQogICAgbHdyIChMb3dlciBDb25maWRlbmNlIEludGVydmFsKTogQmF0YXMgYmF3YWggZGFyaSBpbnRlcnZhbCBrZXBlcmNheWFhbiA5NSUgdW50dWsgcGVyYmVkYWFuIHJhdGEtcmF0YS4NCg0KICAgIHVwciAoVXBwZXIgQ29uZmlkZW5jZSBJbnRlcnZhbCk6IEJhdGFzIGF0YXMgZGFyaSBpbnRlcnZhbCBrZXBlcmNheWFhbiA5NSUgdW50dWsgcGVyYmVkYWFuIHJhdGEtcmF0YS4NCg0KICAgIHAgYWRqIChBZGp1c3RlZCBwLXZhbHVlKTogTmlsYWkgcCB5YW5nIHRlbGFoIGRpc2VzdWFpa2FuIHVudHVrIG1lbmdlbmRhbGlrYW4gdGluZ2thdCBrZXNhbGFoYW4gdGlwZSBJIChmYW1pbHktd2lzZSBlcnJvciByYXRlKSBkYWxhbSBwZXJiYW5kaW5nYW4gbXVsdGlwZWwuIE5pbGFpIGluaSBtZW51bmp1a2thbiBzZWJlcmFwYSBzaWduaWZpa2FuIHBlcmJlZGFhbiByYXRhLXJhdGEgYW50YXJhIGR1YSBrZWxvbXBvayBkb3Npcy4NCg0KRGFsYW0ga2VzaW1wdWxhbiB1bXVtOg0KDQogICAgSmlrYSBuaWxhaSAicCBhZGoiIGt1cmFuZyBkYXJpIHRpbmdrYXQgc2lnbmlmaWthbnNpIHlhbmcgZGlwaWxpaCAoYmlhc2FueWEgMC4wNSksIGtpdGEgZGFwYXQgbWVueWltcHVsa2FuIGJhaHdhIHBlcmJlZGFhbiByYXRhLXJhdGEgYW50YXJhIGR1YSBrZWxvbXBvayBkb3NpcyB0ZXJzZWJ1dCBhZGFsYWggc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrLg0KICAgIA0KICAgIFBlcmhhdGlrYW4gYmFod2EgZGFsYW0ga2FzdXMgQW5kYSwgc2VtdWEgbmlsYWkgInAgYWRqIiBzYW5nYXQga2VjaWwgKDApLCBtZW51bmp1a2thbiBiYWh3YSBwZXJiZWRhYW4gcmF0YS1yYXRhIGFudGFyYSBzZXRpYXAgcGFzYW5nYW4ga2Vsb21wb2sgZG9zaXMgYWRhbGFoIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCg0KKkNhdGF0YW46IERhdGEgc2V0IGRpIGF0YXMgaGFueWEgYmVyc2lmYXQgZmlrdGlmIGRhbiBkaWJ1YXQgdW50dWsgdHVqdWFuIGRlbW9uc3RyYXNpLiBBbmRhIGRhcGF0IG1lbmdndW5ha2FuIGRhdGEgc2ViZW5hcm55YSBkYXJpIHBlbmVsaXRpYW4gQW5kYSB1bnR1ayBtZWxha3VrYW4gYW5hbGlzaXMgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEuKg0KDQotLS0NCg0KIyMgVHdvLVdheSBBTk9WQQ0KKipQZW5nYXJ1aCBEb3NpcyBPYmF0IGRhbiBKZW5pcyBLZWxhbWluIHRlcmhhZGFwIFBlbnVydW5hbiBUZWthbmFuIERhcmFoKioNCg0KIyMjIFBlbmRhaHVsdWFuDQoNClBlbmVsaXRpYW4gaW5pIGJlcnR1anVhbiB1bnR1ayBtZW5nZXZhbHVhc2kgcGVuZ2FydWggZHVhIGZha3RvciwgeWFpdHUgZG9zaXMgb2JhdCAoRG9zaXMpIGRhbiBqZW5pcyBrZWxhbWluIHBhc2llbiAoSmVuaXMgS2VsYW1pbiksIHRlcmhhZGFwIHBlbnVydW5hbiB0ZWthbmFuIGRhcmFoLiBBbmFsaXNpcyBpbmkgbWVuZ2d1bmFrYW4gbWV0b2RlIHN0YXRpc3RpayBUd28tV2F5IEFOT1ZBIHVudHVrIG1lbWFoYW1pIGFwYWthaCB0ZXJkYXBhdCBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYW4gaW50ZXJha3NpIGFudGFyYSBrZWR1YSBmYWt0b3IgdGVyc2VidXQuDQoNCiMjIyBEZXNhaW4NCg0KKipWYXJpYWJlbCBJbmRlcGVuZGVuOioqDQoNCi0gRG9zaXMgT2JhdCAoRG9zaXMpDQogICAgICAgIA0KICAgIERvc2lzIFJlbmRhaA0KICAgIERvc2lzIFNlZGFuZw0KICAgIERvc2lzIFRpbmdnaQ0KDQotIEplbmlzIEtlbGFtaW4gKEplbmlzIEtlbGFtaW4pDQogICAgICAgICAgICANCiAgICBQcmlhDQogICAgV2FuaXRhDQoNCioqVmFyaWFiZWwgRGVwZW5kZW46KioNCg0KLSBQZW51cnVuYW4gVGVrYW5hbiBEYXJhaA0KDQoNCiMjIyBNZXRvZGUNCg0KTWVsYWt1a2FuIFR3by1XYXkgQU5PVkEgdW50dWsgbWVuaWxhaSBlZmVrIGRvc2lzIG9iYXQsIGVmZWsgamVuaXMga2VsYW1pbiwgZGFuIGludGVyYWtzaSBkaSBhbnRhcmEga2VkdWFueWEgdGVyaGFkYXAgcGVudXJ1bmFuIHRla2FuYW4gZGFyYWguIERhdGEgcGVudXJ1bmFuIHRla2FuYW4gZGFyYWggZGlrdW1wdWxrYW4gZGFyaSBwYXNpZW4geWFuZyBkaWJhZ2kgYmVyZGFzYXJrYW4gZG9zaXMgb2JhdCB5YW5nIGRpdGVyaW1hIGRhbiBqZW5pcyBrZWxhbWluLiANCg0KIyMjIEhhc2lsDQoNCmBgYHtyfQ0KaGVhZCh0d293YXlfYW5vdmFfZGF0YSwgNSkNCmBgYA0KDQpgYGB7cn0NCnJlc3VsdF90d293YXlhbm92YSA9IGFvdihQZW51cnVuYW5fVGVrYW5hbl9EYXJhaCB+IERvc2lzICogSmVuaXNfS2VsYW1pbiwgZGF0YSA9IHR3b3dheV9hbm92YV9kYXRhKQ0Kc3VtbWFyeShyZXN1bHRfdHdvd2F5YW5vdmEpDQpgYGANCktlc2ltcHVsYW46DQoNCiAgICBFZmVrIGRvc2lzLCBqZW5pcyBrZWxhbWluLCBkYW4gaW50ZXJha3NpIGFudGFyYSBrZWR1YW55YSBtZW1pbGlraSBuaWxhaSBwIHlhbmcgc2FuZ2F0IGtlY2lsLCBtZW51bmp1a2thbiBiYWh3YSBtZXJla2Egc2VtdWEgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrLg0KICAgIEVmZWsgZG9zaXMgbWVtaWxpa2kgRi1zdGF0aXN0aWMgeWFuZyB0aW5nZ2ksIG1lbnVuanVra2FuIGFkYW55YSBwZXJiZWRhYW4geWFuZyBzaWduaWZpa2FuIGFudGFyYSBkb3Npcy4NCiAgICBFZmVrIGplbmlzIGtlbGFtaW4ganVnYSBzaWduaWZpa2FuLCBtZXNraXB1biBkZW5nYW4gRi1zdGF0aXN0aWMgeWFuZyBsZWJpaCByZW5kYWguDQogICAgSW50ZXJha3NpIGFudGFyYSBkb3NpcyBkYW4gamVuaXMga2VsYW1pbiBqdWdhIHNpZ25pZmlrYW4sIG1lbnVuanVra2FuIGJhaHdhIGVmZWsgZG9zaXMgZGFwYXQgYmVydmFyaWFzaSB0ZXJnYW50dW5nIHBhZGEgamVuaXMga2VsYW1pbi4NCg0KTmFtdW4sIHVudHVrIG1lbmVudHVrYW4gcGVyYmVkYWFuIHNwZXNpZmlrIGFudGFyIGtlbG9tcG9rLCBBbmRhIG11bmdraW4gaW5naW4gbWVsaWhhdCBoYXNpbCBwb3N0LWhvYyB0ZXN0IHNlcGVydGkgVHVrZXkncyBIU0QuDQoNCiMjIyBwb3N0LWhvYyB0ZXN0IA0KDQpgYGB7cn0NCnByaW50KHJlc3VsdF90d293YXlhbm92YSkNCmBgYA0KDQpgYGB7cn0NCnBvc3RfaG9jX3R3b3dheWFub3ZhID0gVHVrZXlIU0QocmVzdWx0X3R3b3dheWFub3ZhLCBjKCJEb3NpcyIsICJKZW5pc19LZWxhbWluIiwgIkRvc2lzOkplbmlzX0tlbGFtaW4iKSkNCnByaW50KHBvc3RfaG9jX3R3b3dheWFub3ZhKQ0KYGBgDQpEb3NpczoNCg0KICAgIFBlcmJlZGFhbiBhbnRhcmEgRG9zaXMgU2VkYW5nIGRhbiBEb3NpcyBSZW5kYWggc2lnbmlmaWthbiAocCA9IDMuOGUtMDYpLCBkZW5nYW4gcGVyYmVkYWFuIHNla2l0YXIgMS45MS4NCiAgIA0KICAgIFBlcmJlZGFhbiBhbnRhcmEgRG9zaXMgVGluZ2dpIGRhbiBEb3NpcyBSZW5kYWgganVnYSBzaWduaWZpa2FuIChwID0gMC4wKSwgZGVuZ2FuIHBlcmJlZGFhbiBzZWtpdGFyIDQuNDIuDQogICAgDQogICAgUGVyYmVkYWFuIGFudGFyYSBEb3NpcyBUaW5nZ2kgZGFuIERvc2lzIFNlZGFuZyBzaWduaWZpa2FuIChwID0gMC4wKSwgZGVuZ2FuIHBlcmJlZGFhbiBzZWtpdGFyIDIuNTIuDQoNCkplbmlzIEtlbGFtaW46DQoNCiAgICBUZXJkYXBhdCBwZXJiZWRhYW4gc2lnbmlmaWthbiBhbnRhcmEgd2FuaXRhIGRhbiBwcmlhIChwID0gMC4wMjE5KSwgZGVuZ2FuIHBlcmJlZGFhbiBzZWtpdGFyIDAuNzEuDQogICAgDQpLZXNpbXB1bGFuOg0KDQotIFRlcmRhcGF0IHBlcmJlZGFhbiBzaWduaWZpa2FuIGRhbGFtIHBlbnVydW5hbiB0ZWthbmFuIGRhcmFoIGFudGFyYSBzZXRpYXAgdGluZ2thdCBkb3Npcy4NCg0KLSBKZW5pcyBrZWxhbWluIGp1Z2EgbWVtYmVyaWthbiBkYW1wYWsgeWFuZyBzaWduaWZpa2FuIHRlcmhhZGFwIHBlbnVydW5hbiB0ZWthbmFuIGRhcmFoLg0KDQotIFRlcmRhcGF0IGludGVyYWtzaSB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIGRvc2lzIGRhbiBqZW5pcyBrZWxhbWluLCBtZW51bmp1a2thbiBiYWh3YSBlZmVrIGRvc2lzIGRhcGF0IGJlcnZhcmlhc2kgdGVyZ2FudHVuZyBwYWRhIGplbmlzIGtlbGFtaW4uDQoNCi0gRGFsYW0gYmViZXJhcGEga2FzdXMsIHBlcmJlZGFhbiBzaWduaWZpa2FuIGp1Z2EgdGVyamFkaSBhbnRhcmEgZG9zaXMgZGFuIGplbmlzIGtlbGFtaW4gc3Blc2lmaWsuIE1pc2FsbnlhLCBkb3NpcyB0aW5nZ2kgcGFkYSB3YW5pdGEgbWVtaWxpa2kgcGVyYmVkYWFuIHlhbmcgc2lnbmlmaWthbiBkZW5nYW4gZG9zaXMgdGluZ2dpIHBhZGEgcHJpYSwgZG9zaXMgcmVuZGFoIHBhZGEgcHJpYSwgZGFuIGRvc2lzIHNlZGFuZyBwYWRhIHByaWEuDQoNCipDYXRhdGFuOiBEYXRhIHNldCBkaSBhdGFzIGhhbnlhIGJlcnNpZmF0IGZpa3RpZiBkYW4gZGlidWF0IHVudHVrIHR1anVhbiBkZW1vbnN0cmFzaS4gQW5kYSBkYXBhdCBtZW5nZ3VuYWthbiBkYXRhIHNlYmVuYXJueWEgZGFyaSBwZW5lbGl0aWFuIEFuZGEgdW50dWsgbWVsYWt1a2FuIGFuYWxpc2lzIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBLioNCg0KLS0tDQoNCiMjIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBIA0KDQoqKm1lbmdldmFsdWFzaSBwZXJ1YmFoYW4gZGFsYW0gaGFzaWwgdGVzIGtvZ25pdGlmIHBhZGEgc2VrZWxvbXBvayBzaXN3YSBzZWJlbHVtLCBzZWxhbWEsIGRhbiBzZXRlbGFoIHBlcmlvZGUgcGVtYmVsYWphcmFuLioqIA0KDQojIyMgUGVuZGFodWx1YW4NCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbmdldmFsdWFzaSBwZXJ1YmFoYW4gZGFsYW0gaGFzaWwgdGVzIGtvZ25pdGlmIHBhZGEgc2VrZWxvbXBvayBzaXN3YSBzZWJlbHVtLCBzZWxhbWEsIGRhbiBzZXRlbGFoIHBlcmlvZGUgcGVtYmVsYWphcmFuLiBNZXRvZGUgYW5hbGlzaXMgeWFuZyBkaWd1bmFrYW4gYWRhbGFoIFJlcGVhdGVkIE1lYXN1cmVzIEFuYWx5c2lzIG9mIFZhcmlhbmNlIChBTk9WQSkgdW50dWsgbWVuaWxhaSBhcGFrYWggdGVyZGFwYXQgcGVyYmVkYWFuIHNpZ25pZmlrYW4gZGFsYW0gcmF0YS1yYXRhIGhhc2lsIHRlcyBrb2duaXRpZiBwYWRhIGtldGlnYSB3YWt0dSBwZW5ndWt1cmFuDQoNCiMjIyBEZXNhaW4NCg0KUGVuZWxpdGlhbiBpbmkgbWVuZ2d1bmFrYW4gZGVzYWluIFJlcGVhdGVkIE1lYXN1cmVzLCBkaSBtYW5hIHNldGlhcCBwYXJ0aXNpcGFuIGRpdWt1ciBwYWRhIGtldGlnYSB3YWt0dSB5YW5nIGJlcmJlZGEuDQoNCiMjIyBNb2RlbA0KDQpBbmFsaXNpcyBzdGF0aXN0aWsgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEgZGlsYWt1a2FuIHVudHVrIG1lbmlsYWkgYXBha2FoIHRlcmRhcGF0IHBlcmJlZGFhbiBzaWduaWZpa2FuIGRhbGFtIGhhc2lsIHRlcyBrb2duaXRpZiBwYWRhIGtldGlnYSB3YWt0dSBwZW5ndWt1cmFuLiANCg0KIyMjIEhhc2lsDQoNCmBgYHtyfQ0KaGVhZChSZXBsZWF0ZWRfbWVhc3VyZV9hbm92YV9kYXRhLCA1KQ0KYGBgDQpgYGB7cn0NCnJlc3VsdF9NZWFzdXJlX2Fub3ZhID0gYW92KGNiaW5kKFByZXRlc3QsIHBvc3R0ZXN0MSwgcG9zdHRlc3QyKSB+IDEgKyBFcnJvcihObyksIGRhdGEgPSBSZXBsZWF0ZWRfbWVhc3VyZV9hbm92YV9kYXRhKQ0KDQpzdW1tYXJ5KHJlc3VsdF9NZWFzdXJlX2Fub3ZhKQ0KYGBgDQoNCkVycm9yOiBXaXRoaW4iLCB5YW5nIG1lbnVuanVra2FuIGFuYWxpc2lzIGVmZWsgZGFsYW0gKHdpdGhpbi1zdWJqZWN0IGVmZmVjdHMpLiBBbmFsaXNpcyBpbmkgbWVtYmVyaWthbiBpbmZvcm1hc2kgdGVudGFuZyB2YXJpYWJpbGl0YXMgcmVzaWR1IHNldGVsYWggcGVuZ2FydWggZmFrdG9yLWZha3RvciB5YW5nIGRpdWt1ciBkYWxhbSBhbmFsaXNpcyBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQS4NCg0KUmVzaWR1YWxzOiBEZiA9IDEwIChqdW1sYWggc3ViamVrIC0gMSksIFN1bSBTcSA9IDM4NTcuOSAodG90YWwgc3VtIG9mIHNxdWFyZXMgcmVzaWR1KSwgTWVhbiBTcSA9IDM4NS43OSAocmF0YS1yYXRhIGt1YWRyYXQgcmVzaWR1KSwgRiB2YWx1ZSA9IFRpZGFrIGRpYmVyaWthbiwgZGFuIFByKD5GKSA9IFRpZGFrIGRpYmVyaWthbi4gSW5pIG1lbWJlcmlrYW4gaW5mb3JtYXNpIHRlbnRhbmcgdmFyaWFiaWxpdGFzIHJlc2lkdSB1bnR1ayB2YXJpYWJlbCBQcmV0ZXN0IHNldGVsYWggcGVuZ2FydWggc2VtdWEgZmFrdG9yIHlhbmcgZGl1a3VyIGRhbGFtIGFuYWxpc2lzLg0KDQpQcm9zZXMgaW5pIGRpdWxhbmdpIHVudHVrIHZhcmlhYmVsIFJlc3BvbnNlIHBvc3R0ZXN0MSBkYW4gcG9zdHRlc3QyLCBtZW1iZXJpa2FuIGluZm9ybWFzaSB5YW5nIHNlcnVwYSB0ZXRhcGkgdGVya2FpdCBkZW5nYW4gdmFyaWFiZWwgcmVzcG9ucyB0ZXJzZWJ1dC4NCg0KUmluZ2thc2FuIGluaSBtZW1iZXJpa2FuIHBhbmRhbmdhbiBhd2FsIHRlbnRhbmcgc2lnbmlmaWthbnNpIHN0YXRpc3RpayBkYXJpIGVmZWsgZGFsYW0gZGFuIGVmZWsgYW50YXJhIChhbnRhcmEgc3ViamVrKSBkYWxhbSBhbmFsaXNpcyBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQSB1bnR1ayBzZXRpYXAgdmFyaWFiZWwgcmVzcG9ucyB5YW5nIGRpdWt1ci4gTmlsYWktbmlsYWkgRiBkYW4gbmlsYWkgcCAoUHIoPkYpKSBkaWd1bmFrYW4gdW50dWsgbWVuaWxhaSBzaWduaWZpa2Fuc2kgc3RhdGlzdGlrIGRhcmkgZWZlay1lZmVrIGluaS4NCg0KKkNhdGF0YW46IERhdGEgc2V0IGRpIGF0YXMgaGFueWEgYmVyc2lmYXQgZmlrdGlmIGRhbiBkaWJ1YXQgdW50dWsgdHVqdWFuIGRlbW9uc3RyYXNpLiBBbmRhIGRhcGF0IG1lbmdndW5ha2FuIGRhdGEgc2ViZW5hcm55YSBkYXJpIHBlbmVsaXRpYW4gQW5kYSB1bnR1ayBtZWxha3VrYW4gYW5hbGlzaXMgUmVwZWF0ZWQgTWVhc3VyZXMgQU5PVkEuKg0KDQotLS0NCg0KIyMgTXVsdGl2YXJpYXRlIEFuYWx5c2lzIG9mIFZhcmlhbmNlIChNQU5PVkEpIA0KDQojIyMgUGVuZGFodWx1YW4NCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbmdldmFsdWFzaSBwZXJiZWRhYW4gcmF0YS1yYXRhIGhhc2lsIHRlcyBrb2duaXRpZiBkYW4gaGFzaWwgdGVzIGtyZWF0aXZpdGFzIHBhZGEgc2VrZWxvbXBvayBzaXN3YSBwYWRhIGR1YSBrZWxvbXBvayBrb25kaXNpIHBlbWJlbGFqYXJhbiB5YW5nIGJlcmJlZGEuIEFuYWxpc2lzIHlhbmcgZGlndW5ha2FuIGFkYWxhaCBNdWx0aXZhcmlhdGUgQW5hbHlzaXMgb2YgVmFyaWFuY2UgKE1BTk9WQSkgdW50dWsgbWVuaWxhaSBhcGFrYWggdGVyZGFwYXQgcGVyYmVkYWFuIHNpZ25pZmlrYW4gZGFsYW0ga29tYmluYXNpIHZhcmlhYmVsIGRlcGVuZGVuLg0KDQojIyMgRGVzYWluDQoNClBlbmVsaXRpYW4gaW5pIG1lbmdndW5ha2FuIGRlc2FpbiBmYWt0b3JpYWwgZGVuZ2FuIGR1YSBmYWt0b3I6IGtvbmRpc2kgcGVtYmVsYWphcmFuIGRhbiB3YWt0dSBwZW5ndWt1cmFuLiANCg0KU2V0aWFwIHBhcnRpc2lwYW4gZGl1a3VyIHBhZGEgZHVhIHZhcmlhYmVsIGRlcGVuZGVuOiBoYXNpbCB0ZXMga29nbml0aWYgZGFuIGhhc2lsIHRlcyBrcmVhdGl2aXRhcy4NCg0KIyMjIE1vZGVsDQoNCkFuYWxpc2lzIHN0YXRpc3RpayBNQU5PVkEgZGlsYWt1a2FuIHVudHVrIG1lbmlsYWkgYXBha2FoIGFkYSBwZXJiZWRhYW4gc2lnbmlmaWthbiBhbnRhcmEga2Vsb21wb2sga29uZGlzaSBwZW1iZWxhamFyYW4sIHdha3R1IHBlbmd1a3VyYW4sIGRhbiBpbnRlcmFrc2kgYW50YXJhIGtlZHVhbnlhLiANCg0KIyMjIEhhc2lsDQoNCmBgYHtyfQ0KaGVhZChNYW5vdmFfZGF0YSwgNSkNCmBgYA0KDQpgYGB7cn0NCnJlc3VsdF9tYW5vdmEgPSBtYW5vdmEoY2JpbmQoVGVzS29nbml0aWYsIFRlc0tyZWF0aXZpdGFzKSB+IEtlbG9tcG9rICogV2FrdHUsIGRhdGEgPSBNYW5vdmFfZGF0YSkNCnN1bW1hcnkocmVzdWx0X21hbm92YSkNCmBgYA0KDQpgUGlsbGFpYCBJbmkgYWRhbGFoIG5pbGFpIHN0YXRpc3RpayBQaWxsYWkncyBUcmFjZSwgeWFuZyBtZW51bmp1a2thbiBzZWJlcmFwYSBiZXNhciBlZmVrIGZha3RvciAiS2Vsb21wb2siIGRhbGFtIG1lbmplbGFza2FuIHZhcmlhc2kgZGFsYW0gdmFyaWFiZWwgcmVzcG9ucyAoVGVzS29nbml0aWYgZGFuIFRlc0tyZWF0aXZpdGFzKS4gTmlsYWkgaW5pIGJlcmtpc2FyIGFudGFyYSAwIGRhbiAxLCBkYW4gc2VtYWtpbiBtZW5kZWthdGkgMSwgc2VtYWtpbiBiZXNhciBlZmVrbnlhLg0KDQpoYXNpbCBtZW51bmp1a2thbiBiYWh3YSBmYWt0b3IgIktlbG9tcG9rIiB0aWRhayBtZW1pbGlraSBlZmVrIHNpZ25pZmlrYW4gdGVyaGFkYXAgVGVzS29nbml0aWYgZGFuIFRlc0tyZWF0aXZpdGFzLCBiZXJkYXNhcmthbiBuaWxhaSBwIHlhbmcgdGluZ2dpLiBQZXJsdSBkaWluZ2F0IGJhaHdhIGludGVycHJldGFzaSBsZWJpaCBsYW5qdXQgZGFwYXQgYmVyZ2FudHVuZyBwYWRhIGtvbnRla3MgZWtzcGVyaW1lbiBkYW4gcGVuZ2V0YWh1YW4gZG9tYWluIHNwZXNpZmlrLg0KDQoqQ2F0YXRhbjogRGF0YSBzZXQgZGkgYXRhcyBoYW55YSBiZXJzaWZhdCBmaWt0aWYgZGFuIGRpYnVhdCB1bnR1ayB0dWp1YW4gZGVtb25zdHJhc2kuIEFuZGEgZGFwYXQgbWVuZ2d1bmFrYW4gZGF0YSBzZWJlbmFybnlhIGRhcmkgcGVuZWxpdGlhbiBBbmRhIHVudHVrIG1lbGFrdWthbiBhbmFsaXNpcyBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQS4qDQoNCi0tLQ0KDQojIyBBbmFseXNpcyBvZiBDb3ZhcmlhbmNlIChBTkNPVkEpIA0KDQojIyMgUGVuZGFodWx1YW4NCg0KUGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbmdldmFsdWFzaSBwZXJiZWRhYW4gcmF0YS1yYXRhIGhhc2lsIHRlcyBrb2duaXRpZiBhbnRhcmEgZHVhIGtlbG9tcG9rIGtvbmRpc2kgcGVtYmVsYWphcmFuLCBkZW5nYW4gbWVtcGVydGltYmFuZ2thbiB2YXJpYWJlbCBrb250cm9sIGJlcnVwYSBza29yIHByZXRlc3Qgc2ViYWdhaSBjb3ZhcmlhdGUuIEFuYWxpc2lzIHlhbmcgZGlndW5ha2FuIGFkYWxhaCBBbmFseXNpcyBvZiBDb3ZhcmlhbmNlIChBTkNPVkEpIHVudHVrIG1lbmdlbmRhbGlrYW4gcGVuZ2FydWggdmFyaWFiZWwga29udHJvbCBkYW4gbWVuZW50dWthbiBhcGFrYWggcGVyYmVkYWFuIGFudGFyYSBrZWxvbXBvayB0ZXRhcCBzaWduaWZpa2FuLg0KDQojIyMgRGVzYWluDQoNClBlbmVsaXRpYW4gaW5pIG1lbmdndW5ha2FuIGRlc2FpbiBla3NwZXJpbWVudGFsIGRlbmdhbiBmYWt0b3Iga29uZGlzaSBwZW1iZWxhamFyYW4gKEtlbG9tcG9rKSBkYW4gdmFyaWFiZWwga29udHJvbCAoUHJldGVzdCkuIE1hc2luZy1tYXNpbmcgcGFydGlzaXBhbiBkaXVrdXIgcGFkYSBkdWEgd2FrdHUgeWFuZyBiZXJiZWRhOiBzZWJlbHVtIHBlbWJlbGFqYXJhbiAocHJldGVzdCkgZGFuIHNldGVsYWggcGVtYmVsYWphcmFuIChwb3N0dGVzdCkuDQoNCiMjIyBNb2RlbA0KDQpBbmFsaXNpcyBzdGF0aXN0aWsgQU5DT1ZBIGRpbGFrdWthbiB1bnR1ayBtZW5pbGFpIHBlcmJlZGFhbiByYXRhLXJhdGEgaGFzaWwgdGVzIGtvZ25pdGlmIGFudGFyYSBrZWR1YSBrZWxvbXBvaywgZGVuZ2FuIG1lbmdlbmRhbGlrYW4gc2tvciBwcmV0ZXN0IHNlYmFnYWkgY292YXJpYXRlLg0KDQojIyMgSGFzaWwNCg0KYGBge3J9DQpoZWFkKEFuY292YSwgNSkNCmBgYA0KYGBge3J9DQpyZXN1bHRfQW5jb3ZhID0gYW92KFBvc3R0ZXN0IH4gS2Vsb21wb2sgKyBQcmV0ZXN0LCBkYXRhID0gQW5jb3ZhKQ0Kc3VtbWFyeShyZXN1bHRfQW5jb3ZhKQ0KYGBgDQoNCkJlcmRhc2Fya2FuIGhhc2lsIGluaSwgZGFwYXQgZGlzaW1wdWxrYW4gYmFod2EgYmFpayB2YXJpYWJlbCBrZWxvbXBvayBtYXVwdW4ga292YXJpYXQgUHJldGVzdCBtZW1pbGlraSBlZmVrIHlhbmcgc2lnbmlmaWthbiBwYWRhIHZhcmlhYmVsIFBvc3R0ZXN0LiBIYWwgaW5pIGRhcGF0IGJlcm1hbmZhYXQgZGFsYW0gbWVtYWhhbWkgcGVuZ2FydWggZmFrdG9yIGtlbG9tcG9rIGRhbiBrb3ZhcmlhdCBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIGRhbGFtIGhhc2lsIFBvc3R0ZXN0Lg0KDQoqQ2F0YXRhbjogRGF0YSBzZXQgZGkgYXRhcyBoYW55YSBiZXJzaWZhdCBmaWt0aWYgZGFuIGRpYnVhdCB1bnR1ayB0dWp1YW4gZGVtb25zdHJhc2kuIEFuZGEgZGFwYXQgbWVuZ2d1bmFrYW4gZGF0YSBzZWJlbmFybnlhIGRhcmkgcGVuZWxpdGlhbiBBbmRhIHVudHVrIG1lbGFrdWthbiBhbmFsaXNpcyBSZXBlYXRlZCBNZWFzdXJlcyBBTk9WQS4qDQoNCi0tLQ0KDQojIyBNaXhlZC1EZXNpZ24gQU5PVkEgDQoNCiMjIyBQZW5kYWh1bHVhbg0KDQpQZW5lbGl0aWFuIGluaSBiZXJ0dWp1YW4gdW50dWsgbWVuZ2V2YWx1YXNpIHBlbmdhcnVoIGR1YSBmYWt0b3IsIHlhaXR1IGplbmlzIGludGVydmVuc2kgKEludGVydmVuc2kgQSBkYW4gSW50ZXJ2ZW5zaSBCKSBkYW4gd2FrdHUgcGVuZ3VrdXJhbiAocHJldGVzdCBkYW4gcG9zdHRlc3QpLCBzZXJ0YSBpbnRlcmFrc2kgYW50YXJhIGtlZHVhbnlhLCB0ZXJoYWRhcCBoYXNpbCB0ZXMga29nbml0aWYgc2lzd2EuIEFuYWxpc2lzIHlhbmcgZGlndW5ha2FuIGFkYWxhaCBNaXhlZC1EZXNpZ24gQW5hbHlzaXMgb2YgVmFyaWFuY2UgKEFOT1ZBKSB1bnR1ayBtZW5naWRlbnRpZmlrYXNpIGFwYWthaCBhZGEgcGVyYmVkYWFuIHNpZ25pZmlrYW4gZGFsYW0gaGFzaWwgdGVzIGtvZ25pdGlmIHBhZGEgYmVyYmFnYWkgdGluZ2thdGFuIHdha3R1IGRhbiBqZW5pcyBpbnRlcnZlbnNpLg0KDQojIyMgRGVzYWluDQoNClBlbmVsaXRpYW4gaW5pIG1lbmdndW5ha2FuIGRlc2FpbiBmYWt0b3JpYWwgZGVuZ2FuIGR1YSBmYWt0b3I6IGplbmlzIGludGVydmVuc2kgKEludGVydmVuc2kgQSBkYW4gSW50ZXJ2ZW5zaSBCKSBkYW4gd2FrdHUgcGVuZ3VrdXJhbiAocHJldGVzdCBkYW4gcG9zdHRlc3QpLiBNYXNpbmctbWFzaW5nIHBhcnRpc2lwYW4gZGl1a3VyIHBhZGEgZHVhIHdha3R1IHlhbmcgYmVyYmVkYS4NCg0KIyMjIE1vZGVsDQoNCkFuYWxpc2lzIHN0YXRpc3RpayBNaXhlZC1EZXNpZ24gQU5PVkEgZGlsYWt1a2FuIHVudHVrIG1lbmdldmFsdWFzaSBwZW5nYXJ1aCBqZW5pcyBpbnRlcnZlbnNpLCB3YWt0dSBwZW5ndWt1cmFuLCBkYW4gaW50ZXJha3NpIGFudGFyYSBrZWR1YW55YSB0ZXJoYWRhcCBoYXNpbCB0ZXMga29nbml0aWYuIA0KDQojIyMgSGFzaWwNCg0Kc2ludGFrcyBkaSBiYXdhaCBpbmkgbWVuY29iYSB1bnR1ayBtZW1haGFtaSBiYWdhaW1hbmEgaW50ZXJ2ZW5zaSBhdGF1IHBlcmxha3VhbiAoZGVuZ2FuIEplbmlzSW50ZXJ2ZW5zaSkgZGFuIHdha3R1IHBlbmd1a3VyYW4gKFdha3R1KSBtZW1wZW5nYXJ1aGkgdmFyaWFiZWwgVGVzS29nbml0aWYuIE1vZGVsIGluaSBqdWdhIG1lbXBlcmhpdHVuZ2thbiBlZmVrIGFjYWsgaW5kaXZpZHUgcGFkYSB2YXJpYWJlbCBXYWt0dSwgbWVudW5qdWtrYW4gYmFod2EgYWRhIHZhcmlhc2kgYW50YXIgaW5kaXZpZHUgeWFuZyBtdW5na2luIHBlcmx1IGRpcGVyaGl0dW5na2FuDQoNCmBgYHtyfQ0KcmVzdWx0X21peGVkX2Fub3ZhIDwtIGFvdihUZXNLb2duaXRpZiB+IEplbmlzSW50ZXJ2ZW5zaSAqIFdha3R1ICsgRXJyb3IoSUQvV2FrdHUpLCBkYXRhID0gTWl4ZXNfYW5vdmUpDQpzdW1tYXJ5KHJlc3VsdF9taXhlZF9hbm92YSkNCmBgYA0KDQpSaW5na2FzYW4gaGFzaWwgQU5PVkEgY2FtcHVyYW4geWFuZyBkaWJlcmlrYW4gbWVudW5qdWtrYW4gaW5mb3JtYXNpIHRlbnRhbmcgcGVuZ2FydWggdmFyaWFiZWwgSmVuaXNJbnRlcnZlbnNpLCBXYWt0dSwgc2VydGEgaW50ZXJha3NpIGFudGFyYSBrZWR1YW55YSB0ZXJoYWRhcCB2YXJpYWJlbCBUZXNLb2duaXRpZi4gQmVyaWt1dCBhZGFsYWggaW50ZXJwcmV0YXNpIGhhc2lsbnlhOg0KDQotIEVycm9yOiBJRCAoVmFyaWFiaWxpdGFzIGFudGFyIEluZGl2aWR1KToNCg0KSmVuaXNJbnRlcnZlbnNpOiBUZXJkYXBhdCB2YXJpYXNpIHlhbmcgc2lnbmlmaWthbiBkYWxhbSBUZXNLb2duaXRpZiBhbnRhciBpbmRpdmlkdSAoSUQpLiBIYWwgaW5pIGRpbGloYXQgZGFyaSBuaWxhaSBGLXJhdGlvIHlhbmcgc2lnbmlmaWthbiAoNDIuNzE5KSBkZW5nYW4gbmlsYWkgcCB5YW5nIHNhbmdhdCByZW5kYWggKDEuNzVlLTA3IGF0YXUgMC4wMDAwMDAxNzUpLCBkaXRhbmRhaSBkZW5nYW4gdGFuZGEgdGlnYSBiaW50YW5nICgqKiopLiBPbGVoIGthcmVuYSBpdHUsIGFkYSBidWt0aSB5YW5nIGt1YXQgYmFod2EgdGVyZGFwYXQgcGVyYmVkYWFuIHNpZ25pZmlrYW4gZGFsYW0gVGVzS29nbml0aWYgYW50YXIgaW5kaXZpZHUgYmVyZGFzYXJrYW4gSmVuaXNJbnRlcnZlbnNpLg0KDQotIEVycm9yOiBJRDpXYWt0dSAoVmFyaWFiaWxpdGFzIGFudGFyIEluZGl2aWR1IHRlcmhhZGFwIFdha3R1KToNCg0KV2FrdHU6IFRlcmRhcGF0IHZhcmlhc2kgeWFuZyBzaWduaWZpa2FuIGRhbGFtIFRlc0tvZ25pdGlmIGFudGFyIGluZGl2aWR1IHVudHVrIHBlcnViYWhhbiB3YWt0dS4gTWVza2lwdW4gbmlsYWkgRi1yYXRpbyAoMC4wMTMpIGN1a3VwIHJlbmRhaCBkYW4gbmlsYWkgcCAoMC45MDkpIHNhbmdhdCB0aW5nZ2ksIGluaSBtZW51bmp1a2thbiBiYWh3YSB2YXJpYWJpbGl0YXMgVGVzS29nbml0aWYgdGVya2FpdCBkZW5nYW4gaW5kaXZpZHUsIG1lc2tpcHVuIHRpZGFrIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3RpayB0ZXJoYWRhcCBXYWt0dS4NCg0KLSBFcnJvcjogV2l0aGluIChWYXJpYWJpbGl0YXMgZGFsYW0gSW5kaXZpZHUpOg0KDQpKZW5pc0ludGVydmVuc2k6IFRlcmRhcGF0IHZhcmlhc2kgeWFuZyBzaWduaWZpa2FuIGRhbGFtIFRlc0tvZ25pdGlmIGFudGFyIGluZGl2aWR1IGRhbGFtIGtlbG9tcG9rIHlhbmcgc2FtYS4gSGFsIGluaSBkaWxpaGF0IGRhcmkgbmlsYWkgRi1yYXRpbyB5YW5nIHNpZ25pZmlrYW4gKDQyLjcxOSkgZGVuZ2FuIG5pbGFpIHAgeWFuZyBzYW5nYXQgcmVuZGFoICgxLjc1ZS0wNyksIGRpdGFuZGFpIGRlbmdhbiB0YW5kYSB0aWdhIGJpbnRhbmcgKCoqKikuIE9sZWgga2FyZW5hIGl0dSwgYWRhIGJ1a3RpIHlhbmcga3VhdCBiYWh3YSB0ZXJkYXBhdCBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBUZXNLb2duaXRpZiBhbnRhciBpbmRpdmlkdSBiZXJkYXNhcmthbiBKZW5pc0ludGVydmVuc2kuDQoNCldha3R1OiBUaWRhayBhZGEgdmFyaWFzaSB5YW5nIHNpZ25pZmlrYW4gZGFsYW0gVGVzS29nbml0aWYgYW50YXIgaW5kaXZpZHUgdW50dWsgcGVydWJhaGFuIHdha3R1LiBOaWxhaSBwIHlhbmcgdGluZ2dpICgwLjkwOSkgbWVudW5qdWtrYW4gYmFod2EgZWZlayBXYWt0dSB0aWRhayBzaWduaWZpa2FuIHRlcmhhZGFwIFRlc0tvZ25pdGlmIGFudGFyIGluZGl2aWR1Lg0KDQpKZW5pc0ludGVydmVuc2k6V2FrdHU6IFRpZGFrIGFkYSB2YXJpYXNpIHlhbmcgc2lnbmlmaWthbiBkYWxhbSBUZXNLb2duaXRpZiBhbnRhciBpbmRpdmlkdSB1bnR1ayBpbnRlcmFrc2kgYW50YXJhIEplbmlzSW50ZXJ2ZW5zaSBkYW4gV2FrdHUuIE5pbGFpIHAgeWFuZyB0aW5nZ2kgKDAuOTUwKSBtZW51bmp1a2thbiBiYWh3YSBlZmVrIGludGVyYWtzaSBhbnRhcmEgSmVuaXNJbnRlcnZlbnNpIGRhbiBXYWt0dSB0aWRhayBzaWduaWZpa2FuIHRlcmhhZGFwIFRlc0tvZ25pdGlmIGFudGFyIGluZGl2aWR1Lg0KDQpSZXNpZHVhbHM6IFNpc2EgYXRhdSB2YXJpYWJpbGl0YXMgeWFuZyB0aWRhayBkYXBhdCBkaWplbGFza2FuIG9sZWggdmFyaWFiZWwtdmFyaWFiZWwgeWFuZyBkaW1hc3Vra2FuIGtlIGRhbGFtIG1vZGVsLg0KDQpTaWduaWYuIGNvZGVzOg0KDQogICAgKioqOiBTaWduaWZpa2Fuc2kgcGFkYSB0aW5na2F0IDAuMDAxLg0KICAgICoqOiBTaWduaWZpa2Fuc2kgcGFkYSB0aW5na2F0IDAuMDEuDQogICAgKjogU2lnbmlmaWthbnNpIHBhZGEgdGluZ2thdCAwLjA1Lg0KICAgIC46IFNpZ25pZmlrYW5zaSBwYWRhIHRpbmdrYXQgMC4xLg0KICAgIDE6IFRpZGFrIHNpZ25pZmlrYW4uDQoNCipDYXRhdGFuOiBEYXRhIHNldCBkaSBhdGFzIGhhbnlhIGJlcnNpZmF0IGZpa3RpZiBkYW4gZGlidWF0IHVudHVrIHR1anVhbiBkZW1vbnN0cmFzaS4gQW5kYSBkYXBhdCBtZW5nZ3VuYWthbiBkYXRhIHNlYmVuYXJueWEgZGFyaSBwZW5lbGl0aWFuIEFuZGEgdW50dWsgbWVsYWt1a2FuIGFuYWxpc2lzIFJlcGVhdGVkIE1lYXN1cmVzIEFOT1ZBLioNCg0KLS0tDQo=