Program Studi
Sains Data
Universitas
INSTITUT TEKNOLOGI SAINS BANDUNG
Dosen Pengampu
Bakti Siregar, M Sc., CSD
STUDY CASES
Confidence Interval - Week 13
Case Study 1
Confidence Interval for Mean, \(\sigma\) Known: An
e-commerce platform wants to estimate the
average number of daily transactions per user after
launching a new feature. Based on large-scale historical data, the
population standard deviation is known.
\[
\begin{eqnarray*}
\sigma &=& 3.2 \quad \text{(population standard deviation)} \\
n &=& 100 \quad \text{(sample size)} \\
\bar{x} &=& 12.6 \quad \text{(sample mean)}
\end{eqnarray*}
\]
Identify the
appropriate statistical test and justify your choice.
Karena tujuan analisisnya adalah mengestimasi mean populasi
\(\mu\) dan nilai standar deviasi
populasi \(\sigma\) diketahui
(\(\sigma = 3.2\)), maka metode yang
sesuai adalah confidence interval berbasis Z untuk
mean:
\[
\bar{x} \pm z_{\alpha/2} \left(\frac{\sigma}{\sqrt{n}}\right)
\]
Compute the
Confidence Intervals for:
- \(90\%\)
- \(95\%\)
- \(99\%\)
Data:
\[
\sigma = 3.2, \quad n = 100, \quad \bar{x} = 12.6
\]
- Hitung Standard Error (SE):
\[
SE = \frac{\sigma}{\sqrt{n}}
= \frac{3.2}{\sqrt{100}}
= \frac{3.2}{10}
= 0.32
\]
- Rumus CI (karena \(\sigma\)
known → Z):
\[
CI = \bar{x} \pm z_{\alpha/2} \cdot SE
\]
1. Confidence Interval 90%
Nilai kritis: \[
z_{0.95} = 1.645
\]
Margin of Error: \[
ME = 1.645 \times 0.32 = 0.526
\]
CI 90%: \[
12.6 \pm 0.526 \;\Rightarrow\; (12.074,\; 13.126)
\]
2. Confidence Interval 95%
Nilai kritis: \[
z_{0.975} = 1.960
\]
Margin of Error: \[
ME = 1.960 \times 0.32 = 0.627
\]
CI 95%: \[
12.6 \pm 0.627 \;\Rightarrow\; (11.973,\; 13.227)
\]
3. Confidence Interval 99%
Nilai kritis: \[
z_{0.995} = 2.576
\]
Margin of Error: \[
ME = 2.576 \times 0.32 \approx 0.824
\]
CI 99%: \[
12.6 \pm 0.824 \;\Rightarrow\; (11.776,\; 13.424)
\]
comparison
visualization of the three confidence intervals.

Interpret the
results in a business analytics context.
Visualisasi ini menunjukkan perkiraan rata-rata transaksi
harian per user berada di sekitar \(\bar{x} = 12.6\) (garis vertikal/titik
tengah).lalu tiga confidence interval (garis horizontal) memberi rentang
nilai mean populasi yang masuk akal. yaitu: - CL 90% =
(12.074, 13.126) paling sempit. - CL 95%
= (11.973, 13.227) lebih lebar. - CL
99% = (11.776, 13.424) paling lebar.
Intinya, semakin tinggi tingkat
kepercayaan, rentang makin melebar karena kita
ingin “lebih yakin” mean sebenarnya ada di dalam rentang
itu.
jadi, toleransi ketidakpastian
diperbesar. akibatnya 90% paling presisi tapi kurang
konservatif, sedangkan 99% paling aman/konservatif tapi
paling tidak presisi.
Case Study 2
Confidence Interval for Mean, \(\sigma\) Unknown: A UX
Research team analyzes task completion time (in
minutes) for a new mobile application. The data are collected
from 12 users:
\[
8.4,\; 7.9,\; 9.1,\; 8.7,\; 8.2,\; 9.0,\;
7.8,\; 8.5,\; 8.9,\; 8.1,\; 8.6,\; 8.3
\]
Identify the
appropriate statistical test
Metode yang tepat adalah confidence interval berbasis
distribusi t (one-sample t-interval) untuk mean, karena yang
ingin diestimasi adalah rata-rata populasi waktu
penyelesaian tugas, sementara standar deviasi populasi (σ) tidak
diketahui sehingga harus diganti dengan standar deviasi
sampel (s), dan ukuran sampel juga kecil (n =
12) sehingga pendekatan yang paling sesuai menggunakan
t-Student dengan derajat bebas df = 11.
Compute the
Confidence Intervals for:
- \(90\%\)
- \(95\%\)
- \(99\%\)
Data:
\[
n = 12,\quad df = n - 1 = 11
\]
\[
x = (8.4,\; 7.9,\; 9.1,\; 8.7,\; 8.2,\; 9.0,\; 7.8,\; 8.5,\; 8.9,\;
8.1,\; 8.6,\; 8.3)
\]
- Hitung rata-rata sampel (\(\bar{x}\)):
\[
\bar{x} = \frac{\sum_{i=1}^{n} x_i}{n} = 8.4583
\]
- Hitung standar deviasi sampel (\(s\)):
\[
s = 0.4209
\]
- Hitung Standard Error (SE):
\[
SE = \frac{s}{\sqrt{n}}
= \frac{0.4209}{\sqrt{12}}
= 0.1215
\]
- Rumus CI (karena \(\sigma\)
unknown \(\rightarrow\) pakai
distribusi t):
\[
CI = \bar{x} \pm t_{\alpha/2,\,df} \cdot SE
\]
1. Confidence Interval 90%
Nilai kritis: \[
t_{0.95,\,11} = 1.796
\]
Margin of Error: \[
ME = 1.796 \times 0.1215 = 0.2182
\]
CI 90%: \[
8.4583 \pm 0.2182 \;\Rightarrow\; (8.2401,\; 8.6766)
\]
2. Confidence Interval 95%
Nilai kritis: \[
t_{0.975,\,11} = 2.201
\]
Margin of Error: \[
ME = 2.201 \times 0.1215 = 0.2675
\]
CI 95%: \[
8.4583 \pm 0.2675 \;\Rightarrow\; (8.1909,\; 8.7258)
\]
3.Confidence Interval 99%
Nilai kritis: \[
t_{0.995,\,11} = 3.106
\]
Margin of Error: \[
ME = 3.106 \times 0.1215 = 0.3774
\]
CI 99%: \[
8.4583 \pm 0.3774 \;\Rightarrow\; (8.0809,\; 8.8357)
\]
Visualize the
three intervals on a single plot.

Explain
sample size and confidence level influence the interval
width.
Lebar confidence interval untuk mean (\(\sigma\) unknown) ditentukan oleh:
\[
CI = \bar{x} \pm t_{\alpha/2,\,df}\left(\frac{s}{\sqrt{n}}\right)
\]
Jadi “lebar” CI bergantung pada dua hal utama:
(1) Sample size
Kalau \(n\) makin
besar, maka \(\dfrac{s}{\sqrt{n}}\) (standard
error) makin kecil. \(\rightarrow\) interval makin sempit (lebih
presisi).
Kalau \(n\)
kecil (kayak di kasus ini \(n =
12\)), standard error masih relatif besar \(\rightarrow\) interval lebih
lebar.
(2) Confidence level (90% vs 95% vs 99%)
Semakin tinggi confidence level, nilai kritis
\(t_{\alpha/2,\,df}\) makin besar \(\rightarrow\) interval makin
lebar.
Makanya urutannya selalu: \[
\text{CI 90\% (paling sempit)}
< \text{ CI 95\% }
< \text{ CI 99\% (paling lebar)}
\]
Intinya: \(n\)
besar bikin CI menyempit, sedangkan confidence level tinggi bikin CI
melebar (lebih aman tapi kurang presisi).
Case Study 3
Confidence Interval for a Proportion, A/B Testing: A
data science team runs an A/B test on a new
Call-To-Action (CTA) button design. The experiment yields:
\[
\begin{eqnarray*}
n &=& 400 \quad \text{(total users)} \\
x &=& 156 \quad \text{(users who clicked the CTA)}
\end{eqnarray*}
\]
Compute the
sample proportion \(\hat{p}\).
Diketahui:
\[
n = 400 \quad \text{(total users)}
\] \[
x = 156 \quad \text{(users yang klik CTA)}
\]
Proporsi sampel:
\[
\hat{p} = \frac{x}{n} = \frac{156}{400} = 0.39
\]
Jadi sample proportion / CTR sampel = 0.39 (atau 39%).
- Compute Confidence Intervals for the proportion at:
- \(90\%\)
- \(95\%\)
- \(99\%\)
Data:
\[
n = 400,\quad x = 156,\quad \hat{p} = \frac{156}{400} = 0.39
\]
- Hitung Standard Error (SE) untuk proporsi:
\[
SE = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}
= \sqrt{\frac{0.39(1 - 0.39)}{400}}
= \sqrt{\frac{0.39 \cdot 0.61}{400}}
= \sqrt{\frac{0.2379}{400}}
= \sqrt{0.00059475}
\approx 0.0244
\]
\[
CI = \hat{p} \pm z_{\alpha/2} \cdot SE
\]
1. Confidence Interval 90%
Nilai kritis: \[
z_{0.95} = 1.645
\]
Margin of Error: \[
ME = 1.645 \times 0.0244 = 0.0401
\]
CI 90%: \[
0.39 \pm 0.0401 \;\Rightarrow\; (0.3499,\; 0.4301)
\]
2. Confidence Interval 95%
Nilai kritis: \[
z_{0.975} = 1.960
\]
Margin of Error: \[
ME = 1.960 \times 0.0244 = 0.0478
\]
CI 95%: \[
0.39 \pm 0.0478 \;\Rightarrow\; (0.3422,\; 0.4378)
\]
3. Confidence Interval 99%
Nilai kritis: \[
z_{0.995} = 2.576
\]
Margin of Error: \[
ME = 2.576 \times 0.0244 = 0.0628
\]
CI 99%: \[
0.39 \pm 0.0628 \;\Rightarrow\; (0.3272,\; 0.4528)
\]
Visualize and
compare the three intervals.

Explain
confidence level affects decision-making in product
experiments.
Dalam eksperimen produk (misalnya A/B testing CTA),
confidence level menentukan seberapa “ketat” kita saat
menyimpulkan CTR sebenarnya. Dari visualisasi, terlihat bahwa
CI 90% paling sempit, CI 95% lebih
lebar, dan CI 99% paling lebar. artinya
semakin tinggi confidence level, semakin lebar rentang CTR yang
dianggap masuk akal, karena kita ingin keyakinan yang
lebih tinggi.
Rekomendasi untuk pengambilan keputusan:
Confidence level tinggi (99%) → interval lebih
lebar → keputusan lebih konservatif/aman (risiko salah klaim lebih
kecil), tetapi bisa lebih sering “belum cukup bukti” untuk
mengambil keputusan cepat.
Confidence level lebih rendah (90%) → interval
lebih sempit → keputusan lebih cepat dan responsif, tetapi
risikonya lebih besar dibanding 95%/99%.
Rekomendasi:
Untuk keputusan high-risk (rollout besar, dampak revenue
besar, biaya tinggi) → lebih cocok pakai 95%–99%.
Untuk keputusan low-risk (iterasi UI kecil, eksplorasi
awal) → 90%–95% biasanya sudah cukup.
Case Study 4
Precision Comparison (Z-Test vs t-Test): Two data
teams measure API latency (in milliseconds) under
different conditions.
\[\begin{eqnarray*}
\text{Team A:} \\
n &=& 36 \quad \text{(sample size)} \\
\bar{x} &=& 210 \quad \text{(sample mean)} \\
\sigma &=& 24 \quad \text{(known population standard deviation)}
\\[6pt]
\text{Team B:} \\
n &=& 36 \quad \text{(sample size)} \\
\bar{x} &=& 210 \quad \text{(sample mean)} \\
s &=& 24 \quad \text{(sample standard deviation)}
\end{eqnarray*}\]
Identify the
statistical test used by each team.
Team A menggunakan Z confidence
interval untuk mean karena standar deviasi populasi
diketahui (\(\sigma =
24\)).
Sedangkan Team B menggunakan t confidence
interval untuk mean karena standar deviasi populasi
tidak diketahui dan digantikan oleh standar deviasi sampel
(\(s = 24\)) dengan derajat bebas \(df = n - 1 = 35\).
Compute
Confidence Intervals for 90%, 95%, and 99%.
Data
Team A: \(n = 36,\
\bar{x} = 210,\ \sigma = 24\) (\(\sigma\) diketahui)
Team B: \(n = 36,\
\bar{x} = 210,\ s = 24\) (\(\sigma\) tidak diketahui)
Standard error (keduanya sama):
\[
SE = \frac{24}{\sqrt{36}} = \frac{24}{6} = 4
\]
Team A (Z-interval, \(\sigma\) known)
\[
CI = \bar{x} \pm z_{\alpha/2} \cdot SE
\]
90%: \[
210 \pm 1.645(4)
\;\Rightarrow\;
(203.421,\; 216.579)
\]
95%: \[
210 \pm 1.960(4)
\;\Rightarrow\;
(202.160,\; 217.840)
\]
99%: \[
210 \pm 2.576(4)
\;\Rightarrow\;
(199.696,\; 220.304)
\]
Team B (t-interval, \(\sigma\) unknown, \(df = 35\))
\[
CI = \bar{x} \pm t_{\alpha/2,35} \cdot SE
\]
90%: \[
210 \pm 1.690(4)
\;\Rightarrow\;
(203.242,\; 216.758)
\]
95%: \[
210 \pm 2.030(4)
\;\Rightarrow\;
(201.880,\; 218.120)
\]
99%: \[
210 \pm 2.724(4)
\;\Rightarrow\;
(199.105,\; 220.895)
\]
Visualization
comparing all intervals.

Explain why
the interval widths differ, even with similar data.
Meskipun Team A dan Team B punya ringkasan data yang terlihat
sama (\(n = 36\), \(\bar{x} = 210\), dan ukuran sebaran 24),
lebar intervalnya tetap berbeda karena sumber
ketidakpastiannya beda. Team A memakai Z-interval karena \(\sigma\) populasi benar-benar
diketahui, sehingga ketidakpastian hanya berasal dari proses
sampling.
Sementara itu Team B memakai t-interval karena \(\sigma\) tidak diketahui dan harus
diperkirakan dari sampel (pakai \(s\)),
sehingga ada ketidakpastian tambahan.
Akibatnya, nilai kritis distribusi t untuk level
kepercayaan yang sama sedikit lebih besar daripada nilai
z, sehingga margin of error menjadi lebih besar dan
interval Team B jadi lebih lebar.
Jadi, perbedaan lebar interval terutama karena
t-interval lebih konservatif saat \(\sigma\) tidak diketahui.
Case Study 5
One-Sided Confidence Interval: A Software as
a Service (SaaS) company wants to ensure that at least
70% of weekly active users utilize a premium feature.
From the experiment:
\[
\begin{eqnarray*}
n &=& 250 \quad \text{(total users)} \\
x &=& 185 \quad \text{(active premium users)}
\end{eqnarray*}
\]
Management is only interested in the lower bound of
the estimate.
Identify the type of
Confidence Interval and the appropriate test.
Case Study 5 menggunakan confidence interval satu sisi
(one-sided) dengan fokus pada batas bawah itu sebagai proporsi
pengguna aktif yang memakai fitur premium.
Metode yang tepat adalah , karena parameter yang diestimasi
adalah proporsi \(p\) dan ukuran sampel
cukup besar (\(n = 250\))
sehingga pendekatan normal dapat digunakan.
Karena perusahaan ingin memastikan “minimal 70%”,
analisis ini juga sejalan dengan pengujian satu arah untuk target, yaitu
\[
H_0 : p \le 0.70
\quad \text{versus} \quad
H_1 : p > 0.70.
\]
Compute the
one-sided lower Confidence Interval
- \(90\%\)
- \(95\%\)
- \(99\%\)
Data:
\[
n = 250,\quad x = 185,\quad \hat{p} = \frac{x}{n} = \frac{185}{250} =
0.74
\]
- Hitung Standard Error (SE) proporsi:
\[
SE = \sqrt{\frac{\hat{p}(1 - \hat{p})}{n}}
= \sqrt{\frac{0.74(1 - 0.74)}{250}}
= \sqrt{\frac{0.74 \cdot 0.26}{250}}
= \sqrt{0.0007696}
\approx 0.02774
\]
- Rumus one-sided lower CI (Z):
Pada confidence interval dua sisi, kita biasanya menghitung dua
batas:
\[
CI = \hat{p} \pm z_{\alpha/2} \cdot SE
\]
Namun pada kasus ini manajemen hanya tertarik pada
batas bawah (“minimal proporsinya berapa”).
Karena itu digunakan , sehingga kita hanya menghitung batas
bawah yang dinotasikan dengan \(L\), di mana \(L\) adalah singkatan dari (batas
bawah).
Untuk confidence level \(C\), batas
bawah one-sided ditulis:
\[
L = \hat{p} - z_C \cdot SE
\]
dan interval one-sided dapat dituliskan sebagai:
\[
(L,\, 1)
\]
karena nilai proporsi maksimum adalah 1.
1. One-sided lower CI 90%
Nilai kritis: \[
z_{0.90} = 1.282
\]
Margin of Error: \[
ME = 1.282 \times 0.02774 = 0.03555
\]
Lower bound 90%: \[
L = 0.74 - 0.03555 = 0.70445
\]
Jadi one-sided lower CI 90%: \[
(0.70445,\; 1)
\]
2. One-sided lower CI 95%
Nilai kritis: \[
z_{0.95} = 1.645
\]
Margin of Error: \[
ME = 1.645 \times 0.02774 = 0.04563
\]
Lower bound 95%: \[
L = 0.74 - 0.04563 = 0.69437
\]
Jadi one-sided lower CI 95%: \[
(0.69437,\; 1)
\]
Visualize the
lower bounds for all confidence levels.

Determine whether the
70% target is statistically satisfied.
Untuk menentukan apakah target 70% “terpenuhi secara
statistik”, kita bandingkan batas bawah (lower bound) one-sided
CI dengan 0.70. Jika \(L \ge
0.70\), maka kita bisa yakin (sesuai tingkat confidence)
bahwa proporsi sebenarnya setidaknya 70%.
Dari hasil yang sudah dihitung:
Lower bound 90%: \[
L_{90} = 0.70445
\] lebih besar dari 0.70 \(\Rightarrow\) target pada 90%
confidence.
Lower bound 95%: \[
L_{95} = 0.69437
\] lebih kecil dari 0.70 \(\Rightarrow\) target pada 95%
confidence.
Lower bound 99%: \[
L_{99} = 0.67546
\] lebih kecil dari 0.70 \(\Rightarrow\) target pada 99%
confidence.
Kesimpulannya, target 70% hanya dapat dinyatakan
terpenuhi secara statistik pada tingkat kepercayaan 90%, tetapi tidak
terpenuhi jika perusahaan mensyaratkan keyakinan yang lebih ketat
seperti 95% atau 99%.
LS0tDQp0aXRsZTogIlN0dWR5IENhc2VzIiAgICAgICAgICAgIA0Kc3VidGl0bGU6ICJDb25maWRlbmNlIEludGVydmFsfiBXZWVrIDEzIiAgDQphdXRob3I6ICJOdXJ1bCBJZmZhaCIgICAgICANCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiIA0Kb3V0cHV0OiAgICAgICAgICAgICAgICAgICAgICAgICANCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgICAgDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUgICAgICAgICANCiAgICB0aHVtYm5haWxzOiB0cnVlICAgICAgICAgICAgDQogICAgbGlnaHRib3g6IHRydWUgICAgICAgICAgICAgIA0KICAgIGdhbGxlcnk6IHRydWUgICAgICAgICAgICAgICANCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUgICAgICAgDQogICAgbGliX2RpcjogbGlicyAgICAgICAgICAgICAgIA0KICAgIGRmX3ByaW50OiAicGFnZWQiICAgICAgICAgICANCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93IiAgICAgICAgIA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAgICAgICAgIA0KLS0tDQoNCjxzdHlsZT4NCkBpbXBvcnQgdXJsKCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PUZyZWRva2E6d2dodEA1MDA7NjAwOzcwMCZmYW1pbHk9UXVpY2tzYW5kOndnaHRANDAwOzYwMDs3MDAmZGlzcGxheT1zd2FwIik7DQoNCjpyb290IHsNCiAgLS1zbm93LWZ1cjogI0Y4RjlCQTsNCiAgLS1lYXItcGluazogI0ZGRERFMjsNCiAgLS1sYWJlbC1ncmF5OiAjRTJFNUU5Ow0KICAtLWJnLWxlZnQ6ICNGRkZGRkY7DQogIC0tYmctcmlnaHQ6ICNENkMxQzE7DQogIC0tY2FyZC1iZzogI0ZGRkZGRjsNCiAgLS10ZXh0LXRpdGxlOiAjMDAwMDAwOw0KICAtLXRleHQtYm9keTogIzAwMDAwMDsNCiAgLS10ZXh0LW11dGVkOiAjMDAwMDAwOw0KICAtLWJ0bi1leHBsb3JlOiAjOEZCQUIxOw0KICAtLWJ0bi1yZWxheDogI0Q2QTlBQTsNCiAgLS1idG4tdGV4dDogI0ZGRkZGRjsNCiAgLS1hY2NlbnQtc3RhcjogI0YzRThFODsNCiAgLS1zaGFkb3ctc29mdDogMCAxOHB4IDM1cHggcmdiYSgxMzksIDExNCwgMTE0LCAwLjIpOw0KICAtLXNoYWRvdy1jYXJkOiAwIDhweCAxOHB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4xOCk7DQogIC0tcmFkaXVzLWxnOiAyMnB4Ow0KICAtLXJhZGl1cy1tZDogMTZweDsNCiAgLS1jb250ZW50LXRvcDogNC42cmVtOw0KICAtLWxpbmstdW5kZXJsaW5lOiByZ2JhKDE0MywgMTg2LCAxNzcsIDAuNik7DQogIC0tbGluay1ob3Zlci1iZzogcmdiYSgyNTUsIDIyMSwgMjI2LCAwLjUpOw0KICAtLXNpZGViYXItYmc6IHJnYmEoMjU1LCAyMjEsIDIyNiwgMC43KTsNCiAgLS1zaWRlYmFyLWJvcmRlcjogcmdiYSgyMjYsIDIyOSwgMjMzLCAwLjkpOw0KICAtLXNpZGViYXItc2hhZG93OiAxMHB4IDAgMjJweCByZ2JhKDEzOSwgMTE0LCAxMTQsIDAuMTIpOw0KICAtLXNpZGViYXItc2hhZG93LW9wZW46IDE0cHggMCAyNnB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4yKTsNCiAgLS1zaWRlYmFyLWgyLXNoYWRvdzogMCA2cHggMTRweCByZ2JhKDEzOSwgMTE0LCAxMTQsIDAuMjIpOw0KICAtLXNlY3Rpb24tdGl0bGUtc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4xOCk7DQogIC0tbG9nby1mcmFtZS1zaGFkb3c6IDAgMTJweCAyNnB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4zKSwgMCAwIDAgM3B4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsNCiAgLS1sb2dvLXN0YXItc2hhZG93OiAwIDAgOHB4IHJnYmEoMjQzLCAyMzIsIDIzMiwgMC45KTsNCiAgLS1sb2dvLWRvdC1zaGFkb3c6IDAgMCA2cHggcmdiYSgyNTUsIDIyMSwgMjI2LCAwLjkpOw0KICAtLXRhYmxlLWV2ZW4tYmc6IHJnYmEoMjI2LCAyMjksIDIzMywgMC41NSk7DQogIC0tdGFibGUtaG92ZXItYmc6IHJnYmEoMjU1LCAyMjEsIDIyNiwgMC42KTsNCiAgLS1jb2RlLWlubGluZS1iZzogcmdiYSgyNDgsIDI0OSwgMTg2LCAwLjYpOw0KICAtLWNvZGUtYmxvY2stYmc6ICNGRkZGRkY7DQogIC0tZGV0YWlscy1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsNCiAgLS10b2dnbGUtc2hhZG93OiAwIDRweCAxMHB4IHJnYmEoMTM5LCAxMTQsIDExNCwgMC4zKTsNCiAgLS10b2dnbGUtaWNvbi1zaGlmdDogMHB4Ow0KICAtLWljb24tc3VuLWxpZ2h0OiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdabWxzYkQwaWJtOXVaU0lnYzNSeWIydGxQU0lqTlRVMU5UVTFJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0krUEdOcGNtTnNaU0JqZUQwaU1USWlJR041UFNJeE1pSWdjajBpTkNJZ1ptbHNiRDBpSTBaR1JFUkZNaUl2UGp4c2FXNWxJSGd4UFNJeE1pSWdlVEU5SWpFaUlIZ3lQU0l4TWlJZ2VUSTlJak1pTHo0OGJHbHVaU0I0TVQwaU1USWlJSGt4UFNJeU1TSWdlREk5SWpFeUlpQjVNajBpTWpNaUx6NDhiR2x1WlNCNE1UMGlOQzR5TWlJZ2VURTlJalF1TWpJaUlIZ3lQU0kxTGpZMElpQjVNajBpTlM0Mk5DSXZQanhzYVc1bElIZ3hQU0l4T0M0ek5pSWdlVEU5SWpFNExqTTJJaUI0TWowaU1Ua3VOemdpSUhreVBTSXhPUzQzT0NJdlBqeHNhVzVsSUhneFBTSXhJaUI1TVQwaU1USWlJSGd5UFNJeklpQjVNajBpTVRJaUx6NDhiR2x1WlNCNE1UMGlNakVpSUhreFBTSXhNaUlnZURJOUlqSXpJaUI1TWowaU1USWlMejQ4YkdsdVpTQjRNVDBpTkM0eU1pSWdlVEU5SWpFNUxqYzRJaUI0TWowaU5TNDJOQ0lnZVRJOUlqRTRMak0ySWk4K1BHeHBibVVnZURFOUlqRTRMak0ySWlCNU1UMGlOUzQyTkNJZ2VESTlJakU1TGpjNElpQjVNajBpTkM0eU1pSXZQand2YzNablBnPT0iKTsNCiAgLS1pY29uLW1vb24tbGlnaHQ6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpSTBZNFJqbENRU0lnYzNSeWIydGxQU0lqTlRVMU5UVTFJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0krUEhCaGRHZ2daRDBpVFRJeElERXlMamM1UVRrZ09TQXdJREVnTVNBeE1TNHlNU0F6WVRjZ055QXdJREFnTUNBNUxqYzVJRGt1TnpsNklpOCtQQzl6ZG1jKyIpOw0KICAtLWljb24tc3VuLWRhcms6IHVybCgiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJZ1ptbHNiRDBpYm05dVpTSWdjM1J5YjJ0bFBTSWpSalpHT0VaR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSStQR05wY21Oc1pTQmplRDBpTVRJaUlHTjVQU0l4TWlJZ2NqMGlOQ0lnWm1sc2JEMGlJMFl5UWpaRU5DSXZQanhzYVc1bElIZ3hQU0l4TWlJZ2VURTlJakVpSUhneVBTSXhNaUlnZVRJOUlqTWlMejQ4YkdsdVpTQjRNVDBpTVRJaUlIa3hQU0l5TVNJZ2VESTlJakV5SWlCNU1qMGlNak1pTHo0OGJHbHVaU0I0TVQwaU5DNHlNaUlnZVRFOUlqUXVNaklpSUhneVBTSTFMalkwSWlCNU1qMGlOUzQyTkNJdlBqeHNhVzVsSUhneFBTSXhPQzR6TmlJZ2VURTlJakU0TGpNMklpQjRNajBpTVRrdU56Z2lJSGt5UFNJeE9TNDNPQ0l2UGp4c2FXNWxJSGd4UFNJeElpQjVNVDBpTVRJaUlIZ3lQU0l6SWlCNU1qMGlNVElpTHo0OGJHbHVaU0I0TVQwaU1qRWlJSGt4UFNJeE1pSWdlREk5SWpJeklpQjVNajBpTVRJaUx6NDhiR2x1WlNCNE1UMGlOQzR5TWlJZ2VURTlJakU1TGpjNElpQjRNajBpTlM0Mk5DSWdlVEk5SWpFNExqTTJJaTgrUEd4cGJtVWdlREU5SWpFNExqTTJJaUI1TVQwaU5TNDJOQ0lnZURJOUlqRTVMamM0SWlCNU1qMGlOQzR5TWlJdlBqd3ZjM1puUGc9PSIpOw0KICAtLWljb24tbW9vbi1kYXJrOiB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSWdabWxzYkQwaUkwUTJSRU5HUmlJZ2MzUnliMnRsUFNJalJqWkdPRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJK1BIQmhkR2dnWkQwaVRUSXhJREV5TGpjNVFUa2dPU0F3SURFZ01TQXhNUzR5TVNBellUY2dOeUF3SURBZ01DQTVMamM1SURrdU56bDZJaTgrUEM5emRtYysiKTsNCn0NCg0KKiwNCio6OmJlZm9yZSwNCio6OmFmdGVyIHsNCiAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCn0NCg0KaHRtbCwNCmJvZHkgew0KICBoZWlnaHQ6IDEwMCU7DQogIG1hcmdpbjogMDsNCiAgcGFkZGluZzogMDsNCn0NCg0KYm9keSB7DQogIGZvbnQtZmFtaWx5OiAiUXVpY2tzYW5kIiwgIlRyZWJ1Y2hldCBNUyIsIHNhbnMtc2VyaWY7DQogIGZvbnQtc2l6ZTogMTZweDsNCiAgbGluZS1oZWlnaHQ6IDEuNzsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWJnLWxlZnQpIDAlLCB2YXIoLS1iZy1yaWdodCkgMTAwJSk7DQp9DQoNCmgxLnRpdGxlLA0KaDIudGl0bGUsDQpoMy50aXRsZSwNCmgxLnN1YnRpdGxlLA0KaDIuc3VidGl0bGUsDQpoMy5zdWJ0aXRsZSB7DQogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCn0NCg0KI21haW4gcCB7DQogIG1hcmdpbjogMC4zNXJlbSAwIDAuOXJlbSAwOw0KfQ0KDQojbWFpbiB1bCwNCiNtYWluIG9sIHsNCiAgbWFyZ2luOiAwLjJyZW0gMCAwLjlyZW0gMDsNCiAgcGFkZGluZy1sZWZ0OiAxLjRyZW07DQp9DQoNCiNtYWluIGxpIHsNCiAgbWFyZ2luOiAwLjE1cmVtIDA7DQp9DQoNCiNtYWluIHVsIGxpOjptYXJrZXIgew0KICBjb250ZW50OiAi8J+QsCAiOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIGZvbnQtc2l6ZTogMC45cmVtOw0KfQ0KDQphIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCB2YXIoLS1saW5rLXVuZGVybGluZSk7DQogIHRyYW5zaXRpb246IGFsbCAwLjE4cyBlYXNlOw0KfQ0KDQphOmhvdmVyIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIGJhY2tncm91bmQ6IHZhcigtLWxpbmstaG92ZXItYmcpOw0KICBib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDsNCn0NCg0KaHIgew0KICBib3JkZXI6IG5vbmU7DQogIGhlaWdodDogMnB4Ow0KICBtYXgtd2lkdGg6IDcyJTsNCiAgbWFyZ2luOiAxLjRyZW0gYXV0bzsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHZhcigtLWVhci1waW5rKSwgdmFyKC0tc25vdy1mdXIpLCB0cmFuc3BhcmVudCk7DQp9DQoNCmgxLA0KaDIsDQpoMywNCmg0LA0KaDUgew0KICBmb250LWZhbWlseTogIkZyZWRva2EiLCAiUXVpY2tzYW5kIiwgc2Fucy1zZXJpZjsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpOw0KICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOw0KfQ0KDQpib2R5ICNjb250ZW50IHsNCiAgbWF4LXdpZHRoOiAxMjAwcHggIWltcG9ydGFudDsNCiAgbWFyZ2luOiAwIGF1dG8gIWltcG9ydGFudDsNCiAgcGFkZGluZzogMi40cmVtIDIuNHJlbSAzcmVtICFpbXBvcnRhbnQ7DQogIHRyYW5zaXRpb246IG1hcmdpbi1sZWZ0IDAuMjVzIGVhc2UsIG1heC13aWR0aCAwLjI1cyBlYXNlOw0KfQ0KDQpib2R5ICNtYWluIHsNCiAgbWF4LXdpZHRoOiAxMTAwcHggIWltcG9ydGFudDsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgbWFyZ2luOiAycmVtIGF1dG8gM3JlbSAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAycmVtIDIuNHJlbSAyLjZyZW0gIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7DQogIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZykgIWltcG9ydGFudDsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KfQ0KDQojc2lkZWJhciB7DQogIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYmcpOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIHBhZGRpbmctdG9wOiAxLjJyZW07DQogIHdpZHRoOiAyODBweDsNCiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaWRlYmFyLXNoYWRvdyk7DQp9DQoNCiNzaWRlYmFyIGgyIHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgdmFyKC0tc25vdy1mdXIpLCB2YXIoLS1lYXItcGluaykpOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIGZvbnQtZmFtaWx5OiAiRnJlZG9rYSIsICJRdWlja3NhbmQiLCBzYW5zLXNlcmlmOw0KICBmb250LXNpemU6IDFyZW07DQogIGxldHRlci1zcGFjaW5nOiAwLjA2ZW07DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgcGFkZGluZzogMC43cmVtIDAuNnJlbTsNCiAgYm9yZGVyLXJhZGl1czogMThweDsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2lkZWJhci1oMi1zaGFkb3cpOw0KICBtYXJnaW46IDAgMC45cmVtIDFyZW0gMC45cmVtOw0KfQ0KDQojc2lkZWJhciAudG9jaWZ5LA0KI3NpZGViYXIgdWwgew0KICBmb250LXNpemU6IDAuOTVyZW07DQp9DQoNCiNzaWRlYmFyIGEgew0KICBkaXNwbGF5OiBibG9jazsNCiAgcGFkZGluZzogNHB4IDEwcHg7DQogIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICBtYXJnaW46IDFweCAwOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQp9DQoNCiNzaWRlYmFyIGE6aG92ZXIsDQojc2lkZWJhciAudG9jaWZ5LWZvY3VzID4gYSB7DQogIGJhY2tncm91bmQ6IHZhcigtLXNub3ctZnVyKSAhaW1wb3J0YW50Ow0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSkgIWltcG9ydGFudDsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KI3Bvc3RhbWJsZSB7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWJnLWxlZnQpLCB2YXIoLS1iZy1yaWdodCkpOw0KICBib3JkZXItdG9wOiAycHggc29saWQgdmFyKC0tbGFiZWwtZ3JheSk7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCiAgcGFkZGluZzogMC43cmVtIDAuOXJlbSAwLjhyZW07DQogIGZvbnQtc2l6ZTogMC44NXJlbTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQojcG9zdGFtYmxlIHAgew0KICBtYXJnaW46IDAuMTVyZW0gMDsNCn0NCg0KI3Bvc3RhbWJsZSBzcGFuLA0KI3Bvc3RhbWJsZSBhIHsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpICFpbXBvcnRhbnQ7DQp9DQoNCiNwb3N0YW1ibGUgLmRhdGUgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KSAhaW1wb3J0YW50Ow0KfQ0KDQojcG9zdGFtYmxlIC5kYXRlIC5nbHlwaGljb24gew0KICBjb2xvcjogaW5oZXJpdDsNCn0NCg0KI3Bvc3RhbWJsZSAuYXV0aG9yIC5nbHlwaGljb24uZ2x5cGhpY29uLXVzZXIgew0KICBmb250LXNpemU6IDA7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCn0NCg0KI3Bvc3RhbWJsZSAuYXV0aG9yIC5nbHlwaGljb24uZ2x5cGhpY29uLXVzZXI6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICLwn6eVIjsNCiAgZm9udC1zaXplOiAxcmVtOw0KICBtYXJnaW4tcmlnaHQ6IDAuMzVyZW07DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgdG9wOiAxcHg7DQp9DQoNCiNwb3N0YW1ibGUgLmRhdGUgLmdseXBoaWNvbi5nbHlwaGljb24tY2FsZW5kYXIgew0KICBtYXJnaW4tcmlnaHQ6IDAuMzVyZW07DQp9DQoNCmJvZHk6bm90KC5zaWRlYmFyLWNvbGxhcHNlZCkgI2NvbnRlbnQgew0KICBtYXJnaW4tbGVmdDogMzAwcHggIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzMDBweCkgIWltcG9ydGFudDsNCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7DQogIGJvZHk6bm90KC5zaWRlYmFyLWNvbGxhcHNlZCkgI2NvbnRlbnQgew0KICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogICAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIH0NCg0KICAjc2lkZWJhciB7DQogICAgd2lkdGg6IDgwdnc7DQogICAgbWF4LXdpZHRoOiAyNjBweDsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgdG9wOiAwOw0KICAgIGxlZnQ6IDA7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIG92ZXJmbG93LXk6IGF1dG87DQogICAgei1pbmRleDogOTk5MDsNCiAgICBwYWRkaW5nLWJvdHRvbTogM3JlbTsNCiAgfQ0KDQogIGJvZHk6bm90KC5zaWRlYmFyLWNvbGxhcHNlZCkgI3NpZGViYXIgew0KICAgIGJveC1zaGFkb3c6IHZhcigtLXNpZGViYXItc2hhZG93LW9wZW4pOw0KICB9DQp9DQoNCiNtYWluIC5zZWN0aW9uLmxldmVsMiB7DQogIG1heC13aWR0aDogOTgwcHg7DQogIG1hcmdpbjogMS42cmVtIGF1dG87DQogIHBhZGRpbmc6IDEuM3JlbSAxLjVyZW0gMS42cmVtOw0KICBib3JkZXItcmFkaXVzOiAxOHB4Ow0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgYm9yZGVyLWxlZnQ6IDZweCBzb2xpZCB2YXIoLS1lYXItcGluayk7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCiAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7DQp9DQoNCiNtYWluIC5zZWN0aW9uLmxldmVsMiA+IGgyIHsNCiAgbWFyZ2luLXRvcDogMDsNCiAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICBwYWRkaW5nOiAwLjQ1cmVtIDAuOXJlbTsNCiAgYm9yZGVyLXJhZGl1czogMTRweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tc25vdy1mdXIpOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIGJveC1zaGFkb3c6IHZhcigtLXNlY3Rpb24tdGl0bGUtc2hhZG93KTsNCn0NCg0KI21haW4gLnNlY3Rpb24ubGV2ZWwzID4gaDMgew0KICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogIHBhZGRpbmc6IDAuMzVyZW0gMC43NXJlbTsNCiAgYm9yZGVyLXJhZGl1czogMTJweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tbGFiZWwtZ3JheSk7DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCn0NCg0KLmxvZ28td3JhcHBlciB7DQogIGRpc3BsYXk6IGZsZXg7DQogIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIG1hcmdpbjogMS40cmVtIDAgMXJlbTsNCn0NCg0KLmxvZ28tZnJhbWUgew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIHdpZHRoOiAxODBweDsNCiAgaGVpZ2h0OiAxODBweDsNCiAgYXNwZWN0LXJhdGlvOiAxIC8gMTsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBwYWRkaW5nOiA4cHg7DQogIGJhY2tncm91bmQ6IGNvbmljLWdyYWRpZW50KGZyb20gMjEwZGVnLCB2YXIoLS1zbm93LWZ1ciksIHZhcigtLWVhci1waW5rKSwgdmFyKC0tbGFiZWwtZ3JheSksIHZhcigtLWJnLXJpZ2h0KSwgdmFyKC0tYWNjZW50LXN0YXIpLCB2YXIoLS1zbm93LWZ1cikpOw0KICBib3gtc2hhZG93OiB2YXIoLS1sb2dvLWZyYW1lLXNoYWRvdyk7DQp9DQoNCi5sb2dvLWlubmVyIHsNCiAgd2lkdGg6IDEwMCU7DQogIGhlaWdodDogMTAwJTsNCiAgYXNwZWN0LXJhdGlvOiAxIC8gMTsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDMwJSAwLCAjZmZmZmZmIDAsIHZhcigtLWNhcmQtYmcpIDYwJSwgdmFyKC0tYWNjZW50LXN0YXIpIDEwMCUpOw0KICBkaXNwbGF5OiBmbGV4Ow0KICBhbGlnbi1pdGVtczogY2VudGVyOw0KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCn0NCg0KI21haW4gLmxvZ28taW5uZXIgaW1nIHsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50Ow0KICBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7DQogIG9iamVjdC1maXQ6IGNvdmVyOw0KICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1hcmdpbjogMCAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMCAhaW1wb3J0YW50Ow0KICBib3JkZXItcmFkaXVzOiA1MCUgIWltcG9ydGFudDsNCiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgdXNlci1zZWxlY3Q6IG5vbmU7DQp9DQoNCi5sb2dvLWZyYW1lOjpiZWZvcmUgew0KICBjb250ZW50OiAiKiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiAtNHB4Ow0KICByaWdodDogMThweDsNCiAgZm9udC1zaXplOiAxLjFyZW07DQogIGNvbG9yOiB2YXIoLS1hY2NlbnQtc3Rhcik7DQogIHRleHQtc2hhZG93OiB2YXIoLS1sb2dvLXN0YXItc2hhZG93KTsNCn0NCg0KLmxvZ28tZnJhbWU6OmFmdGVyIHsNCiAgY29udGVudDogIm8iOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIGJvdHRvbTogNnB4Ow0KICBsZWZ0OiAxOHB4Ow0KICBmb250LXNpemU6IDAuOXJlbTsNCiAgY29sb3I6IHZhcigtLWVhci1waW5rKTsNCiAgdGV4dC1zaGFkb3c6IHZhcigtLWxvZ28tZG90LXNoYWRvdyk7DQp9DQoNCi5sb2dvLWNhcHRpb24gew0KICBtYXJnaW4tdG9wOiAwLjM1cmVtOw0KICBmb250LXNpemU6IDAuOXJlbTsNCiAgZm9udC13ZWlnaHQ6IDcwMDsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTsNCiAgY29sb3I6IHZhcigtLXRleHQtdGl0bGUpOw0KfQ0KDQouaW5mby1iYWRnZXMgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LXdyYXA6IHdyYXA7DQogIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICBnYXA6IDAuOHJlbTsNCiAgbWFyZ2luOiAxcmVtIDAgMC42cmVtOw0KfQ0KDQouYmFkZ2UtY2FyZCB7DQogIG1pbi13aWR0aDogMTcwcHg7DQogIHBhZGRpbmc6IDAuN3JlbSAxLjJyZW07DQogIGJvcmRlci1yYWRpdXM6IDE2cHg7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWNhcmQpOw0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCn0NCg0KLmJhZGdlLXByaW1hcnkgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1zbm93LWZ1cik7DQp9DQoNCi5iYWRnZS1zZWNvbmRhcnkgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1lYXItcGluayk7DQp9DQoNCi5iYWRnZS10ZXJ0aWFyeSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWxhYmVsLWdyYXkpOw0KfQ0KDQouYmFkZ2UtbGFiZWwgew0KICBkaXNwbGF5OiBibG9jazsNCiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsNCiAgZm9udC1zaXplOiAwLjdyZW07DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpOw0KfQ0KDQouYmFkZ2UtdmFsdWUgew0KICBkaXNwbGF5OiBibG9jazsNCiAgZm9udC1zaXplOiAwLjk1cmVtOw0KICBmb250LXdlaWdodDogNzAwOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQp9DQoNCi5oZXJvLXRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogIkZyZWRva2EiLCAiUXVpY2tzYW5kIiwgc2Fucy1zZXJpZjsNCiAgZm9udC1zaXplOiBjbGFtcCgxLjdyZW0sIDN2dywgMi41cmVtKTsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMTJlbTsNCiAgbWFyZ2luOiAwLjZyZW0gMCAwLjFyZW07DQogIGNvbG9yOiB2YXIoLS10ZXh0LXRpdGxlKTsNCn0NCg0KLmhlcm8tc3VidGl0bGUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpOw0KICBmb250LXdlaWdodDogNjAwOw0KICBtYXJnaW4tYm90dG9tOiAwLjhyZW07DQp9DQoNCi5sb2dvLXdyYXBwZXIsDQouaW5mby1iYWRnZXMsDQouaGVyby10aXRsZSwNCi5oZXJvLXN1YnRpdGxlIHsNCiAgYW5pbWF0aW9uOiBmbG9hdEluIDAuNjVzIGVhc2UgYm90aDsNCn0NCg0KLmxvZ28td3JhcHBlciB7DQogIGFuaW1hdGlvbi1kZWxheTogMC4wNXM7DQp9DQoNCi5pbmZvLWJhZGdlcyB7DQogIGFuaW1hdGlvbi1kZWxheTogMC4xMnM7DQp9DQoNCi5oZXJvLXRpdGxlIHsNCiAgYW5pbWF0aW9uLWRlbGF5OiAwLjE4czsNCn0NCg0KLmhlcm8tc3VidGl0bGUgew0KICBhbmltYXRpb24tZGVsYXk6IDAuMjJzOw0KfQ0KDQpAa2V5ZnJhbWVzIGZsb2F0SW4gew0KICBmcm9tIHsNCiAgICBvcGFjaXR5OiAwOw0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMnB4KTsNCiAgfQ0KICB0byB7DQogICAgb3BhY2l0eTogMTsNCiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogIH0NCn0NCg0KI21haW4gaW1nIHsNCiAgZGlzcGxheTogYmxvY2s7DQogIG1hcmdpbjogMS4ycmVtIGF1dG8gMS40cmVtOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsNCn0NCg0KI21haW4gLmZpZ3VyZSwNCiNtYWluIC5maWd1cmUgaW1nIHsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQp9DQoNCiNtYWluIGZpZ3VyZSwNCiNtYWluIGZpZ3VyZSBpbWcgew0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCg0KI21haW4gdGFibGUgew0KICB3aWR0aDogMTAwJTsNCiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsNCiAgbWFyZ2luOiAxLjJyZW0gMCAxLjZyZW07DQogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmcpOw0KICBib3JkZXItcmFkaXVzOiAxNHB4Ow0KICBvdmVyZmxvdzogaGlkZGVuOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQp9DQoNCiNtYWluIHRoLA0KI21haW4gdGQgew0KICBwYWRkaW5nOiAwLjZyZW0gMC44cmVtOw0KICBmb250LXNpemU6IDAuOXJlbTsNCiAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCg0KI21haW4gdGggew0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQogIGZvbnQtd2VpZ2h0OiA3MDA7DQp9DQoNCiNtYWluIHRkIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQp9DQoNCiNtYWluIHRoZWFkIHRyIHsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB2YXIoLS1zbm93LWZ1ciksIHZhcigtLWVhci1waW5rKSk7DQp9DQoNCiNtYWluIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB7DQogIGJhY2tncm91bmQ6IHZhcigtLXRhYmxlLWV2ZW4tYmcpOw0KfQ0KDQojbWFpbiB0Ym9keSB0cjpob3ZlciB7DQogIGJhY2tncm91bmQ6IHZhcigtLXRhYmxlLWhvdmVyLWJnKTsNCn0NCg0KI21haW4gYmxvY2txdW90ZSB7DQogIG1hcmdpbjogMXJlbSAwOw0KICBwYWRkaW5nOiAwLjlyZW0gMXJlbTsNCiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1lYXItcGluayk7DQogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmcpOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBmb250LXNpemU6IDAuOTVyZW07DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQp9DQoNCnByZSwNCmNvZGUgew0KICBmb250LWZhbWlseTogIkZpcmEgQ29kZSIsICJKZXRCcmFpbnMgTW9ubyIsIENvbnNvbGFzLCAiQ291cmllciBOZXciLCBtb25vc3BhY2U7DQp9DQoNCiNtYWluIHByZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWNvZGUtYmxvY2stYmcpOw0KICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICBwYWRkaW5nOiAwLjhyZW0gMXJlbTsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGFiZWwtZ3JheSk7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCiAgb3ZlcmZsb3cteDogYXV0bzsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KfQ0KDQojbWFpbiBwcmU6OmJlZm9yZSB7DQogIGNvbnRlbnQ6ICJjb2RlIjsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDZweDsNCiAgcmlnaHQ6IDEycHg7DQogIGZvbnQtc2l6ZTogMC43cmVtOw0KICBwYWRkaW5nOiAycHggN3B4Ow0KICBib3JkZXItcmFkaXVzOiA5OTlweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tZWFyLXBpbmspOw0KICBjb2xvcjogdmFyKC0tdGV4dC10aXRsZSk7DQp9DQoNCiNtYWluIHAgPiBjb2RlLA0KI21haW4gbGkgPiBjb2RlIHsNCiAgYmFja2dyb3VuZDogdmFyKC0tY29kZS1pbmxpbmUtYmcpOw0KICBwYWRkaW5nOiAycHggNnB4Ow0KICBib3JkZXItcmFkaXVzOiA2cHg7DQogIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWxhYmVsLWdyYXkpOw0KICBmb250LXNpemU6IDAuOWVtOw0KfQ0KDQpib2R5LmRhcmstbW9kZSBtangtY29udGFpbmVyLA0KYm9keS5kYXJrLW1vZGUgLm1qeC1jb250YWluZXIsDQpib2R5LmRhcmstbW9kZSAuTWF0aEpheF9EaXNwbGF5LA0KYm9keS5kYXJrLW1vZGUgLk1hdGhKYXgsDQpib2R5LmRhcmstbW9kZSBzcGFuW2lkKj0nTWF0aEpheC1TcGFuJ10sDQpib2R5LmRhcmstbW9kZSBzcGFuW2lkKj0nTWF0aEpheC1TcGFuJ10gKiB7DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpICFpbXBvcnRhbnQ7DQp9DQoNCmJvZHkuZGFyay1tb2RlIG1qeC1jb250YWluZXIgc3ZnLA0KYm9keS5kYXJrLW1vZGUgLm1qeC1jb250YWluZXIgc3ZnLA0KYm9keS5kYXJrLW1vZGUgLk1hdGhKYXhfU1ZHIHN2ZywNCmJvZHkuZGFyay1tb2RlIC5NYXRoSmF4X1NWRyBzdmcgKiB7DQogIGZpbGw6IHZhcigtLXRleHQtYm9keSkgIWltcG9ydGFudDsNCiAgc3Ryb2tlOiB2YXIoLS10ZXh0LWJvZHkpICFpbXBvcnRhbnQ7DQogIGZpbHRlcjogbm9uZTsNCn0NCg0KLmNhcHRpb24sDQouZm9vdG5vdGVzLA0KLmZvb3Rub3RlIHsNCiAgZm9udC1zaXplOiAwLjgycmVtOw0KICBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7DQp9DQoNCmRldGFpbHMgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1kZXRhaWxzLWJnKTsNCiAgYm9yZGVyLXJhZGl1czogMTJweDsNCiAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLWxhYmVsLWdyYXkpOw0KICBwYWRkaW5nOiAwLjRyZW0gMC44cmVtOw0KICBtYXJnaW46IDAuOHJlbSAwOw0KfQ0KDQpzdW1tYXJ5IHsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQojc2lkZWJhci10b2dnbGUgew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIHRvcDogMTZweDsNCiAgbGVmdDogMjJweDsNCiAgd2lkdGg6IDUycHg7DQogIGhlaWdodDogMzZweDsNCiAgYm9yZGVyLXJhZGl1czogMTRweDsNCiAgYmFja2dyb3VuZDogdmFyKC0tc25vdy1mdXIpOw0KICBib3gtc2hhZG93OiB2YXIoLS10b2dnbGUtc2hhZG93KTsNCiAgZGlzcGxheTogZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIGN1cnNvcjogcG9pbnRlcjsNCiAgei1pbmRleDogOTk5OTsNCn0NCg0KI3NpZGViYXItdG9nZ2xlIHNwYW4sDQojc2lkZWJhci10b2dnbGUgc3Bhbjo6YmVmb3JlLA0KI3NpZGViYXItdG9nZ2xlIHNwYW46OmFmdGVyIHsNCiAgY29udGVudDogIiI7DQogIGRpc3BsYXk6IGJsb2NrOw0KICB3aWR0aDogMjZweDsNCiAgaGVpZ2h0OiAzcHg7DQogIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICBiYWNrZ3JvdW5kOiB2YXIoLS10ZXh0LWJvZHkpOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQp9DQoNCiNzaWRlYmFyLXRvZ2dsZSBzcGFuOjpiZWZvcmUgew0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHRvcDogLTZweDsNCn0NCg0KI3NpZGViYXItdG9nZ2xlIHNwYW46OmFmdGVyIHsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICB0b3A6IDZweDsNCn0NCg0KYm9keTpub3QoLnNpZGViYXItY29sbGFwc2VkKSAjc2lkZWJhci10b2dnbGUgew0KICBsZWZ0OiAzMTBweCAhaW1wb3J0YW50Ow0KfQ0KDQouYnRuLWdyb3VwLnB1bGwtcmlnaHQgPiAuYnRuLmJ0bi1kZWZhdWx0LmJ0bi14cy5kcm9wZG93bi10b2dnbGUgew0KICBiYWNrZ3JvdW5kOiB2YXIoLS1idG4tZXhwbG9yZSk7DQogIGNvbG9yOiB2YXIoLS1idG4tdGV4dCk7DQogIGJvcmRlcjogbm9uZTsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIHBhZGRpbmc6IDZweCAxNnB4Ow0KICBmb250LXNpemU6IDAuNzhyZW07DQogIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCn0NCg0KLmJ0bi1ncm91cC5wdWxsLXJpZ2h0ID4gLmJ0bi5idG4tZGVmYXVsdC5idG4teHMuZHJvcGRvd24tdG9nZ2xlIC5jYXJldCB7DQogIGJvcmRlci10b3AtY29sb3I6IHZhcigtLWJ0bi10ZXh0KTsNCn0NCg0KLmJ0bi1ncm91cC5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51IHsNCiAgYm9yZGVyLXJhZGl1czogMTRweDsNCiAgcGFkZGluZzogMC4yNXJlbSAwOw0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KfQ0KDQouYnRuLWV4cGxvcmUsDQouYnRuLXJlbGF4IHsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICBwYWRkaW5nOiAwLjU1cmVtIDEuMnJlbTsNCiAgYm9yZGVyLXJhZGl1czogOTk5cHg7DQogIGJvcmRlcjogbm9uZTsNCiAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsNCiAgY29sb3I6IHZhcigtLWJ0bi10ZXh0KTsNCiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctc29mdCk7DQp9DQoNCi5idG4tZXhwbG9yZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1leHBsb3JlKTsNCn0NCg0KLmJ0bi1yZWxheCB7DQogIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1yZWxheCk7DQp9DQoNCiNtb2RlLXRvZ2dsZSB7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgdG9wOiAxNnB4Ow0KICByaWdodDogMjZweDsNCiAgd2lkdGg6IDM4cHg7DQogIGhlaWdodDogMzhweDsNCiAgYm9yZGVyLXJhZGl1czogNTAlOw0KICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTsNCiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbGFiZWwtZ3JheSk7DQogIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1zb2Z0KTsNCiAgZGlzcGxheTogZmxleDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogIGdhcDogMDsNCiAgcGFkZGluZzogMDsNCiAgY3Vyc29yOiBwb2ludGVyOw0KICBsaW5lLWhlaWdodDogMDsNCiAgei1pbmRleDogOTk5OTsNCn0NCg0KI21vZGUtdG9nZ2xlIC5zdW4sDQojbW9kZS10b2dnbGUgLm1vb24gew0KICBmbGV4OiAwIDAgYXV0bzsNCiAgd2lkdGg6IDE4cHg7DQogIGhlaWdodDogMThweDsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQogIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICBtYXJnaW46IDA7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjsNCiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluOw0KICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tdG9nZ2xlLWljb24tc2hpZnQpKTsNCn0NCg0KI21vZGUtdG9nZ2xlIC5zdW4gew0KICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1pY29uLXN1bi1saWdodCk7DQp9DQoNCiNtb2RlLXRvZ2dsZSAubW9vbiB7DQogIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWljb24tbW9vbi1saWdodCk7DQp9DQoNCmJvZHk6bm90KC5kYXJrLW1vZGUpICNtb2RlLXRvZ2dsZSAuc3VuIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCg0KYm9keTpub3QoLmRhcmstbW9kZSkgI21vZGUtdG9nZ2xlIC5tb29uIHsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQp9DQoNCmJvZHkuZGFyay1tb2RlICNtb2RlLXRvZ2dsZSB7DQogIGJhY2tncm91bmQ6IHZhcigtLWNhcmQtYmcpOw0KICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1sYWJlbC1ncmF5KTsNCiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LXNvZnQpOw0KfQ0KDQpib2R5LmRhcmstbW9kZSAjbW9kZS10b2dnbGUgLnN1biB7DQogIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWljb24tc3VuLWRhcmspOw0KfQ0KDQpib2R5LmRhcmstbW9kZSAjbW9kZS10b2dnbGUgLm1vb24gew0KICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1pY29uLW1vb24tZGFyayk7DQp9DQoNCmJvZHkuZGFyay1tb2RlICNtb2RlLXRvZ2dsZSAuc3VuIHsNCiAgZGlzcGxheTogaW5saW5lLWZsZXg7DQp9DQoNCmJvZHkuZGFyay1tb2RlICNtb2RlLXRvZ2dsZSAubW9vbiB7DQogIGRpc3BsYXk6IG5vbmU7DQp9DQoNCmJvZHkuZGFyay1tb2RlIHsNCiAgY29sb3I6IHZhcigtLXRleHQtYm9keSk7DQogIC0tYmctbGVmdDogIzEyMTgyNjsNCiAgLS1iZy1yaWdodDogIzI0MzA0YTsNCiAgLS1jYXJkLWJnOiAjMWMyMzM4Ow0KICAtLXRleHQtdGl0bGU6ICNmZmZmZmY7DQogIC0tdGV4dC1ib2R5OiAjZmZmZmZmOw0KICAtLXRleHQtbXV0ZWQ6ICNmZmZmZmY7DQogIC0tbGFiZWwtZ3JheTogIzNhNDY1ZjsNCiAgLS1zbm93LWZ1cjogIzhhYTBmZjsNCiAgLS1lYXItcGluazogI2ZmOGZjNzsNCiAgLS1idG4tZXhwbG9yZTogIzVmYjJkNjsNCiAgLS1idG4tcmVsYXg6ICNjOThhYzc7DQogIC0tYWNjZW50LXN0YXI6ICMyYTMzNGQ7DQogIC0tc2hhZG93LXNvZnQ6IDAgMThweCAzNXB4IHJnYmEoNiwgMTAsIDIwLCAwLjQ1KTsNCiAgLS1zaGFkb3ctY2FyZDogMCA4cHggMThweCByZ2JhKDYsIDEwLCAyMCwgMC41NSk7DQogIC0tbGluay11bmRlcmxpbmU6IHJnYmEoOTUsIDE3OCwgMjE0LCAwLjcpOw0KICAtLWxpbmstaG92ZXItYmc6IHJnYmEoMjQyLCAxODIsIDIxMiwgMC4yKTsNCiAgLS1zaWRlYmFyLWJnOiByZ2JhKDI0LCAzMCwgNDksIDAuOTYpOw0KICAtLXNpZGViYXItYm9yZGVyOiByZ2JhKDU4LCA3MCwgOTUsIDAuOSk7DQogIC0tc2lkZWJhci1zaGFkb3c6IDEwcHggMCAyMnB4IHJnYmEoNiwgMTAsIDIwLCAwLjU1KTsNCiAgLS1zaWRlYmFyLXNoYWRvdy1vcGVuOiAxNHB4IDAgMjZweCByZ2JhKDYsIDEwLCAyMCwgMC42KTsNCiAgLS1zaWRlYmFyLWgyLXNoYWRvdzogMCA2cHggMTRweCByZ2JhKDYsIDEwLCAyMCwgMC41NSk7DQogIC0tc2VjdGlvbi10aXRsZS1zaGFkb3c6IDAgNnB4IDE0cHggcmdiYSg2LCAxMCwgMjAsIDAuNSk7DQogIC0tbG9nby1mcmFtZS1zaGFkb3c6IDAgMTJweCAyNnB4IHJnYmEoNiwgMTAsIDIwLCAwLjYpLCAwIDAgMCAzcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsNCiAgLS1sb2dvLXN0YXItc2hhZG93OiAwIDAgOHB4IHJnYmEoMjQyLCAxODIsIDIxMiwgMC41NSk7DQogIC0tbG9nby1kb3Qtc2hhZG93OiAwIDAgNnB4IHJnYmEoMjE0LCAyMjAsIDI1NSwgMC41NSk7DQogIC0tdGFibGUtZXZlbi1iZzogcmdiYSg0MiwgNTIsIDc5LCAwLjYpOw0KICAtLXRhYmxlLWhvdmVyLWJnOiByZ2JhKDI0MiwgMTgyLCAyMTIsIDAuMik7DQogIC0tY29kZS1pbmxpbmUtYmc6IHJnYmEoMjE0LCAyMjAsIDI1NSwgMC4yKTsNCiAgLS1jb2RlLWJsb2NrLWJnOiAjMTUxYjJjOw0KICAtLWRldGFpbHMtYmc6IHJnYmEoMjMsIDI5LCA0NSwgMC44NSk7DQogIC0tdG9nZ2xlLXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDYsIDEwLCAyMCwgMC41NSk7DQp9DQoNCmJvZHkuZGFyay1tb2RlIGEgew0KICBjb2xvcjogdmFyKC0tdGV4dC1ib2R5KTsNCiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsNCn0NCg0KYm9keS5kYXJrLW1vZGUgYTpob3ZlciB7DQogIGNvbG9yOiB2YXIoLS10ZXh0LWJvZHkpOw0KICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOw0KfQ0KDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgew0KICAqLA0KICAqOjpiZWZvcmUsDQogICo6OmFmdGVyIHsNCiAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsNCiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7DQogIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDExMDBweCkgew0KICBib2R5ICNjb250ZW50IHsNCiAgICBwYWRkaW5nOiAxLjhyZW0gMS4zcmVtIDIuNHJlbSAhaW1wb3J0YW50Ow0KICB9DQoNCiAgYm9keSAjbWFpbiB7DQogICAgbWFyZ2luOiAxLjZyZW0gYXV0byAyLjNyZW0gIWltcG9ydGFudDsNCiAgICBwYWRkaW5nOiAxLjZyZW0gMS4ycmVtIDJyZW0gIWltcG9ydGFudDsNCiAgICBib3JkZXItcmFkaXVzOiAxOHB4ICFpbXBvcnRhbnQ7DQogIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDgwMHB4KSB7DQogIGJvZHkgI2NvbnRlbnQgew0KICAgIHBhZGRpbmc6IDEuNHJlbSAwLjhyZW0gMnJlbSAhaW1wb3J0YW50Ow0KICB9DQoNCiAgYm9keSAjbWFpbiB7DQogICAgbWFyZ2luOiAxLjRyZW0gYXV0byAyLjFyZW0gIWltcG9ydGFudDsNCiAgICBwYWRkaW5nOiAxLjNyZW0gMC45cmVtIDEuOHJlbSAhaW1wb3J0YW50Ow0KICAgIGJvcmRlci1yYWRpdXM6IDE0cHggIWltcG9ydGFudDsNCiAgfQ0KDQogICNzaWRlYmFyLXRvZ2dsZSB7DQogICAgdG9wOiAxMHB4ICFpbXBvcnRhbnQ7DQogICAgbGVmdDogMTJweCAhaW1wb3J0YW50Ow0KICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7DQogIH0NCg0KICBib2R5Om5vdCguc2lkZWJhci1jb2xsYXBzZWQpICNzaWRlYmFyLXRvZ2dsZSB7DQogICAgbGVmdDogMTJweCAhaW1wb3J0YW50Ow0KICB9DQoNCiAgI21vZGUtdG9nZ2xlIHsNCiAgICB0b3A6IDEwcHggIWltcG9ydGFudDsNCiAgICByaWdodDogMTRweCAhaW1wb3J0YW50Ow0KICAgIHRyYW5zZm9ybTogc2NhbGUoMC45KTsNCiAgfQ0KDQogIC5idG4tZ3JvdXAucHVsbC1yaWdodCB7DQogICAgbWFyZ2luLXRvcDogNTJweDsNCiAgICBtYXJnaW4tcmlnaHQ6IDEycHg7DQogIH0NCg0KICAuaW5mby1iYWRnZXMgew0KICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgfQ0KDQogIC5iYWRnZS1jYXJkIHsNCiAgICBtaW4td2lkdGg6IDA7DQogICAgd2lkdGg6IDkwJTsNCiAgfQ0KDQogIC5sb2dvLWZyYW1lIHsNCiAgICB3aWR0aDogMTQwcHg7DQogICAgaGVpZ2h0OiAxNDBweDsNCiAgfQ0KDQogIC5sb2dvLWNhcHRpb24gew0KICAgIGZvbnQtc2l6ZTogMC44cmVtOw0KICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07DQogIH0NCn0NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDcwMHB4KSB7DQogICNtYWluIHRhYmxlIHsNCiAgICBkaXNwbGF5OiBibG9jazsNCiAgICBvdmVyZmxvdy14OiBhdXRvOw0KICB9DQoNCiAgI21haW4gdGgsDQogICNtYWluIHRkIHsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICB9DQoNCiAgI21haW4gaW1nIHsNCiAgICBtYXgtd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiBhdXRvOw0KICB9DQoNCiAgI21haW4gLk1hdGhKYXhfRGlzcGxheSwNCiAgI21haW4gLm1qeC1jb250YWluZXIgew0KICAgIG92ZXJmbG93LXg6IGF1dG87DQogICAgb3ZlcmZsb3cteTogaGlkZGVuOw0KICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkgew0KICBib2R5IHsNCiAgICAtLWNvbnRlbnQtdG9wOiA0LjJyZW07DQogIH0NCg0KICBib2R5ICNjb250ZW50IHsNCiAgICBwYWRkaW5nOiAxcmVtIDAuNnJlbSAxLjZyZW0gIWltcG9ydGFudDsNCiAgfQ0KDQogIGJvZHkgI21haW4gew0KICAgIG1hcmdpbjogMS4xcmVtIGF1dG8gMS42cmVtICFpbXBvcnRhbnQ7DQogICAgcGFkZGluZzogMS4xcmVtIDAuNzVyZW0gMS40cmVtICFpbXBvcnRhbnQ7DQogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50Ow0KICB9DQoNCiAgI3NpZGViYXIgew0KICAgIHdpZHRoOiA4NXZ3Ow0KICAgIG1heC13aWR0aDogMjQwcHg7DQogIH0NCg0KICAuaGVyby10aXRsZSB7DQogICAgZm9udC1zaXplOiBjbGFtcCgxLjRyZW0sIDZ2dywgMnJlbSk7DQogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsNCiAgfQ0KDQogIC5oZXJvLXN1YnRpdGxlIHsNCiAgICBmb250LXNpemU6IDAuOXJlbTsNCiAgfQ0KDQogIC5pbmZvLWJhZGdlcyB7DQogICAgZ2FwOiAwLjZyZW07DQogIH0NCg0KICAuYmFkZ2UtY2FyZCB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgcGFkZGluZzogMC42cmVtIDAuOXJlbTsNCiAgfQ0KDQogIC5sb2dvLWZyYW1lIHsNCiAgICB3aWR0aDogMTIwcHg7DQogICAgaGVpZ2h0OiAxMjBweDsNCiAgfQ0KDQogIC5sb2dvLWNhcHRpb24gew0KICAgIGZvbnQtc2l6ZTogMC43NXJlbTsNCiAgICBsZXR0ZXItc3BhY2luZzogMC4wNmVtOw0KICB9DQoNCiAgI21vZGUtdG9nZ2xlIHsNCiAgICB3aWR0aDogMzJweDsNCiAgICBoZWlnaHQ6IDMycHg7DQogICAgcGFkZGluZzogMDsNCiAgICAtLXRvZ2dsZS1pY29uLXNoaWZ0OiAwcHg7DQogIH0NCg0KICAjbW9kZS10b2dnbGUgLnN1biwNCiAgI21vZGUtdG9nZ2xlIC5tb29uIHsNCiAgICB3aWR0aDogMTZweDsNCiAgICBoZWlnaHQ6IDE2cHg7DQogIH0NCg0KICAjc2lkZWJhci10b2dnbGUgew0KICAgIHdpZHRoOiAzOHB4ICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiAyOHB4ICFpbXBvcnRhbnQ7DQogIH0NCg0KICAjc2lkZWJhci10b2dnbGUgc3BhbiwNCiAgI3NpZGViYXItdG9nZ2xlIHNwYW46OmJlZm9yZSwNCiAgI3NpZGViYXItdG9nZ2xlIHNwYW46OmFmdGVyIHsNCiAgICB3aWR0aDogMjJweDsNCiAgICBoZWlnaHQ6IDJweDsNCiAgfQ0KDQogICNzaWRlYmFyLXRvZ2dsZSBzcGFuOjpiZWZvcmUgew0KICAgIHRvcDogLTVweDsNCiAgfQ0KDQogICNzaWRlYmFyLXRvZ2dsZSBzcGFuOjphZnRlciB7DQogICAgdG9wOiA1cHg7DQogIH0NCn0NCg0KYm9keSAjY29udGVudCB7DQogIHBhZGRpbmctdG9wOiB2YXIoLS1jb250ZW50LXRvcCkgIWltcG9ydGFudDsNCn0NCg0KYm9keS5zaWRlYmFyLWNvbGxhcHNlZCAjc2lkZWJhciB7DQogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCn0NCg0KYm9keS5zaWRlYmFyLWNvbGxhcHNlZCAjY29udGVudCB7DQogIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KfQ0KDQoubG9nby13cmFwcGVyIHByZSwNCi5sb2dvLXdyYXBwZXIgY29kZSwNCi5sb2dvLXdyYXBwZXIgKyBwcmUsDQoubG9nby13cmFwcGVyICsgZGl2IHByZSwNCi5sb2dvLXdyYXBwZXIgKyBkaXYgY29kZSB7DQogIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsNCn0NCi8qIEZvdG8ga2FtdSBzZWJhZ2FpIGxpbmdrYXJhbiBkaSBkYWxhbSAqLw0KLmxvZ28tZnJhbWU6OmFmdGVyIHsNCiAgY29udGVudDogIiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiA4cHg7DQogIGxlZnQ6IDhweDsNCiAgcmlnaHQ6IDhweDsNCiAgYm90dG9tOiA4cHg7DQogIGJvcmRlci1yYWRpdXM6IDUwJTsNCiAgYmFja2dyb3VuZDoNCiAgICB1cmwoIkM6L1VzZXJzL051cnVsIElmZmFoL0Rvd25sb2Fkcy9mb3Rva3UuanBnIikgY2VudGVyIHRvcCAvIGNvdmVyIG5vLXJlcGVhdDsNCiAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjRmZjsNCn0NCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgIEJBQ0tHUk9VTkQgRlVMTCArIFNNT09USA0KICAgKGFudGkgcHV0dXMtcHV0dXMgLyB0aWxpbmcpDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQpodG1sLCBib2R5ew0KICBoZWlnaHQ6IDEwMCU7DQp9DQoNCg0KLyoga2FsYXUgbWFzaWggYWRhIGJhZ2lhbiB5YW5nIGtlbGlhdGFuIOKAnGtlcG90b25nIHB1dGlo4oCdDQogICAoY29udGFpbmVyIGJhd2FhbiB0aGVtZSkgKi8NCi5tYWluLWNvbnRhaW5lciwNCi5jb250YWluZXItZmx1aWQsDQoudG9jLWNvbnRlbnQsDQoucGFnZS13cmFwcGVyew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Ow0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgU0lERUJBUiBERUZBVUxUOiBDTE9TRUQNCiAgIChmaXgga2lyaSBrb3NvbmcpDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi8qIHNpZGViYXIgZGl0dXR1cCAoZ2VzZXIga2VsdWFyIGxheWFyLCBidWthbiBjdW1hIGRpc3BsYXkgbm9uZSkgKi8NCmJvZHkuc2lkZWJhci1jbG9zZWQgI1RPQywNCmJvZHkuc2lkZWJhci1jbG9zZWQgLnRvY2lmeXsNCiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMjAlKSAhaW1wb3J0YW50Ow0KICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7DQogIHZpc2liaWxpdHk6IGhpZGRlbiAhaW1wb3J0YW50Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50Ow0KICB0cmFuc2l0aW9uOiAuMjVzIGVhc2UgIWltcG9ydGFudDsNCn0NCg0KLyoga29udGVuIGJhbGlrIGZ1bGwga2Uga2lyaSAqLw0KYm9keS5zaWRlYmFyLWNsb3NlZCAudG9jLWNvbnRlbnR7DQogIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7DQogIHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50Ow0KICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCn0NCg0KLyoga2FkYW5nIHdyYXBwZXIgaWt1dCBuZ2FzaWggc3BhY2UgKi8NCmJvZHkuc2lkZWJhci1jbG9zZWQgLm1haW4tY29udGFpbmVyLA0KYm9keS5zaWRlYmFyLWNsb3NlZCAuY29udGFpbmVyLWZsdWlkew0KICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsNCn0NCg0KLyogb3B0aW9uYWw6IGJpYXIgc2FhdCBvcGVuIGFuaW1hc2lueWEgaGFsdXMgKi8NCiNUT0MsIC50b2NpZnksIC50b2MtY29udGVudHsNCiAgdHJhbnNpdGlvbjogLjI1cyBlYXNlOw0KfQ0KLyogPT09PT0gU0lERUJBUiBDTE9TRUQgKGRlZmF1bHQpID09PT09ICovDQpib2R5LnNpZGViYXItY29sbGFwc2VkICNUT0MsDQpib2R5LnNpZGViYXItY29sbGFwc2VkIC50b2NpZnksDQpib2R5LnNpZGViYXItY29sbGFwc2VkICNzaWRlYmFyew0KICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQp9DQoNCi8qIGtvbnRlbiBmdWxsIGxlYmFyLCBubyBzaXNhIHNwYWNlIGtpcmkgKi8NCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgLnRvYy1jb250ZW50ew0KICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50Ow0KICBwYWRkaW5nLWxlZnQ6IDAgIWltcG9ydGFudDsNCiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQp9DQoNCi8qIGthZGFuZyBrb2xvbSBib290c3RyYXAgbWFzaWggbmd1bmNpIGxlYmFyICovDQpib2R5LnNpZGViYXItY29sbGFwc2VkIC5jb2wtc20tOSwNCmJvZHkuc2lkZWJhci1jb2xsYXBzZWQgLmNvbC1tZC05LA0KYm9keS5zaWRlYmFyLWNvbGxhcHNlZCAuY29sLWxnLTl7DQogIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7DQogIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICBmbGV4OiAwIDAgMTAwJSAhaW1wb3J0YW50Ow0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgU05PV0JBTEwgQkFDS0dST1VORCAoRlVMTCArIE1JUklQIEZPVE8pDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovDQoNCi8qIDEpIFRhbWJhaGluIHZhcmlhYmVsIGluaSBkaSA6cm9vdCAoYmlhciB2YXIoLS1iZzEpIGRzdCBiZW5lcikgKi8NCjpyb290ew0KICAtLWJnMTogI0Y2RjVGNTsgICAvKiBwdXRpaCBzb2Z0ICovDQogIC0tYmcyOiAjRjdGMUYwOyAgIC8qIHdhcm0gbWlzdCAqLw0KICAtLWJnMzogI0U1Q0NDQzsgICAvKiBwaW5rIGJhd2FoICovDQogIC0tYmc0OiAjREVCRUJEOyAgIC8qIHBpbmsgbGViaWggdGVnYXMgKHBvam9rIGthbmFuIGJhd2FoKSAqLw0KfQ0KDQovKiAyKSBCYWNrZ3JvdW5kIGRpcGFzYW5nIGtlIFNFTVVBIHJvb3QgbGF5ZXIgKGJpYXIgZ2Ega2Vwb3RvbmcpICovDQpodG1sLA0KYm9keSwNCiNwYWdlLA0KLmNvbnRhaW5lci1mbHVpZC5tYWluLWNvbnRhaW5lciwNCmJvZHkgPiAuY29udGFpbmVyLWZsdWlkew0KICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50Ow0KICBtYXJnaW46IDAgIWltcG9ydGFudDsNCg0KICBiYWNrZ3JvdW5kOg0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTglIDAlLA0KICAgICAgI0ZGRkZGRiAwJSwNCiAgICAgIHZhcigtLWJnMikgMzglLA0KICAgICAgcmdiYSgyNDcsMjQxLDI0MCwwKSA3MiUNCiAgICApLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODUlIDIwJSwNCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMC41NSkgMCUsICAgLyogZWFyLXBpbmsgbGVtYnV0ICovDQogICAgICByZ2JhKDI1NSwyMjEsMjI2LDApIDYwJQ0KICAgICksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MCUgODglLA0KICAgICAgcmdiYSgyMjIsMTkwLDE4OSwwLjg1KSAwJSwgICAvKiByb3NlIGJhd2FoICovDQogICAgICByZ2JhKDIyMiwxOTAsMTg5LDApIDYyJQ0KICAgICksDQogICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywNCiAgICAgIHZhcigtLWJnMSkgMCUsDQogICAgICB2YXIoLS1iZzIpIDQ1JSwNCiAgICAgIHZhcigtLWJnMykgNzglLA0KICAgICAgdmFyKC0tYmc0KSAxMDAlDQogICAgKSBmaXhlZCAhaW1wb3J0YW50Ow0KDQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQgIWltcG9ydGFudDsNCiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlciAhaW1wb3J0YW50Ow0KICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGZpeGVkICFpbXBvcnRhbnQ7DQp9DQoNCi8qIDMpIFdyYXBwZXIgZGFsYW1ueWEgd2FqaWIgdHJhbnNwYXJhbiAoYmlhciBnYSDigJxrZXR1dHVwIHB1dGlo4oCdKSAqLw0KLm1haW4tY29udGFpbmVyLA0KLmNvbnRhaW5lci1mbHVpZCwNCi50b2MtY29udGVudCwNCi5wYWdlLXdyYXBwZXIsDQoucGFnZS1pbm5lciwNCi5yb3ctZmx1aWR7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgRklYOiBCQUdJQU4gQVRBUyBQVVRJSCAoV1JBUFBFUiBOVVRVUElOIEJHKQ0KICAgQkFDS0dST1VORCBGVUxMIDEwMCUgVklFV1BPUlQgKEFOVEkgUFVUVVMpDQogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8NCg0KLyogMSkgTWF0aWthbiBiYWNrZ3JvdW5kIHB1dGloIGJhd2FhbiB3cmFwcGVyICovDQojcGFnZSwNCiNjb250ZW50LA0KLnRvYy1jb250ZW50LA0KLmNvbnRhaW5lci1mbHVpZCwNCi5jb250YWluZXItZmx1aWQubWFpbi1jb250YWluZXIsDQpib2R5ID4gLmNvbnRhaW5lci1mbHVpZCwNCi5yb3ctZmx1aWQsDQoucGFnZS13cmFwcGVyLA0KLnBhZ2UtaW5uZXJ7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCi8qIDIpIFBha3NhIDEgbGF5ZXIgYmFja2dyb3VuZCBuZW1wZWwga2UgbGF5YXIgKi8NCmh0bWwsIGJvZHl7DQogIG1pbi1oZWlnaHQ6IDEwMHZoICFpbXBvcnRhbnQ7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCmJvZHk6OmJlZm9yZXsNCiAgY29udGVudDoiIjsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBpbnNldDogMDsNCiAgei1pbmRleDogLTk5OTk7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KDQogIC8qIEJhY2tncm91bmQgbWlyaXAgZm90byBTbm93YmFsbCAoc29mdCBwdXRpaCAtPiBwaW5rIGJhd2FoKSAqLw0KICBiYWNrZ3JvdW5kOg0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTglIDAlLA0KICAgICAgI0ZGRkZGRiAwJSwNCiAgICAgICNGNkYzRjMgNDAlLA0KICAgICAgcmdiYSgyNDYsMjQzLDI0MywwKSA3MiUNCiAgICApLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODUlIDIwJSwNCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMC41NSkgMCUsICAgLyogYmx1c2ggKi8NCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMCkgNjAlDQogICAgKSwNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDgwJSA4OCUsDQogICAgICByZ2JhKDIxNSwxODIsMTgxLDAuODUpIDAlLCAgIC8qIHBpbmtfZCAqLw0KICAgICAgcmdiYSgyMTUsMTgyLDE4MSwwKSA2MiUNCiAgICApLA0KICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsDQogICAgICAjRkZGRkZGIDAlLA0KICAgICAgI0Y3RjFGMCA0NSUsDQogICAgICAjRTVDQ0NDIDc4JSwNCiAgICAgICNEN0I2QjUgMTAwJQ0KICAgICk7DQogIGJhY2tncm91bmQtc2l6ZTogY292ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQoNCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgU09GVCBCTFVSIEJBQ0tHUk9VTkQgKyBHTEFTUyBDQVJEUyAoU05PV0JBTEwgVklCRSkNCiAgIFRlbXBlbCBQQUxJTkcgQkFXQUggQ1NTIGthbXUNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQovKiAxKSBCYWNrZ3JvdW5kIGJsdXIgYWxhIHNjcmVlbnNob3QgKi8NCmh0bWwsIGJvZHkgeyBtaW4taGVpZ2h0OiAxMDB2aDsgfQ0KDQpib2R5ew0KICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyAvKiBiaWFyIHlhbmcga2VyamEgYm9keTo6YmVmb3JlICovDQp9DQoNCmJvZHk6OmJlZm9yZXsNCiAgY29udGVudDoiIjsNCiAgcG9zaXRpb246IGZpeGVkOw0KICBpbnNldDogLTQwcHg7ICAgICAgICAgICAgICAgLyogYmlhciBibHVyIGdhIGtlcG90b25nIHBpbmdnaXIgKi8NCiAgei1pbmRleDogLTk5OTk7DQogIHBvaW50ZXItZXZlbnRzOiBub25lOw0KDQogIC8qIGJsb2ItYmx1ciBwYWthaSB3YXJuYSBDU1Mga2FtdSAqLw0KICBiYWNrZ3JvdW5kOg0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTglIDglLA0KICAgICAgcmdiYSgyNTUsMjU1LDI1NSwwLjk1KSAwJSwNCiAgICAgIHJnYmEoMjU1LDI1NSwyNTUsMC43MCkgMzUlLA0KICAgICAgcmdiYSgyNTUsMjU1LDI1NSwwKSA3MCUNCiAgICApLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODglIDEyJSwNCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMC42NSkgMCUsDQogICAgICByZ2JhKDI1NSwyMjEsMjI2LDApIDYyJQ0KICAgICksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgODglLA0KICAgICAgcmdiYSgyMTQsMTkzLDE5MywwLjcwKSAwJSwNCiAgICAgIHJnYmEoMjE0LDE5MywxOTMsMCkgNjAlDQogICAgKSwNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDEyJSA5MiUsDQogICAgICByZ2JhKDI0OCwyNDksMTg2LDAuNTUpIDAlLA0KICAgICAgcmdiYSgyNDgsMjQ5LDE4NiwwKSA2MiUNCiAgICApLA0KICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsDQogICAgICByZ2JhKDI1NSwyNTUsMjU1LDEpIDAlLA0KICAgICAgcmdiYSgyNDcsMjQxLDI0MCwxKSA0NSUsDQogICAgICByZ2JhKDIyOSwyMDQsMjA0LDEpIDc4JSwNCiAgICAgIHJnYmEoMjE0LDE5MywxOTMsMSkgMTAwJQ0KICAgICk7DQoNCiAgZmlsdGVyOiBibHVyKDIycHgpIHNhdHVyYXRlKDExNSUpOw0KICBvcGFjaXR5OiAwLjk1Ow0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMDYpOw0KfQ0KDQovKiAyKSBQYXN0aWthbiB3cmFwcGVyIG5nZ2FrIG51dHVwaW4gYmFja2dyb3VuZCAqLw0KI3BhZ2UsICNjb250ZW50LCAudG9jLWNvbnRlbnQsDQouY29udGFpbmVyLWZsdWlkLCAuY29udGFpbmVyLWZsdWlkLm1haW4tY29udGFpbmVyLA0KYm9keSA+IC5jb250YWluZXItZmx1aWQsIC5yb3ctZmx1aWQsDQoucGFnZS13cmFwcGVyLCAucGFnZS1pbm5lcnsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsNCn0NCg0KLyogMykgQ2FyZC9zZWN0aW9uIGphZGkg4oCcZ2xhc3N54oCdIChuZ2dhayBuZ2VibG9rKSAqLw0KI21haW4gLnNlY3Rpb24ubGV2ZWwyew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIG92ZXJmbG93OiBoaWRkZW47DQoNCiAgLyogZ2xhc3MgKi8NCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjYyKSAhaW1wb3J0YW50Ow0KICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTRweCk7DQogIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDE0cHgpOw0KDQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjI2LDIyOSwyMzMsMC43NSkgIWltcG9ydGFudDsNCiAgYm94LXNoYWRvdzogMCAxOHB4IDM1cHggcmdiYSgxMzksMTE0LDExNCwwLjEyKSAhaW1wb3J0YW50Ow0KDQogIC8qIGRlZmF1bHQgYWNjZW50IGthbGF1IGJlbHVtIGRpLXNldCBwZXIgY2FzZSAqLw0KICAtLWNhc2UtYWNjZW50OiByZ2JhKDI1NSwyMjEsMjI2LDAuODUpOw0KICAtLWNhc2UtYmxvYjogcmdiYSgyNTUsMjIxLDIyNiwwLjI4KTsNCg0KICBib3JkZXItbGVmdDogNnB4IHNvbGlkIHZhcigtLWNhc2UtYWNjZW50KSAhaW1wb3J0YW50Ow0KfQ0KDQovKiBibG9iIGJsdXIga2VjaWwgZGkgZGFsYW0gY2FyZCAoYmlraW4gc29mdCBrYXlhIFNTKSAqLw0KI21haW4gLnNlY3Rpb24ubGV2ZWwyOjpiZWZvcmV7DQogIGNvbnRlbnQ6IiI7DQogIHBvc2l0aW9uOmFic29sdXRlOw0KICBpbnNldDogLTYwcHggLTgwcHggYXV0byBhdXRvOw0KICB3aWR0aDogMjYwcHg7DQogIGhlaWdodDogMjYwcHg7DQogIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlLA0KICAgIHZhcigtLWNhc2UtYmxvYikgMCUsDQogICAgcmdiYSgyNTUsMjU1LDI1NSwwKSA2NSUNCiAgKTsNCiAgZmlsdGVyOiBibHVyKDE4cHgpOw0KICBvcGFjaXR5OiAwLjk7DQp9DQoNCi8qIDQpIFdhcm5hIGJlZGEgdGlhcCBDQVNFICh0ZXRlcCBzb2Z0ICYgYmx1cikgKi8NCi8qIENhc2UgMSA9IGJ1dHRlciAqLw0KI2Nhc2UxLnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS0xLnNlY3Rpb24ubGV2ZWwyew0KICAtLWNhc2UtYWNjZW50OiByZ2JhKDI0OCwyNDksMTg2LDAuOTUpOw0KICAtLWNhc2UtYmxvYjogcmdiYSgyNDgsMjQ5LDE4NiwwLjMwKTsNCn0NCi8qIENhc2UgMiA9IGJsdXNoICovDQojY2FzZTIuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTIuc2VjdGlvbi5sZXZlbDJ7DQogIC0tY2FzZS1hY2NlbnQ6IHJnYmEoMjU1LDIyMSwyMjYsMC45NSk7DQogIC0tY2FzZS1ibG9iOiByZ2JhKDI1NSwyMjEsMjI2LDAuMzApOw0KfQ0KLyogQ2FzZSAzID0gbWlzdCAqLw0KI2Nhc2UzLnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS0zLnNlY3Rpb24ubGV2ZWwyew0KICAtLWNhc2UtYWNjZW50OiByZ2JhKDIyNiwyMjksMjMzLDAuOTUpOw0KICAtLWNhc2UtYmxvYjogcmdiYSgyMjYsMjI5LDIzMywwLjM1KTsNCn0NCi8qIENhc2UgNCA9IG1pbnQvdGVhbCAqLw0KI2Nhc2U0LnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS00LnNlY3Rpb24ubGV2ZWwyew0KICAtLWNhc2UtYWNjZW50OiByZ2JhKDE0MywxODYsMTc3LDAuOTUpOw0KICAtLWNhc2UtYmxvYjogcmdiYSgxNDMsMTg2LDE3NywwLjI2KTsNCn0NCi8qIENhc2UgNSA9IGR1c3R5IHBpbmsgKi8NCiNjYXNlNS5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktNS5zZWN0aW9uLmxldmVsMnsNCiAgLS1jYXNlLWFjY2VudDogcmdiYSgyMTQsMTY5LDE3MCwwLjk1KTsNCiAgLS1jYXNlLWJsb2I6IHJnYmEoMjE0LDE2OSwxNzAsMC4yNik7DQp9DQoNCi8qIDUpIERhcmsgbW9kZTogdGV0YXAgYmx1ciB0YXBpIGxlYmloIOKAnG1hbGVt4oCdICovDQpib2R5LmRhcmstbW9kZTo6YmVmb3Jlew0KICBvcGFjaXR5OiAwLjc1Ow0KICBmaWx0ZXI6IGJsdXIoMjRweCkgc2F0dXJhdGUoMTIwJSk7DQp9DQpib2R5LmRhcmstbW9kZSAjbWFpbiAuc2VjdGlvbi5sZXZlbDJ7DQogIGJhY2tncm91bmQ6IHJnYmEoMjgsMzUsNTYsMC42MikgIWltcG9ydGFudDsgIC8qIGdsYXNzIGdlbGFwICovDQogIGJvcmRlci1jb2xvcjogcmdiYSg1OCw3MCw5NSwwLjg1KSAhaW1wb3J0YW50Ow0KfQ0KLyogPT09PT0gT1ZFUlJJREU6IGxlYmloIEJMVVIgKyBsZWJpaCBzZWRpa2l0IHB1dGloID09PT09ICovDQpib2R5OjpiZWZvcmV7DQogIGNvbnRlbnQ6IiI7DQogIHBvc2l0aW9uOiBmaXhlZDsNCiAgaW5zZXQ6IC04MHB4OyAgICAgICAgICAgICAgICAgLyogYmlhciBibHVyIGdhIGtlcG90b25nICovDQogIHotaW5kZXg6IC05OTk5Ow0KICBwb2ludGVyLWV2ZW50czogbm9uZTsNCg0KICBiYWNrZ3JvdW5kOg0KICAgIC8qIGt1cmFuZ2kgcHV0aWg6IGdhbnRpIGphZGkg4oCcc29mdCBtaXN04oCdIGRhbiBiaWtpbiBsZWJpaCB0aXBpcyAqLw0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTglIDglLA0KICAgICAgcmdiYSgyNDcsMjQxLDI0MCwwLjcwKSAwJSwNCiAgICAgIHJnYmEoMjQ3LDI0MSwyNDAsMC4zMCkgMjglLA0KICAgICAgcmdiYSgyNDcsMjQxLDI0MCwwKSA1NSUNCiAgICApLA0KDQogICAgLyogYmx1c2gga2FuYW4gYXRhcyAoZGlidWF0IGxlYmloIGt1YXQpICovDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgMTIlLA0KICAgICAgcmdiYSgyNTUsMjIxLDIyNiwwLjk1KSAwJSwNCiAgICAgIHJnYmEoMjU1LDIyMSwyMjYsMCkgNTglDQogICAgKSwNCg0KICAgIC8qIHBpbmsgYmF3YWgga2FuYW4gKGxlYmloIHRlZ2FzKSAqLw0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzglIDg4JSwNCiAgICAgIHJnYmEoMjE0LDE5MywxOTMsMC45NSkgMCUsDQogICAgICByZ2JhKDIxNCwxOTMsMTkzLDApIDU4JQ0KICAgICksDQoNCiAgICAvKiBidXR0ZXIgYmF3YWgga2lyaSAobGViaWgga2VsaWhhdGFuKSAqLw0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTIlIDkyJSwNCiAgICAgIHJnYmEoMjQ4LDI0OSwxODYsMC43OCkgMCUsDQogICAgICByZ2JhKDI0OCwyNDksMTg2LDApIDYwJQ0KICAgICksDQoNCiAgICAvKiBiYXNlIGdyYWRpZW50IChsZWJpaCBwaW5rLCBrdXJhbmcgcHV0aWgpICovDQogICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywNCiAgICAgICNGN0YxRjAgMCUsDQogICAgICAjRjNFOEU4IDM4JSwNCiAgICAgICNFNUNDQ0MgNzUlLA0KICAgICAgI0Q2QzFDMSAxMDAlDQogICAgKTsNCg0KICAvKiBCTFVSIE5BSUsgKyB3YXJuYSBsZWJpaCDigJxuZW1wZWzigJ0gKi8NCiAgZmlsdGVyOiBibHVyKDQwcHgpIHNhdHVyYXRlKDEzNSUpIGNvbnRyYXN0KDEwMiUpOw0KICBvcGFjaXR5OiAxOw0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMTApOw0KfQ0KLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICBDQVNFIENBUkRTIOKAlCBCTFVSIFBBU1RFTCAoTk8gQkxPSykNCiAgIHRlbXBlbCBQQUxJTkcgQkFXQUgNCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLw0KDQojbWFpbiAuc2VjdGlvbi5sZXZlbDJ7DQogIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgaXNvbGF0aW9uOiBpc29sYXRlOw0KDQogIC8qIOKAnGthY2HigJ0gcHV0aWggdGlwaXMgYmlhciBsZW1idXQsIGJ1a2FuIGJsb2sgKi8NCiAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjU4KSAhaW1wb3J0YW50Ow0KICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIyNiwyMjksMjMzLDAuNzUpICFpbXBvcnRhbnQ7DQogIGJvcmRlci1sZWZ0OiA2cHggc29saWQgdmFyKC0tZWFyLXBpbmspICFpbXBvcnRhbnQ7DQoNCiAgLyogZWZlayBnbGFzcyAqLw0KICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7DQogIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOw0KfQ0KDQojbWFpbiAuc2VjdGlvbi5sZXZlbDIgPiAqew0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIHotaW5kZXg6IDE7DQp9DQoNCi8qIGxheWVyIGJsdXIgd2FybmEgZGkgYmVsYWthbmcga29udGVuICovDQojbWFpbiAuc2VjdGlvbi5sZXZlbDI6OmJlZm9yZXsNCiAgY29udGVudDoiIjsNCiAgcG9zaXRpb246YWJzb2x1dGU7DQogIGluc2V0OiAtNzBweDsgICAgICAgICAgICAgICAgICAvKiBiaWFyIGJsdXIgZ2Ega2Vwb3RvbmcgKi8NCiAgei1pbmRleDogMDsNCiAgYmFja2dyb3VuZDoNCiAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDEyJSAxOCUsIHZhcigtLWNhc2VBKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA2MiUpLA0KICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODglIDIwJSwgdmFyKC0tY2FzZUIpIDAlLCByZ2JhKDI1NSwyNTUsMjU1LDApIDYyJSksDQogICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3MCUgOTIlLCB2YXIoLS1jYXNlQykgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMCkgNjYlKTsNCiAgZmlsdGVyOiBibHVyKDQ2cHgpIHNhdHVyYXRlKDE0MCUpOw0KICBvcGFjaXR5OiAwLjk1Ow0KICB0cmFuc2Zvcm06IHNjYWxlKDEuMTUpOw0KfQ0KDQovKiA9PT09PSBXQVJOQSBQRVIgQ0FTRSAocGFrYWkgcGFsZXQga2FtdSkgPT09PT0gKi8NCiNtYWluIC5zZWN0aW9uLmxldmVsMjpoYXMoPiAjY2FzZTEpeyAtLWNhc2VBOiByZ2JhKDI0OCwyNDksMTg2LDAuOTUpOyAtLWNhc2VCOiByZ2JhKDE0MywxODYsMTc3LDAuNTUpOyAtLWNhc2VDOiByZ2JhKDI1NSwyMjEsMjI2LDAuNTUpOyBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tc25vdy1mdXIpICFpbXBvcnRhbnQ7IH0NCiNtYWluIC5zZWN0aW9uLmxldmVsMjpoYXMoPiAjY2FzZTIpeyAtLWNhc2VBOiByZ2JhKDI1NSwyMjEsMjI2LDAuOTUpOyAtLWNhc2VCOiByZ2JhKDIyNiwyMjksMjMzLDAuNjUpOyAtLWNhc2VDOiByZ2JhKDI0OCwyNDksMTg2LDAuNTUpOyBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tZWFyLXBpbmspICFpbXBvcnRhbnQ7IH0NCiNtYWluIC5zZWN0aW9uLmxldmVsMjpoYXMoPiAjY2FzZTMpeyAtLWNhc2VBOiByZ2JhKDIyNiwyMjksMjMzLDAuODUpOyAtLWNhc2VCOiByZ2JhKDE0MywxODYsMTc3LDAuNTUpOyAtLWNhc2VDOiByZ2JhKDI1NSwyMjEsMjI2LDAuNTUpOyBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tbGFiZWwtZ3JheSkgIWltcG9ydGFudDsgfQ0KI21haW4gLnNlY3Rpb24ubGV2ZWwyOmhhcyg+ICNjYXNlNCl7IC0tY2FzZUE6IHJnYmEoMTQzLDE4NiwxNzcsMC43NSk7IC0tY2FzZUI6IHJnYmEoMjQ4LDI0OSwxODYsMC41NSk7IC0tY2FzZUM6IHJnYmEoMjI2LDIyOSwyMzMsMC41NSk7IGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1idG4tZXhwbG9yZSkgIWltcG9ydGFudDsgfQ0KI21haW4gLnNlY3Rpb24ubGV2ZWwyOmhhcyg+ICNjYXNlNSl7IC0tY2FzZUE6IHJnYmEoMjE0LDE2OSwxNzAsMC43NSk7IC0tY2FzZUI6IHJnYmEoMjU1LDIyMSwyMjYsMC42NSk7IC0tY2FzZUM6IHJnYmEoMjI2LDIyOSwyMzMsMC41NSk7IGJvcmRlci1sZWZ0LWNvbG9yOiB2YXIoLS1idG4tcmVsYXgpICFpbXBvcnRhbnQ7IH0NCg0KDQo8L3N0eWxlPg0KYGBgez1odG1sfQ0KPGRpdiBpZD0ic2lkZWJhci10b2dnbGUiPg0KICA8c3Bhbj48L3NwYW4+DQo8L2Rpdj4NCjxkaXYgaWQ9Im1vZGUtdG9nZ2xlIiB0aXRsZT0iVG9nZ2xlIGxpZ2h0IC8gZGFyayI+DQogIDxzcGFuIGNsYXNzPSJzdW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+DQogIDxzcGFuIGNsYXNzPSJtb29uIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPg0KPC9kaXY+DQoNCjxkaXYgY2xhc3M9ImxvZ28td3JhcHBlciI+DQogIDxkaXYgY2xhc3M9ImxvZ28tZnJhbWUiPg0KICAgIDxkaXYgY2xhc3M9ImxvZ28taW5uZXIiPg0KICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1waG90byBuby1saWdodGJveCIgc3JjPSJmb3Rva3UuanBnIiBhbHQ9Ik51cnVsIElmZmFoIj4NCiAgICA8L2Rpdj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9ImxvZ28tY2FwdGlvbiI+TlVSVUwgSUZGQUg8L2Rpdj4NCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJpbmZvLWJhZGdlcyI+DQogIDxkaXYgY2xhc3M9ImJhZGdlLWNhcmQgYmFkZ2UtcHJpbWFyeSI+DQogICAgPHNwYW4gY2xhc3M9ImJhZGdlLWxhYmVsIj5Qcm9ncmFtIFN0dWRpPC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+U2FpbnMgRGF0YTwvc3Bhbj4NCiAgPC9kaXY+DQogIDxkaXYgY2xhc3M9ImJhZGdlLWNhcmQgYmFkZ2Utc2Vjb25kYXJ5Ij4NCiAgICA8c3BhbiBjbGFzcz0iYmFkZ2UtbGFiZWwiPlVuaXZlcnNpdGFzPC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+SU5TVElUVVQgVEVLTk9MT0dJIFNBSU5TIEJBTkRVTkc8L3NwYW4+DQogIDwvZGl2Pg0KICA8ZGl2IGNsYXNzPSJiYWRnZS1jYXJkIGJhZGdlLXRlcnRpYXJ5Ij4NCiAgICA8c3BhbiBjbGFzcz0iYmFkZ2UtbGFiZWwiPkRvc2VuIFBlbmdhbXB1PC9zcGFuPg0KICAgIDxzcGFuIGNsYXNzPSJiYWRnZS12YWx1ZSI+QmFrdGkgU2lyZWdhciwgTSBTYy4sIENTRDwvc3Bhbj4NCiAgPC9kaXY+DQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iaGVyby10aXRsZSI+U1RVRFkgQ0FTRVM8L2Rpdj4NCjxkaXYgY2xhc3M9Imhlcm8tc3VidGl0bGUiPkNvbmZpZGVuY2UgSW50ZXJ2YWwgLSBXZWVrIDEzPC9kaXY+DQoNCjxzY3JpcHQ+DQpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oKSB7DQogIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTsNCg0KICAvKiA9PT09PSBTSURFQkFSOiBkZWZhdWx0IENMT1NFRCA9PT09PSAqLw0KICB2YXIgc2F2ZWRTaWRlYmFyID0gbnVsbDsNCiAgdHJ5IHsNCiAgICBzYXZlZFNpZGViYXIgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3V0ZS10aGVtZS1zaWRlYmFyIik7IC8vICJvcGVuIiAvICJjbG9zZWQiDQogIH0gY2F0Y2ggKGUpIHt9DQoNCiAgLy8gZGVmYXVsdCBrZXR1dHVwLCBrZWN1YWxpIHVzZXIgcGVybmFoIG55aW1wZW4gIm9wZW4iDQogIGlmIChzYXZlZFNpZGViYXIgPT09ICJvcGVuIikgew0KICAgIGJvZHkuY2xhc3NMaXN0LnJlbW92ZSgic2lkZWJhci1jb2xsYXBzZWQiKTsNCiAgfSBlbHNlIHsNCiAgICBib2R5LmNsYXNzTGlzdC5hZGQoInNpZGViYXItY29sbGFwc2VkIik7DQogIH0NCg0KICB2YXIgbWVudUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaWRlYmFyLXRvZ2dsZSIpOw0KICBpZiAobWVudUJ0bikgew0KICAgIG1lbnVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICAgIGJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgic2lkZWJhci1jb2xsYXBzZWQiKTsNCiAgICAgIHRyeSB7DQogICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKA0KICAgICAgICAgICJjdXRlLXRoZW1lLXNpZGViYXIiLA0KICAgICAgICAgIGJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCJzaWRlYmFyLWNvbGxhcHNlZCIpID8gImNsb3NlZCIgOiAib3BlbiINCiAgICAgICAgKTsNCiAgICAgIH0gY2F0Y2ggKGUpIHt9DQogICAgfSk7DQogIH0NCg0KICAvKiA9PT09PSBEQVJLIE1PREU6IGtlZXAgcHVueWFtdSA9PT09PSAqLw0KICB2YXIgbW9kZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtb2RlLXRvZ2dsZSIpOw0KICBpZiAobW9kZUJ0bikgew0KICAgIHZhciBzYXZlZE1vZGUgPSBudWxsOw0KICAgIHRyeSB7DQogICAgICBzYXZlZE1vZGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiY3V0ZS10aGVtZS1tb2RlIik7DQogICAgfSBjYXRjaCAoZSkge30NCg0KICAgIGlmIChzYXZlZE1vZGUgPT09ICJkYXJrIikgYm9keS5jbGFzc0xpc3QuYWRkKCJkYXJrLW1vZGUiKTsNCg0KICAgIG1vZGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsNCiAgICAgIGJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiZGFyay1tb2RlIik7DQogICAgICB0cnkgew0KICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgNCiAgICAgICAgICAiY3V0ZS10aGVtZS1tb2RlIiwNCiAgICAgICAgICBib2R5LmNsYXNzTGlzdC5jb250YWlucygiZGFyay1tb2RlIikgPyAiZGFyayIgOiAibGlnaHQiDQogICAgICAgICk7DQogICAgICB9IGNhdGNoIChlKSB7fQ0KICAgIH0pOw0KICB9DQp9KTsNCjwvc2NyaXB0Pg0KPHN0eWxlPg0KLyogPT09PT09IEEpIEJBQ0tHUk9VTkQgRlVMTCAobWlyaXAgZ2FtYmFyIFNub3diYWxsKSA9PT09PT0gKi8NCjpyb290ew0KICAtLWJnMTojZjlmOWY5OyAgIC8qIGF0YXMga2lyaSAqLw0KICAtLWJnMjojZjdmMWYwOyAgIC8qIHRyYW5zaXNpICovDQogIC0tYmczOiNlNGM5Yzg7ICAgLyogcGluayBsZW1idXQgKi8NCiAgLS1iZzQ6I2NiYWVhZTsgICAvKiBiYXdhaCBrYW5hbiAqLw0KfQ0KDQpodG1sLCBib2R5ew0KICBtaW4taGVpZ2h0OjEwMCU7DQogIG1hcmdpbjowOw0KICBwYWRkaW5nOjA7DQp9DQoNCmJvZHl7DQogIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTUlIDAlLA0KICAgIHZhcigtLWJnMSkgMCUsDQogICAgdmFyKC0tYmcyKSA0NSUsDQogICAgdmFyKC0tYmczKSA3OCUsDQogICAgdmFyKC0tYmc0KSAxMDAlDQogICkgZml4ZWQgIWltcG9ydGFudDsNCn0NCg0KLyogd3JhcHBlciByZWFkdGhlZG93biBzZXJpbmcg4oCcbnV0dXDigJ0gYmFja2dyb3VuZCAqLw0KI3BhZ2UsICNjb250ZW50LA0KLmNvbnRhaW5lci1mbHVpZC5tYWluLWNvbnRhaW5lciwNCmJvZHkgPiAuY29udGFpbmVyLWZsdWlkLA0KLnBhZ2UtaW5uZXIsIC5yb3ctZmx1aWQsDQoudG9jaWZ5LCAudG9jLWNvbnRlbnR7DQogIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7DQp9DQoNCi8qID09PT09PSBCKSBXQVJOQSBDQVJEIFRJQVAgQ0FTRSAoQ2FzZSAxIGJlZGEgc2VuZGlyaSwgZHN0KSA9PT09PT0NCiAgIENBVEFUQU46DQogICAtIERlZmF1bHQgaWQgZGFyaSAiIyMgQ2FzZSBTdHVkeSAxIiBiaWFzYW55YTogI2Nhc2Utc3R1ZHktMQ0KICAgLSBLYWxhdSBrYW11IHBha2FpIGN1c3RvbTogIiMjIENhc2UgU3R1ZHkgMSB7I2Nhc2UxfSIgbWFrYSBpZC1ueWEgI2Nhc2UxDQogICBKYWRpIGFrdSB0ZW1iYWsgZHVhLWR1YW55YSBiaWFyIHBhc3RpIGtlbmEuDQoqLw0KZGl2LnNlY3Rpb24ubGV2ZWwyew0KICBib3JkZXItcmFkaXVzOjIycHggIWltcG9ydGFudDsNCiAgcGFkZGluZzoxLjZyZW0gMS42cmVtICFpbXBvcnRhbnQ7DQp9DQoNCi8qIENhc2UgMSAqLw0KI2Nhc2UxLnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS0xLnNlY3Rpb24ubGV2ZWwyew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwyNTEsMjEyLC45MiksIHJnYmEoMjU1LDI1NSwyNTUsLjk3KSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDIxNCwgMTAyLCAuMzUpICFpbXBvcnRhbnQ7DQp9DQovKiBDYXNlIDIgKi8NCiNjYXNlMi5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktMi5zZWN0aW9uLmxldmVsMnsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsMjIxLDIyNiwuODgpLCByZ2JhKDI1NSwyNTUsMjU1LC45NykpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxODAsIDE5NiwgLjQ1KSAhaW1wb3J0YW50Ow0KfQ0KLyogQ2FzZSAzICovDQojY2FzZTMuc2VjdGlvbi5sZXZlbDIsICNjYXNlLXN0dWR5LTMuc2VjdGlvbi5sZXZlbDJ7DQogIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjMzLDIyNSwyNTUsLjg4KSwgcmdiYSgyNTUsMjU1LDI1NSwuOTcpKSAhaW1wb3J0YW50Ow0KICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5MCwgMTcwLCAyNTUsIC40NSkgIWltcG9ydGFudDsNCn0NCi8qIENhc2UgNCAqLw0KI2Nhc2U0LnNlY3Rpb24ubGV2ZWwyLCAjY2FzZS1zdHVkeS00LnNlY3Rpb24ubGV2ZWwyew0KICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIwOCwyNDQsMjM0LC44OCksIHJnYmEoMjU1LDI1NSwyNTUsLjk3KSkgIWltcG9ydGFudDsNCiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDAsIDIxOCwgMTk4LCAuNDUpICFpbXBvcnRhbnQ7DQp9DQovKiBDYXNlIDUgKi8NCiNjYXNlNS5zZWN0aW9uLmxldmVsMiwgI2Nhc2Utc3R1ZHktNS5zZWN0aW9uLmxldmVsMnsNCiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMTIsMjM1LDI1NSwuODgpLCByZ2JhKDI1NSwyNTUsMjU1LC45NykpICFpbXBvcnRhbnQ7DQogIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTU1LCAxOTUsIDIzNSwgLjQ1KSAhaW1wb3J0YW50Ow0KfQ0KPC9zdHlsZT4NCg0KYGBgDQoNCi0tLQ0KDQojIyBDYXNlIFN0dWR5IDENCg0KKipDb25maWRlbmNlIEludGVydmFsIGZvciBNZWFuLCAkXHNpZ21hJCBLbm93bjoqKiBBbiAqKmUtY29tbWVyY2UgcGxhdGZvcm0qKiB3YW50cyB0byBlc3RpbWF0ZSB0aGUgKiphdmVyYWdlIG51bWJlciBvZiBkYWlseSB0cmFuc2FjdGlvbnMgcGVyIHVzZXIqKiBhZnRlciBsYXVuY2hpbmcgYSBuZXcgZmVhdHVyZS4gQmFzZWQgb24gbGFyZ2Utc2NhbGUgaGlzdG9yaWNhbCBkYXRhLCB0aGUgKipwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbioqIGlzIGtub3duLg0KDQokJA0KXGJlZ2lue2VxbmFycmF5Kn0NClxzaWdtYSAmPSYgMy4yIFxxdWFkIFx0ZXh0eyhwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbil9IFxcDQpuICY9JiAxMDAgXHF1YWQgXHRleHR7KHNhbXBsZSBzaXplKX0gXFwNClxiYXJ7eH0gJj0mIDEyLjYgXHF1YWQgXHRleHR7KHNhbXBsZSBtZWFuKX0NClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KDQojIyMgKipJZGVudGlmeSB0aGUgYXBwcm9wcmlhdGUgc3RhdGlzdGljYWwgdGVzdCBhbmQganVzdGlmeSB5b3VyIGNob2ljZS4qKg0KDQpLYXJlbmEgdHVqdWFuIGFuYWxpc2lzbnlhIGFkYWxhaCAqKm1lbmdlc3RpbWFzaSBtZWFuIHBvcHVsYXNpIFwoXG11XCkgZGFuIG5pbGFpIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSBcKFxzaWdtYVwpKiogZGlrZXRhaHVpIChcKFxzaWdtYSA9IDMuMlwpKSwgbWFrYSBtZXRvZGUgeWFuZyBzZXN1YWkgYWRhbGFoICoqY29uZmlkZW5jZSBpbnRlcnZhbCBiZXJiYXNpcyBaIHVudHVrIG1lYW46KioNCg0KJCQNClxiYXJ7eH0gXHBtIHpfe1xhbHBoYS8yfSBcbGVmdChcZnJhY3tcc2lnbWF9e1xzcXJ0e259fVxyaWdodCkNCiQkDQoNCi0tLQ0KDQojIyMgKipDb21wdXRlIHRoZSBDb25maWRlbmNlIEludGVydmFscyBmb3I6KioNCiAgIC0gJDkwXCUkDQogICAtICQ5NVwlJA0KICAgLSAkOTlcJSQNCg0KKipEYXRhOioqDQoNClxbDQpcc2lnbWEgPSAzLjIsIFxxdWFkIG4gPSAxMDAsIFxxdWFkIFxiYXJ7eH0gPSAxMi42DQpcXQ0KDQotICoqSGl0dW5nIFN0YW5kYXJkIEVycm9yIChTRSk6KioNCg0KXFsNClNFID0gXGZyYWN7XHNpZ21hfXtcc3FydHtufX0NCiAgICA9IFxmcmFjezMuMn17XHNxcnR7MTAwfX0NCiAgICA9IFxmcmFjezMuMn17MTB9DQogICAgPSAwLjMyDQpcXQ0KDQotICoqUnVtdXMgQ0kgKGthcmVuYSBcKFxzaWdtYVwpIGtub3duIOKGkiBaKToqKg0KDQpcWw0KQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGNkb3QgU0UNClxdDQoNCi0tLQ0KDQoqKjEuIENvbmZpZGVuY2UgSW50ZXJ2YWwgOTAlKioNCg0KLSAqKk5pbGFpIGtyaXRpczoqKg0KXFsNCnpfezAuOTV9ID0gMS42NDUNClxdDQoNCi0gKipNYXJnaW4gb2YgRXJyb3I6KioNClxbDQpNRSA9IDEuNjQ1IFx0aW1lcyAwLjMyID0gMC41MjYNClxdDQoNCi0gKipDSSA5MFwlOioqDQpcWw0KMTIuNiBccG0gMC41MjYgXDtcUmlnaHRhcnJvd1w7ICgxMi4wNzQsXDsgMTMuMTI2KQ0KXF0NCg0KLS0tDQoNCioqMi4gQ29uZmlkZW5jZSBJbnRlcnZhbCA5NSUqKg0KDQotICoqTmlsYWkga3JpdGlzOioqDQpcWw0Kel97MC45NzV9ID0gMS45NjANClxdDQoNCi0gKipNYXJnaW4gb2YgRXJyb3I6KioNClxbDQpNRSA9IDEuOTYwIFx0aW1lcyAwLjMyID0gMC42MjcNClxdDQoNCi0gKipDSSA5NVwlOioqDQpcWw0KMTIuNiBccG0gMC42MjcgXDtcUmlnaHRhcnJvd1w7ICgxMS45NzMsXDsgMTMuMjI3KQ0KXF0NCg0KLS0tDQoNCioqMy4gQ29uZmlkZW5jZSBJbnRlcnZhbCA5OSUqKg0KDQotICoqTmlsYWkga3JpdGlzOioqDQpcWw0Kel97MC45OTV9ID0gMi41NzYNClxdDQoNCi0gKipNYXJnaW4gb2YgRXJyb3I6KioNClxbDQpNRSA9IDIuNTc2IFx0aW1lcyAwLjMyIFxhcHByb3ggMC44MjQNClxdDQoNCi0gKipDSSA5OVwlOioqDQpcWw0KMTIuNiBccG0gMC44MjQgXDtcUmlnaHRhcnJvd1w7ICgxMS43NzYsXDsgMTMuNDI0KQ0KXF0NCg0KLS0tDQoNCiMjIyAqKmNvbXBhcmlzb24gdmlzdWFsaXphdGlvbiBvZiB0aGUgdGhyZWUgY29uZmlkZW5jZSBpbnRlcnZhbHMuKioNCg0KYGBge3IgY2FjaGU9VFJVRSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTEwLCBmaWcuYWxpZ249ImNlbnRlciJ9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdyaWQpDQoNCiMgPT09PT09IElOUFVUID09PT09PQ0Kc2lnbWEgPC0gMy4yDQpuICAgICA8LSAxMDANCnhiYXIgIDwtIDEyLjYNCnNlICAgIDwtIHNpZ21hIC8gc3FydChuKQ0KDQp6IDwtIGMoYDkwJWAgPSBxbm9ybSgwLjk1KSwNCiAgICAgICBgOTUlYCA9IHFub3JtKDAuOTc1KSwNCiAgICAgICBgOTklYCA9IHFub3JtKDAuOTk1KSkNCg0KY2kgPC0gZGF0YS5mcmFtZSgNCiAgbGV2ZWwgPSBuYW1lcyh6KSwNCiAgeiAgICAgPSB1bm5hbWUoeiksDQogIE1FICAgID0gdW5uYW1lKHopICogc2UNCikNCmNpJGxvd2VyIDwtIHhiYXIgLSBjaSRNRQ0KY2kkdXBwZXIgPC0geGJhciArIGNpJE1FDQoNCiMgPT09PT09IEt1cnZhIE5vcm1hbCB1bnR1ayB4YmFyID09PT09PQ0KeCA8LSBzZXEoeGJhciAtIDQqc2UsIHhiYXIgKyA0KnNlLCBsZW5ndGgub3V0ID0gMjUwMCkNCmRmIDwtIGRhdGEuZnJhbWUoeCA9IHgsIHkgPSBkbm9ybSh4LCBtZWFuID0geGJhciwgc2QgPSBzZSkpDQptYXh5IDwtIG1heChkZiR5KQ0KDQpsOTAgPC0gY2kkbG93ZXJbY2kkbGV2ZWw9PSI5MCUiXTsgdTkwIDwtIGNpJHVwcGVyW2NpJGxldmVsPT0iOTAlIl0NCmRmOTAgPC0gc3Vic2V0KGRmLCB4ID49IGw5MCAmIHggPD0gdTkwKQ0KDQojID09PT09PSBQQUxFVFRFIFNOT1dCQUxMIChzZXN1YWkgZm90bykgPT09PT09DQpidXR0ZXIgPC0gIiNGOEY5QkEiDQpibHVzaCAgPC0gIiNGRkRERTIiDQptaXN0ICAgPC0gIiNFMkU1RTkiDQoNCmluayAgICA8LSAiIzM3NDE1MSIgICAjIHRla3MvZ2FyaXMgbGVtYnV0IChidWthbiBoaXRhbSBwZWthdCkNCnRlYWwgICA8LSAiIzhDQzFCNiIgICAjIG1pbnQtdGVhbCBzb2Z0DQp0ZWFsX2QgPC0gIiM2RUFGQTEiICAgIyBtaW50LXRlYWwgbGViaWggdGVnYXMNCnBpbmtfZCA8LSAiI0Q3QjZCNSIgICAjIGR1c3R5IGJsdXNoIChidWF0IGdhcmlzKQ0KZ3JleV9kIDwtICIjOUNBM0FGIiAgICMgYWJ1IGxlbWJ1dCAoYnVhdCA5OSUpDQoNCiMgV2FybmEgZ2FyaXMgQ0kgKGRpYmlraW4gcGFzdGVsIHRhcGkgdGV0YXAga2ViYWNhKQ0KY29scyA8LSBjKGA5MCVgID0gdGVhbF9kLA0KICAgICAgICAgIGA5NSVgID0gcGlua19kLA0KICAgICAgICAgIGA5OSVgID0gZ3JleV9kKQ0KDQojIE1lYW4gbGluZQ0KbWVhbl9jb2wgPC0gdGVhbA0KDQojID09PT09PSBMYWJlbCBrb3RhayBrYW5hbiA9PT09PT0NCmZtdDMgPC0gZnVuY3Rpb24odikgc3ByaW50ZigiJS4zZiIsIHYpDQpsYWJfeCA8LSAxMy43OA0KbGFiIDwtIGRhdGEuZnJhbWUoDQogIGxldmVsID0gYygiOTklIiwiOTUlIiwiOTAlIiksDQogIHggPSBsYWJfeCwNCiAgeSA9IGMoMC44NiwgMC43MiwgMC41OCkgKiBtYXh5LA0KICBzZWdfY29sID0gYyhncmV5X2QsIHBpbmtfZCwgdGVhbF9kKQ0KKQ0KDQpnZXRfY2lfdGV4dCA8LSBmdW5jdGlvbihMKXsNCiAgbG8gPC0gZm10MyhjaSRsb3dlcltjaSRsZXZlbD09TF0pDQogIHVwIDwtIGZtdDMoY2kkdXBwZXJbY2kkbGV2ZWw9PUxdKQ0KICBwYXN0ZTAoIkNMICIsIEwsICIgPSAoIiwgbG8sICIsICIsIHVwLCAiKSIpDQp9DQpsYWIkdGV4dCA8LSBjKGdldF9jaV90ZXh0KCI5OSUiKSwgZ2V0X2NpX3RleHQoIjk1JSIpLCBnZXRfY2lfdGV4dCgiOTAlIikpDQoNCmxhYiR4MCA8LSB4YmFyICsgMC4xOA0KbGFiJHkwIDwtIGxhYiR5DQoNCiMgPT09PT09IFBsb3QgPT09PT09DQpnZ3Bsb3QoZGYsIGFlcyh4LCB5KSkgKw0KICAjIGFyc2lyYW4gYXJlYSAodmliZSBidXR0ZXIgc2VwZXJ0aSBmb3RvKQ0KICBnZW9tX2FyZWEoZGF0YSA9IGRmOTAsIGZpbGwgPSBidXR0ZXIsIGFscGhhID0gMC41NSkgKw0KICBnZW9tX2xpbmUoY29sb3IgPSBpbmssIGxpbmV3aWR0aCA9IDEuMjUpICsNCg0KICAjIG1lYW4gbGluZSArIHRpdGlrDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhiYXIsIGNvbG9yID0gbWVhbl9jb2wsIGxpbmV3aWR0aCA9IDEuNCkgKw0KICBnZW9tX3BvaW50KGFlcyh4YmFyLCAwKSwgY29sb3IgPSBtZWFuX2NvbCwgc2l6ZSA9IDQpICsNCg0KICAjIGdhcmlzIHB1dHVzLXB1dHVzIGJhdGFzIENJDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGMoY2kkbG93ZXJbY2kkbGV2ZWw9PSI5MCUiXSwgY2kkdXBwZXJbY2kkbGV2ZWw9PSI5MCUiXSksDQogICAgICAgICAgICAgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yPWNvbHNbIjkwJSJdLCBsaW5ld2lkdGg9MSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKGNpJGxvd2VyW2NpJGxldmVsPT0iOTUlIl0sIGNpJHVwcGVyW2NpJGxldmVsPT0iOTUlIl0pLA0KICAgICAgICAgICAgIGxpbmV0eXBlPSJkYXNoZWQiLCBjb2xvcj1jb2xzWyI5NSUiXSwgbGluZXdpZHRoPTEpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYyhjaSRsb3dlcltjaSRsZXZlbD09Ijk5JSJdLCBjaSR1cHBlcltjaSRsZXZlbD09Ijk5JSJdKSwNCiAgICAgICAgICAgICBsaW5ldHlwZT0iZGFzaGVkIiwgY29sb3I9Y29sc1siOTklIl0sIGxpbmV3aWR0aD0xKSArDQoNCiAgIyBicmFja2V0IGJhd2FoDQogIGdlb21fc2VnbWVudChhZXMoeD1jaSRsb3dlcltjaSRsZXZlbD09Ijk5JSJdLCB4ZW5kPWNpJHVwcGVyW2NpJGxldmVsPT0iOTklIl0sDQogICAgICAgICAgICAgICAgICAgeT0wLjE2Km1heHksIHllbmQ9MC4xNiptYXh5KSwNCiAgICAgICAgICAgICAgIGNvbG9yPWNvbHNbIjk5JSJdLCBsaW5ld2lkdGg9NCwgbGluZWVuZD0icm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeD1jaSRsb3dlcltjaSRsZXZlbD09Ijk1JSJdLCB4ZW5kPWNpJHVwcGVyW2NpJGxldmVsPT0iOTUlIl0sDQogICAgICAgICAgICAgICAgICAgeT0wLjExKm1heHksIHllbmQ9MC4xMSptYXh5KSwNCiAgICAgICAgICAgICAgIGNvbG9yPWNvbHNbIjk1JSJdLCBsaW5ld2lkdGg9NCwgbGluZWVuZD0icm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeD1jaSRsb3dlcltjaSRsZXZlbD09IjkwJSJdLCB4ZW5kPWNpJHVwcGVyW2NpJGxldmVsPT0iOTAlIl0sDQogICAgICAgICAgICAgICAgICAgeT0wLjA2Km1heHksIHllbmQ9MC4wNiptYXh5KSwNCiAgICAgICAgICAgICAgIGNvbG9yPWNvbHNbIjkwJSJdLCBsaW5ld2lkdGg9NCwgbGluZWVuZD0icm91bmQiKSArDQoNCiAgIyB0dWxpc2FuIM68IGRhbiBwZXJzZW4gZGkgZGFsYW0ga3VydmENCiAgYW5ub3RhdGUoInRleHQiLCB4PXhiYXIsIHk9MS4wNSptYXh5LCBsYWJlbD1wYXN0ZTAoIs68ID0gIiwgeGJhciksDQogICAgICAgICAgIGNvbG9yPW1lYW5fY29sLCBmb250ZmFjZT0iYm9sZCIsIHNpemU9NSkgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHg9eGJhciwgeT0wLjg2Km1heHksIGxhYmVsPSI5OSUiLCBjb2xvcj1jb2xzWyI5OSUiXSwgZm9udGZhY2U9ImJvbGQiLCBzaXplPTUpICsNCiAgYW5ub3RhdGUoInRleHQiLCB4PXhiYXIsIHk9MC43MiptYXh5LCBsYWJlbD0iOTUlIiwgY29sb3I9Y29sc1siOTUlIl0sIGZvbnRmYWNlPSJib2xkIiwgc2l6ZT01KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeD14YmFyLCB5PTAuNTgqbWF4eSwgbGFiZWw9IjkwJSIsIGNvbG9yPWNvbHNbIjkwJSJdLCBmb250ZmFjZT0iYm9sZCIsIHNpemU9NSkgKw0KDQogICMgZ2FyaXMgcGVuZ2h1YnVuZyBrZSBrb3RhayBrYW5hbg0KICBnZW9tX3NlZ21lbnQoZGF0YSA9IGxhYiwNCiAgICAgICAgICAgICAgIGFlcyh4ID0geDAsIHkgPSB5MCwgeGVuZCA9IHggLSAwLjE4LCB5ZW5kID0geSksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBsaW5lZW5kPSJyb3VuZCIsIGNvbG9yID0gbGFiJHNlZ19jb2wsIGluaGVyaXQuYWVzID0gRkFMU0UpICsNCg0KICAjIGtvdGFrIGthbmFuIChidWthbiBoaXRhbSBsYWdpLCBqYWRpIG1pc3QgKyB0ZWtzIGluaykNCiAgZ2VvbV9sYWJlbChkYXRhID0gbGFiLA0KICAgICAgICAgICAgIGFlcyh4ID0geCwgeSA9IHksIGxhYmVsID0gdGV4dCksDQogICAgICAgICAgICAgaW5oZXJpdC5hZXMgPSBGQUxTRSwNCiAgICAgICAgICAgICBmaWxsID0gbWlzdCwgY29sb3IgPSBpbmssDQogICAgICAgICAgICAgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSA0LA0KICAgICAgICAgICAgIGxhYmVsLnNpemUgPSAwLA0KICAgICAgICAgICAgIGxhYmVsLnIgPSB1bml0KDAuMzUsICJsaW5lcyIpLA0KICAgICAgICAgICAgIGxhYmVsLnBhZGRpbmcgPSB1bml0KDAuMzUsICJsaW5lcyIpKSArDQoNCiAgbGFicygNCiAgICB0aXRsZSA9ICJDb25maWRlbmNlIEludGVydmFscyBkZW5nYW4gS3VydmEgTm9ybWFsIiwNCiAgICBzdWJ0aXRsZSA9IHNwcmludGYoIs+DID0gJS4xZiwgbiA9ICVkLCB4zIQgPSAlLjFmLCBTRSA9ICUuMmYiLCBzaWdtYSwgbiwgeGJhciwgc2UpLA0KICAgIHggPSAiTmlsYWkiLCB5ID0gIkRlbnNpdHkiLA0KICAgIGNhcHRpb24gPSAiU2VtYWtpbiBiZXNhciB0aW5na2F0IGtlcGVyY2F5YWFuICg5OSUpLCBpbnRlcnZhbCBtYWtpbiBsZWJhci4iDQogICkgKw0KDQogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygxMS4yNSwgMTQuMDApLCB5bGltID0gYygwLCAxLjI4Km1heHkpKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMTEuMjUsIDE0LjAwLCBieSA9IDAuMjUpKSArDQogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBjKDAsIDAuNSwgMS4wKSwgZXhwYW5kID0gYygwLCAwKSkgKw0KDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgc2l6ZT0xOCwgaGp1c3Q9MC41LCBjb2xvciA9IGluayksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdD0wLjUsIGNvbG9yID0gaW5rKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZT0xMCwgY29sb3IgPSAiIzZCNzI4MCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSBpbmspLA0KICAgIGF4aXMudGV4dCAgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzZCNzI4MCIpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgcGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfbGluZShjb2xvciA9ICIjRTVFN0VCIiksDQogICAgcGxvdC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSkNCiAgKQ0KYGBgDQoNCi0tLQ0KDQojIyMgKipJbnRlcnByZXQgdGhlIHJlc3VsdHMgaW4gYSBidXNpbmVzcyBhbmFseXRpY3MgY29udGV4dC4qKg0KDQpWaXN1YWxpc2FzaSBpbmkgbWVudW5qdWtrYW4gKipwZXJraXJhYW4gcmF0YS1yYXRhIHRyYW5zYWtzaSBoYXJpYW4gcGVyIHVzZXIqKiBiZXJhZGEgZGkgc2VraXRhciBcKFxiYXJ7eH0gPSAxMi42XCkgKGdhcmlzIHZlcnRpa2FsL3RpdGlrIHRlbmdhaCkubGFsdSB0aWdhIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKGdhcmlzIGhvcml6b250YWwpIG1lbWJlcmkgcmVudGFuZyBuaWxhaSBtZWFuIHBvcHVsYXNpIHlhbmcgbWFzdWsgYWthbC4geWFpdHU6DQotICoqQ0wgOTBcJSA9KiogKDEyLjA3NCwgMTMuMTI2KSAqKnBhbGluZyBzZW1waXQuKioNCi0gKipDTCA5NVwlID0qKiAoMTEuOTczLCAxMy4yMjcpICoqbGViaWggbGViYXIuKiogDQotICoqQ0wgOTlcJSA9KiogKDExLjc3NiwgMTMuNDI0KSAqKnBhbGluZyBsZWJhci4qKg0KDQoqKkludGlueWEqKiwgc2VtYWtpbiAqKnRpbmdnaSB0aW5na2F0IGtlcGVyY2F5YWFuKiosICoqcmVudGFuZyBtYWtpbiBtZWxlYmFyKioga2FyZW5hIGtpdGEgaW5naW4gImxlYmloIHlha2luIiAqKm1lYW4gc2ViZW5hcm55YSBhZGEgZGkgZGFsYW0gcmVudGFuZyBpdHUuKioNCg0KKipqYWRpLCoqIHRvbGVyYW5zaSAqKmtldGlkYWtwYXN0aWFuIGRpcGVyYmVzYXIuKiogYWtpYmF0bnlhICoqOTBcJSBwYWxpbmcgcHJlc2lzaSB0YXBpIGt1cmFuZyBrb25zZXJ2YXRpZioqLCBzZWRhbmdrYW4gKio5OVwlIHBhbGluZyBhbWFuL2tvbnNlcnZhdGlmIHRhcGkgcGFsaW5nIHRpZGFrIHByZXNpc2kuKioNCg0KLS0tDQoNCiMjIENhc2UgU3R1ZHkgMiANCg0KKipDb25maWRlbmNlIEludGVydmFsIGZvciBNZWFuLCAkXHNpZ21hJCBVbmtub3duOioqIEEgKipVWCBSZXNlYXJjaCB0ZWFtKiogYW5hbHl6ZXMgKip0YXNrIGNvbXBsZXRpb24gdGltZSAoaW4gbWludXRlcykqKiBmb3IgYSBuZXcgbW9iaWxlIGFwcGxpY2F0aW9uLiBUaGUgZGF0YSBhcmUgY29sbGVjdGVkIGZyb20gKioxMiB1c2VycyoqOg0KDQokJA0KOC40LFw7IDcuOSxcOyA5LjEsXDsgOC43LFw7IDguMixcOyA5LjAsXDsNCjcuOCxcOyA4LjUsXDsgOC45LFw7IDguMSxcOyA4LjYsXDsgOC4zDQokJA0KDQojIyMgKipJZGVudGlmeSB0aGUgYXBwcm9wcmlhdGUgc3RhdGlzdGljYWwgdGVzdCoqDQpNZXRvZGUgeWFuZyB0ZXBhdCBhZGFsYWggKipjb25maWRlbmNlIGludGVydmFsIGJlcmJhc2lzIGRpc3RyaWJ1c2kgdCAob25lLXNhbXBsZSB0LWludGVydmFsKSB1bnR1ayBtZWFuKiosIGthcmVuYSB5YW5nIGluZ2luICoqZGllc3RpbWFzaSBhZGFsYWggcmF0YS1yYXRhIHBvcHVsYXNpKiogd2FrdHUgcGVueWVsZXNhaWFuIHR1Z2FzLCBzZW1lbnRhcmEgKipzdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKM+DKSB0aWRhayBkaWtldGFodWkqKiBzZWhpbmdnYSBoYXJ1cyAqKmRpZ2FudGkgZGVuZ2FuIHN0YW5kYXIgZGV2aWFzaSBzYW1wZWwgKHMpKiosIGRhbiAqKnVrdXJhbiBzYW1wZWwganVnYSBrZWNpbCAobiA9IDEyKSoqIHNlaGluZ2dhIHBlbmRla2F0YW4geWFuZyBwYWxpbmcgc2VzdWFpIG1lbmdndW5ha2FuICoqdC1TdHVkZW50KiogZGVuZ2FuIGRlcmFqYXQgYmViYXMgZGYgPSAxMS4NCg0KIyMjICoqQ29tcHV0ZSB0aGUgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yOioqDQogICAtICQ5MFwlJA0KICAgLSAkOTVcJSQNCiAgIC0gJDk5XCUkDQogICANCioqRGF0YToqKg0KDQpcWw0KbiA9IDEyLFxxdWFkIGRmID0gbiAtIDEgPSAxMQ0KXF0NCg0KXFsNCnggPSAoOC40LFw7IDcuOSxcOyA5LjEsXDsgOC43LFw7IDguMixcOyA5LjAsXDsgNy44LFw7IDguNSxcOyA4LjksXDsgOC4xLFw7IDguNixcOyA4LjMpDQpcXQ0KDQotICoqSGl0dW5nIHJhdGEtcmF0YSBzYW1wZWwgKFwoXGJhcnt4fVwpKToqKg0KDQpcWw0KXGJhcnt4fSA9IFxmcmFje1xzdW1fe2k9MX1ee259IHhfaX17bn0gPSA4LjQ1ODMNClxdDQoNCi0gKipIaXR1bmcgc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAoXChzXCkpOioqDQoNClxbDQpzID0gMC40MjA5DQpcXQ0KDQotICoqSGl0dW5nIFN0YW5kYXJkIEVycm9yIChTRSk6KioNCg0KXFsNClNFID0gXGZyYWN7c317XHNxcnR7bn19DQogICAgID0gXGZyYWN7MC40MjA5fXtcc3FydHsxMn19DQogICAgID0gMC4xMjE1DQpcXQ0KDQotICoqUnVtdXMgQ0kgKGthcmVuYSBcKFxzaWdtYVwpIHVua25vd24gXChccmlnaHRhcnJvd1wpIHBha2FpIGRpc3RyaWJ1c2kgdCk6KioNCg0KXFsNCkNJID0gXGJhcnt4fSBccG0gdF97XGFscGhhLzIsXCxkZn0gXGNkb3QgU0UNClxdDQoNCi0tLQ0KDQoqKjEuIENvbmZpZGVuY2UgSW50ZXJ2YWwgOTAlKioNCg0KLSAqKk5pbGFpIGtyaXRpczoqKg0KXFsNCnRfezAuOTUsXCwxMX0gPSAxLjc5Ng0KXF0NCg0KLSAqKk1hcmdpbiBvZiBFcnJvcjoqKg0KXFsNCk1FID0gMS43OTYgXHRpbWVzIDAuMTIxNSA9IDAuMjE4Mg0KXF0NCg0KLSAqKkNJIDkwXCU6KioNClxbDQo4LjQ1ODMgXHBtIDAuMjE4MiBcO1xSaWdodGFycm93XDsgKDguMjQwMSxcOyA4LjY3NjYpDQpcXQ0KDQotLS0NCg0KKioyLiBDb25maWRlbmNlIEludGVydmFsIDk1JSoqDQoNCi0gKipOaWxhaSBrcml0aXM6KioNClxbDQp0X3swLjk3NSxcLDExfSA9IDIuMjAxDQpcXQ0KDQotICoqTWFyZ2luIG9mIEVycm9yOioqDQpcWw0KTUUgPSAyLjIwMSBcdGltZXMgMC4xMjE1ID0gMC4yNjc1DQpcXQ0KDQotICoqQ0kgOTVcJToqKg0KXFsNCjguNDU4MyBccG0gMC4yNjc1IFw7XFJpZ2h0YXJyb3dcOyAoOC4xOTA5LFw7IDguNzI1OCkNClxdDQoNCi0tLQ0KDQoqKjMuQ29uZmlkZW5jZSBJbnRlcnZhbCA5OSUqKg0KDQotICoqTmlsYWkga3JpdGlzOioqDQpcWw0KdF97MC45OTUsXCwxMX0gPSAzLjEwNg0KXF0NCg0KLSAqKk1hcmdpbiBvZiBFcnJvcjoqKg0KXFsNCk1FID0gMy4xMDYgXHRpbWVzIDAuMTIxNSA9IDAuMzc3NA0KXF0NCg0KLSAqKkNJIDk5XCU6KioNClxbDQo4LjQ1ODMgXHBtIDAuMzc3NCBcO1xSaWdodGFycm93XDsgKDguMDgwOSxcOyA4LjgzNTcpDQpcXQ0KDQotLS0NCg0KIyMjICoqVmlzdWFsaXplIHRoZSB0aHJlZSBpbnRlcnZhbHMgb24gYSBzaW5nbGUgcGxvdC4qKg0KYGBge3IgY2FjaGU9VFJVRSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPTExLjUsIGZpZy5oZWlnaHQ9NS44LCBmaWcuYWxpZ249ImNlbnRlciJ9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCiMgRGF0YSAoQ2FzZSBTdHVkeSAyKQ0KeCA8LSBjKDguNCwgNy45LCA5LjEsIDguNywgOC4yLCA5LjAsIDcuOCwgOC41LCA4LjksIDguMSwgOC42LCA4LjMpDQoNCm4gIDwtIGxlbmd0aCh4KQ0KZGZfdCA8LSBuIC0gMQ0KeGJhciA8LSBtZWFuKHgpDQpzICAgIDwtIHNkKHgpDQpzZSAgIDwtIHMvc3FydChuKQ0KDQojIHQgY3JpdGljYWwgdmFsdWVzDQp0OTAgPC0gcXQoMC45NSwgIGRmX3QpDQp0OTUgPC0gcXQoMC45NzUsIGRmX3QpDQp0OTkgPC0gcXQoMC45OTUsIGRmX3QpDQoNCiMgQ0kgYm91bmRzICh0LWludGVydmFsKQ0KTDkwIDwtIHhiYXIgLSB0OTAqc2U7IFU5MCA8LSB4YmFyICsgdDkwKnNlDQpMOTUgPC0geGJhciAtIHQ5NSpzZTsgVTk1IDwtIHhiYXIgKyB0OTUqc2UNCkw5OSA8LSB4YmFyIC0gdDk5KnNlOyBVOTkgPC0geGJhciArIHQ5OSpzZQ0KDQojIC0tLS0gS3VydmEgdCBkYWxhbSBza2FsYSAieCIgLS0tLQ0KeF9taW4gPC0geGJhciAtIDYqc2UNCnhfbWF4IDwtIHhiYXIgKyA2KnNlDQpncmlkeCA8LSBzZXEoeF9taW4sIHhfbWF4LCBsZW5ndGgub3V0ID0gNDAwMCkNCg0KY3VydmUgPC0gZGF0YS5mcmFtZSgNCiAgeCA9IGdyaWR4LA0KICB5ID0gZHQoKGdyaWR4IC0geGJhcikvc2UsIGRmID0gZGZfdCkgLyBzZQ0KKQ0KeW1heCA8LSBtYXgoY3VydmUkeSkNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQojIFBBTEVUVEUgKGNvY29rIENTUyBTbm93YmFsbCkNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PQ0KYnV0dGVyIDwtICIjRjhGOUJBIg0KYmx1c2ggIDwtICIjRkZEREUyIg0KbWlzdCAgIDwtICIjRTJFNUU5Ig0KDQppbmsgICAgPC0gIiMzNzQxNTEiDQptdXRlZCAgPC0gIiM2QjcyODAiDQoNCnRlYWwgICA8LSAiIzhDQzFCNiINCnRlYWxfZCA8LSAiIzZFQUZBMSINCnBpbmtfZCA8LSAiI0Q3QjZCNSINCmdyZXlfZCA8LSAiIzlDQTNBRiINCg0KIyBXYXJuYSBnYXJpcyBDSQ0KYzk5X2NvbCAgPC0gZ3JleV9kDQpjOTVfY29sICA8LSBwaW5rX2QNCmM5MF9jb2wgIDwtIHRlYWxfZA0KbWVhbl9jb2wgPC0gdGVhbA0KDQojIFNoYWRpbmcgbmVzdGVkIChsZW1idXQsIHNlc3VhaSBwYWxldHRlKQ0KZmlsbDk5IDwtIG1pc3QNCmZpbGw5NSA8LSBibHVzaA0KZmlsbDkwIDwtIGJ1dHRlcg0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBMRUdFTkQgS0FOQU4gKFdBSklCIEFEQSAzIEJBUklTKSDigJQgYW1hbiBkYXJpIGtlcG90b25nDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KbGVnIDwtIGRhdGEuZnJhbWUoDQogIGxldmVsID0gYygiOTklIiwiOTUlIiwiOTAlIiksDQogIHkgICAgID0geW1heCAqIGMoMC43OCwgMC42OCwgMC41OCksDQogIEwgICAgID0gYyhMOTksIEw5NSwgTDkwKSwNCiAgVSAgICAgPSBjKFU5OSwgVTk1LCBVOTApLA0KICBjb2wgICA9IGMoYzk5X2NvbCwgYzk1X2NvbCwgYzkwX2NvbCkNCikNCg0KbGVnJHgwICAgPC0geF9tYXggKyAwLjEwKnNlDQpsZWckeDEgICA8LSB4X21heCArIDEuMjAqc2UNCmxlZyR4bGFiIDwtIHhfbWF4ICsgMS4yOCpzZQ0KDQpnZ3Bsb3QoY3VydmUsIGFlcyh4LCB5KSkgKw0KICAjIFNoYWRpbmcgbmVzdGVkDQogIGdlb21fYXJlYShkYXRhID0gc3Vic2V0KGN1cnZlLCB4ID49IEw5OSAmIHggPD0gVTk5KSwNCiAgICAgICAgICAgIGZpbGwgPSBmaWxsOTksIGFscGhhID0gMC41NSkgKw0KICBnZW9tX2FyZWEoZGF0YSA9IHN1YnNldChjdXJ2ZSwgeCA+PSBMOTUgJiB4IDw9IFU5NSksDQogICAgICAgICAgICBmaWxsID0gZmlsbDk1LCBhbHBoYSA9IDAuNTUpICsNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoY3VydmUsIHggPj0gTDkwICYgeCA8PSBVOTApLA0KICAgICAgICAgICAgZmlsbCA9IGZpbGw5MCwgYWxwaGEgPSAwLjY1KSArDQoNCiAgIyBPdXRsaW5lIGt1cnZhDQogIGdlb21fbGluZShsaW5ld2lkdGggPSAxLjEsIGNvbG9yID0gaW5rKSArDQoNCiAgIyBHYXJpcyBiYXRhcyBDSSAocHV0dXMtcHV0dXMpDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGMoTDk5LCBVOTkpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLA0KICAgICAgICAgICAgIGxpbmV3aWR0aCA9IDEuMCwgY29sb3IgPSBjOTlfY29sLCBhbHBoYSA9IDAuOSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEw5NSwgVTk1KSwgbGluZXR5cGUgPSAiZGFzaGVkIiwNCiAgICAgICAgICAgICBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gYzk1X2NvbCwgYWxwaGEgPSAwLjkpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYyhMOTAsIFU5MCksIGxpbmV0eXBlID0gImRhc2hlZCIsDQogICAgICAgICAgICAgbGluZXdpZHRoID0gMS4wLCBjb2xvciA9IGM5MF9jb2wsIGFscGhhID0gMC45NSkgKw0KDQogICMgR2FyaXMgbWVhbiArIHRpdGlrIGJhd2FoDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHhiYXIsIGxpbmV3aWR0aCA9IDEuNiwgY29sb3IgPSBtZWFuX2NvbCkgKw0KICBnZW9tX3BvaW50KGFlcyh4ID0geGJhciwgeSA9IDApLCBzaXplID0gMy4yLCBjb2xvciA9IG1lYW5fY29sKSArDQoNCiAgIyBCYXIgaW50ZXJ2YWwgZGkgYmF3YWggKHN0YWNrZWQpDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5OSwgeGVuZCA9IFU5OSwgeSA9IHltYXgqMC4wMywgeWVuZCA9IHltYXgqMC4wMyksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5OV9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5NSwgeGVuZCA9IFU5NSwgeSA9IHltYXgqMC4wNiwgeWVuZCA9IHltYXgqMC4wNiksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5NV9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5MCwgeGVuZCA9IFU5MCwgeSA9IHltYXgqMC4wOSwgeWVuZCA9IHltYXgqMC4wOSksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5MF9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQoNCiAgIyBMYWJlbCB0ZW5nYWgNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0geGJhciwgeSA9IHltYXgqMC45OCwNCiAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIlx1MDNCQyA9ICIsIHJvdW5kKHhiYXIsIDIpKSwNCiAgICAgICAgICAgY29sb3IgPSBtZWFuX2NvbCwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSA1KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhiYXIsIHkgPSB5bWF4KjAuNzgsIGxhYmVsID0gIjk5JSIsDQogICAgICAgICAgIGNvbG9yID0gYzk5X2NvbCwgZm9udGZhY2UgPSAiYm9sZCIsIGFscGhhID0gMC45LCBzaXplID0gNikgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHggPSB4YmFyLCB5ID0geW1heCowLjYyLCBsYWJlbCA9ICI5NSUiLA0KICAgICAgICAgICBjb2xvciA9IGM5NV9jb2wsIGZvbnRmYWNlID0gImJvbGQiLCBhbHBoYSA9IDAuOSwgc2l6ZSA9IDYpICsNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0geGJhciwgeSA9IHltYXgqMC40NiwgbGFiZWwgPSAiOTAlIiwNCiAgICAgICAgICAgY29sb3IgPSBjOTBfY29sLCBmb250ZmFjZSA9ICJib2xkIiwgYWxwaGEgPSAwLjk1LCBzaXplID0gNikgKw0KDQogICMgPT09PT09PSBMRUdFTkQgS0FOQU4gKDMgYmFyaXMpID09PT09PT0NCiAgZ2VvbV9zZWdtZW50KGRhdGEgPSBsZWcsDQogICAgICAgICAgICAgICBhZXMoeCA9IHgwLCB4ZW5kID0geDEsIHkgPSB5LCB5ZW5kID0geSksDQogICAgICAgICAgICAgICBpbmhlcml0LmFlcyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgbGluZXdpZHRoID0gNCwgY29sb3IgPSBsZWckY29sLCBsaW5lZW5kID0gInJvdW5kIikgKw0KICBnZW9tX2xhYmVsKGRhdGEgPSBsZWcsDQogICAgICAgICAgICAgYWVzKHggPSB4bGFiLCB5ID0geSwNCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBzcHJpbnRmKCJDTCAlcyA9ICglLjNmLCAlLjNmKSIsIGxldmVsLCBMLCBVKSksDQogICAgICAgICAgICAgaW5oZXJpdC5hZXMgPSBGQUxTRSwNCiAgICAgICAgICAgICBoanVzdCA9IDAsDQogICAgICAgICAgICAgbGFiZWwuc2l6ZSA9IDAsDQogICAgICAgICAgICAgZmlsbCA9IG1pc3QsIGNvbG9yID0gaW5rLCBmb250ZmFjZSA9ICJib2xkIikgKw0KDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQ29uZmlkZW5jZSBJbnRlcnZhbHMgZGVuZ2FuIEt1cnZhIHQiLA0KICAgIHN1YnRpdGxlID0gcGFzdGUwKCJuID0gIiwgbiwNCiAgICAgICAgICAgICAgICAgICAgICAiLCB4XHUwMzA1ID0gIiwgcm91bmQoeGJhciwgMiksDQogICAgICAgICAgICAgICAgICAgICAgIiwgcyA9ICIsIHJvdW5kKHMsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICIsIFNFID0gIiwgcm91bmQoc2UsIDIpLA0KICAgICAgICAgICAgICAgICAgICAgICIsIGRmID0gIiwgZGZfdCksDQogICAgeCA9ICJOaWxhaSIsIHkgPSAiRGVuc2l0eSINCiAgKSArDQoNCiAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKHhfbWluLCB4X21heCArIDMuNipzZSksIGNsaXAgPSAib2ZmIikgKw0KDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTMpICsNCiAgdGhlbWUoDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBzaXplID0gMjAsIGhqdXN0ID0gMC41LCBjb2xvciA9IGluayksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGhqdXN0ID0gMC41LCBjb2xvciA9IG11dGVkKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gaW5rKSwNCiAgICBheGlzLnRleHQgID0gZWxlbWVudF90ZXh0KGNvbG9yID0gbXV0ZWQpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI0U1RTdFQiIpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQoNCiAgICAjIGJpYXIgbnlhdHUgc2FtYSBDU1MgKG5nZ2FrIGFkYSBrb3RhayBwdXRpaCkNCiAgICBwbG90LmJhY2tncm91bmQgID0gZWxlbWVudF9yZWN0KGZpbGwgPSAidHJhbnNwYXJlbnQiLCBjb2xvciA9IE5BKSwNCiAgICBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAidHJhbnNwYXJlbnQiLCBjb2xvciA9IE5BKSwNCg0KICAgICMgcnVhbmcga2FuYW4gYnVhdCBsYWJlbCAocGVudGluZykNCiAgICBwbG90Lm1hcmdpbiA9IG1hcmdpbigxMCwgMjAwLCAxMCwgMTApDQogICkNCmBgYA0KDQotLS0NCg0KIyMjICoqRXhwbGFpbiBzYW1wbGUgc2l6ZSBhbmQgY29uZmlkZW5jZSBsZXZlbCBpbmZsdWVuY2UgdGhlIGludGVydmFsIHdpZHRoLioqDQoNCkxlYmFyIGNvbmZpZGVuY2UgaW50ZXJ2YWwgdW50dWsgbWVhbiAoXChcc2lnbWFcKSB1bmtub3duKSBkaXRlbnR1a2FuIG9sZWg6DQoNCiQkDQpDSSA9IFxiYXJ7eH0gXHBtIHRfe1xhbHBoYS8yLFwsZGZ9XGxlZnQoXGZyYWN7c317XHNxcnR7bn19XHJpZ2h0KQ0KJCQNCg0KSmFkaSDigJxsZWJhcuKAnSBDSSBiZXJnYW50dW5nIHBhZGEgZHVhIGhhbCB1dGFtYToNCg0KKiooMSkgU2FtcGxlIHNpemUqKg0KDQotIEthbGF1ICoqXChuXCkgbWFraW4gYmVzYXIqKiwgbWFrYSBcKFxkZnJhY3tzfXtcc3FydHtufX1cKSAqKihzdGFuZGFyZCBlcnJvcikgbWFraW4ga2VjaWwuKiogXChccmlnaHRhcnJvd1wpIGludGVydmFsIG1ha2luIHNlbXBpdCAobGViaWggcHJlc2lzaSkuDQoNCi0gS2FsYXUgKipcKG5cKSBrZWNpbCoqIChrYXlhayBkaSBrYXN1cyBpbmkgXChuID0gMTJcKSksICoqc3RhbmRhcmQgZXJyb3IgbWFzaWggcmVsYXRpZiBiZXNhcioqIFwoXHJpZ2h0YXJyb3dcKSBpbnRlcnZhbCBsZWJpaCBsZWJhci4NCg0KKiooMikgQ29uZmlkZW5jZSBsZXZlbCAoOTAlIHZzIDk1JSB2cyA5OSUpKioNCg0KLSAqKlNlbWFraW4gdGluZ2dpIGNvbmZpZGVuY2UgbGV2ZWwqKiwgbmlsYWkga3JpdGlzIFwodF97XGFscGhhLzIsXCxkZn1cKSBtYWtpbiBiZXNhciBcKFxyaWdodGFycm93XCkgaW50ZXJ2YWwgbWFraW4gbGViYXIuDQogIA0KLSAqKk1ha2FueWEgdXJ1dGFubnlhIHNlbGFsdToqKg0KXFsNClx0ZXh0e0NJIDkwXCUgKHBhbGluZyBzZW1waXQpfSANCjwgXHRleHR7IENJIDk1XCUgfSANCjwgXHRleHR7IENJIDk5XCUgKHBhbGluZyBsZWJhcil9DQpcXQ0KDQoqKkludGlueWE6KiogXChuXCkgYmVzYXIgYmlraW4gQ0kgbWVueWVtcGl0LCBzZWRhbmdrYW4gY29uZmlkZW5jZSBsZXZlbCB0aW5nZ2kgYmlraW4gQ0kgbWVsZWJhciAobGViaWggYW1hbiB0YXBpIGt1cmFuZyBwcmVzaXNpKS4NCg0KLS0tDQoNCiMjIENhc2UgU3R1ZHkgMyANCg0KKipDb25maWRlbmNlIEludGVydmFsIGZvciBhIFByb3BvcnRpb24sIEEvQiBUZXN0aW5nOioqIEEgZGF0YSBzY2llbmNlIHRlYW0gcnVucyBhbiAqKkEvQiB0ZXN0Kiogb24gYSBuZXcgKkNhbGwtVG8tQWN0aW9uIChDVEEpKiBidXR0b24gZGVzaWduLiBUaGUgZXhwZXJpbWVudCB5aWVsZHM6DQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KbiAmPSYgNDAwIFxxdWFkIFx0ZXh0eyh0b3RhbCB1c2Vycyl9IFxcDQp4ICY9JiAxNTYgXHF1YWQgXHRleHR7KHVzZXJzIHdobyBjbGlja2VkIHRoZSBDVEEpfQ0KXGVuZHtlcW5hcnJheSp9DQokJA0KDQoNCiMjIyAqKkNvbXB1dGUgdGhlIHNhbXBsZSBwcm9wb3J0aW9uICRcaGF0e3B9JC4qKg0KDQpEaWtldGFodWk6DQoNClxbDQpuID0gNDAwIFxxdWFkIFx0ZXh0eyh0b3RhbCB1c2Vycyl9DQpcXQ0KXFsNCnggPSAxNTYgXHF1YWQgXHRleHR7KHVzZXJzIHlhbmcga2xpayBDVEEpfQ0KXF0NCg0KUHJvcG9yc2kgc2FtcGVsOg0KDQpcWw0KXGhhdHtwfSA9IFxmcmFje3h9e259ID0gXGZyYWN7MTU2fXs0MDB9ID0gMC4zOQ0KXF0NCg0KSmFkaSBzYW1wbGUgcHJvcG9ydGlvbiAvIENUUiBzYW1wZWwgPSAwLjM5IChhdGF1IDM5XCUpLg0KDQotLS0NCg0KMi4gQ29tcHV0ZSBDb25maWRlbmNlIEludGVydmFscyBmb3IgdGhlIHByb3BvcnRpb24gYXQ6DQogICAtICQ5MFwlJA0KICAgLSAkOTVcJSQNCiAgIC0gJDk5XCUkDQogICANCioqRGF0YToqKg0KDQpcWw0KbiA9IDQwMCxccXVhZCB4ID0gMTU2LFxxdWFkIFxoYXR7cH0gPSBcZnJhY3sxNTZ9ezQwMH0gPSAwLjM5DQpcXQ0KDQotICoqSGl0dW5nIFN0YW5kYXJkIEVycm9yIChTRSkgdW50dWsgcHJvcG9yc2k6KioNCg0KXFsNClNFID0gXHNxcnR7XGZyYWN7XGhhdHtwfSgxIC0gXGhhdHtwfSl9e259fQ0KICAgID0gXHNxcnR7XGZyYWN7MC4zOSgxIC0gMC4zOSl9ezQwMH19DQogICAgPSBcc3FydHtcZnJhY3swLjM5IFxjZG90IDAuNjF9ezQwMH19DQogICAgPSBcc3FydHtcZnJhY3swLjIzNzl9ezQwMH19DQogICAgPSBcc3FydHswLjAwMDU5NDc1fQ0KICAgIFxhcHByb3ggMC4wMjQ0DQpcXQ0KDQotICoqUnVtdXMgQ0kgcHJvcG9yc2kgKFopOioqDQoNClxbDQpDSSA9IFxoYXR7cH0gXHBtIHpfe1xhbHBoYS8yfSBcY2RvdCBTRQ0KXF0NCg0KLS0tDQoNCioqMS4gQ29uZmlkZW5jZSBJbnRlcnZhbCA5MCUqKg0KDQotICoqTmlsYWkga3JpdGlzOioqDQpcWw0Kel97MC45NX0gPSAxLjY0NQ0KXF0NCg0KLSAqKk1hcmdpbiBvZiBFcnJvcjoqKg0KXFsNCk1FID0gMS42NDUgXHRpbWVzIDAuMDI0NCA9IDAuMDQwMQ0KXF0NCg0KLSAqKkNJIDkwXCU6KioNClxbDQowLjM5IFxwbSAwLjA0MDEgXDtcUmlnaHRhcnJvd1w7ICgwLjM0OTksXDsgMC40MzAxKQ0KXF0NCg0KLS0tDQoNCioqMi4gQ29uZmlkZW5jZSBJbnRlcnZhbCA5NSUqKg0KDQotICoqTmlsYWkga3JpdGlzOioqDQpcWw0Kel97MC45NzV9ID0gMS45NjANClxdDQoNCi0gKipNYXJnaW4gb2YgRXJyb3I6KioNClxbDQpNRSA9IDEuOTYwIFx0aW1lcyAwLjAyNDQgPSAwLjA0NzgNClxdDQoNCi0gKipDSSA5NVwlOioqDQpcWw0KMC4zOSBccG0gMC4wNDc4IFw7XFJpZ2h0YXJyb3dcOyAoMC4zNDIyLFw7IDAuNDM3OCkNClxdDQoNCi0tLQ0KDQoqKjMuIENvbmZpZGVuY2UgSW50ZXJ2YWwgOTklKioNCg0KLSAqKk5pbGFpIGtyaXRpczoqKg0KXFsNCnpfezAuOTk1fSA9IDIuNTc2DQpcXQ0KDQotICoqTWFyZ2luIG9mIEVycm9yOioqDQpcWw0KTUUgPSAyLjU3NiBcdGltZXMgMC4wMjQ0ID0gMC4wNjI4DQpcXQ0KDQotICoqQ0kgOTlcJToqKg0KXFsNCjAuMzkgXHBtIDAuMDYyOCBcO1xSaWdodGFycm93XDsgKDAuMzI3MixcOyAwLjQ1MjgpDQpcXQ0KDQotLS0NCg0KIyMjICoqVmlzdWFsaXplIGFuZCBjb21wYXJlIHRoZSB0aHJlZSBpbnRlcnZhbHMuKioNCg0KYGBge3IgY2FjaGU9VFJVRSwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZmlnLndpZHRoPTExLjUsIGZpZy5oZWlnaHQ9NS44LCBmaWcuYWxpZ249ImNlbnRlciJ9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCiMgSW5wdXQgKENhc2UgU3R1ZHkgMykNCm4gPC0gNDAwDQp4IDwtIDE1Ng0KcGhhdCA8LSB4L24NCnNlIDwtIHNxcnQocGhhdCooMS1waGF0KS9uKQ0KDQojIFogY3JpdGljYWwgdmFsdWVzDQp6OTAgPC0gcW5vcm0oMC45NSkNCno5NSA8LSBxbm9ybSgwLjk3NSkNCno5OSA8LSBxbm9ybSgwLjk5NSkNCg0KIyBDSSBib3VuZHMNCkw5MCA8LSBwaGF0IC0gejkwKnNlOyBVOTAgPC0gcGhhdCArIHo5MCpzZQ0KTDk1IDwtIHBoYXQgLSB6OTUqc2U7IFU5NSA8LSBwaGF0ICsgejk1KnNlDQpMOTkgPC0gcGhhdCAtIHo5OSpzZTsgVTk5IDwtIHBoYXQgKyB6OTkqc2UNCg0KIyBLdXJ2YSBub3JtYWwgdXRrIHAtaGF0IChhcHByb3gpDQp4X21pbiA8LSBwaGF0IC0gNipzZQ0KeF9tYXggPC0gcGhhdCArIDYqc2UNCmdyaWR4IDwtIHNlcSh4X21pbiwgeF9tYXgsIGxlbmd0aC5vdXQgPSA0MDAwKQ0KDQpkZiA8LSBkYXRhLmZyYW1lKA0KICB4ID0gZ3JpZHgsDQogIHkgPSBkbm9ybShncmlkeCwgbWVhbiA9IHBoYXQsIHNkID0gc2UpDQopDQp5bWF4IDwtIG1heChkZiR5KQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgUEFMRVRURSAoY29jb2sgQ1NTIFNub3diYWxsKQ0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09DQpidXR0ZXIgPC0gIiNGOEY5QkEiDQpibHVzaCAgPC0gIiNGRkRERTIiDQptaXN0ICAgPC0gIiNFMkU1RTkiDQoNCmluayAgICA8LSAiIzM3NDE1MSINCm11dGVkICA8LSAiIzZCNzI4MCINCg0KdGVhbCAgIDwtICIjOENDMUI2Ig0KdGVhbF9kIDwtICIjNkVBRkExIg0KcGlua19kIDwtICIjRDdCNkI1Ig0KZ3JleV9kIDwtICIjOUNBM0FGIg0KDQojIFdhcm5hIENJDQpjOTlfY29sICA8LSBncmV5X2QNCmM5NV9jb2wgIDwtIHBpbmtfZA0KYzkwX2NvbCAgPC0gdGVhbF9kDQptZWFuX2NvbCA8LSB0ZWFsDQoNCiMgU2hhZGluZyBuZXN0ZWQNCmZpbGw5OSA8LSBtaXN0DQpmaWxsOTUgPC0gYmx1c2gNCmZpbGw5MCA8LSBidXR0ZXINCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgTEVHRU5EIEtBTkFOIChXQUpJQiBBREEgMyBCQVJJUykg4oCUIGFtYW4gZGFyaSBrZXBvdG9uZw0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCmxlZyA8LSBkYXRhLmZyYW1lKA0KICBsZXZlbCA9IGMoIjk5JSIsIjk1JSIsIjkwJSIpLA0KICB5ICAgICA9IHltYXggKiBjKDAuNzgsIDAuNjgsIDAuNTgpLA0KICBMICAgICA9IGMoTDk5LCBMOTUsIEw5MCksDQogIFUgICAgID0gYyhVOTksIFU5NSwgVTkwKSwNCiAgY29sICAgPSBjKGM5OV9jb2wsIGM5NV9jb2wsIGM5MF9jb2wpDQopDQoNCmxlZyR4MCAgIDwtIHhfbWF4ICsgMC4xMCpzZQ0KbGVnJHgxICAgPC0geF9tYXggKyAxLjIwKnNlDQpsZWckeGxhYiA8LSB4X21heCArIDEuMjgqc2UNCg0KZ2dwbG90KGRmLCBhZXMoeCwgeSkpICsNCiAgIyBTaGFkaW5nIG5lc3RlZA0KICBnZW9tX2FyZWEoZGF0YSA9IHN1YnNldChkZiwgeCA+PSBMOTkgJiB4IDw9IFU5OSksDQogICAgICAgICAgICBmaWxsID0gZmlsbDk5LCBhbHBoYSA9IDAuNTUpICsNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGYsIHggPj0gTDk1ICYgeCA8PSBVOTUpLA0KICAgICAgICAgICAgZmlsbCA9IGZpbGw5NSwgYWxwaGEgPSAwLjU1KSArDQogIGdlb21fYXJlYShkYXRhID0gc3Vic2V0KGRmLCB4ID49IEw5MCAmIHggPD0gVTkwKSwNCiAgICAgICAgICAgIGZpbGwgPSBmaWxsOTAsIGFscGhhID0gMC42NSkgKw0KDQogICMgT3V0bGluZQ0KICBnZW9tX2xpbmUobGluZXdpZHRoID0gMS4xLCBjb2xvciA9IGluaykgKw0KDQogICMgQmF0YXMgQ0kgKGRhc2hlZCkNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gYyhMOTksIFU5OSksIGxpbmV0eXBlID0gImRhc2hlZCIsDQogICAgICAgICAgICAgbGluZXdpZHRoID0gMS4wLCBjb2xvciA9IGM5OV9jb2wsIGFscGhhID0gMC45KSArDQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IGMoTDk1LCBVOTUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLA0KICAgICAgICAgICAgIGxpbmV3aWR0aCA9IDEuMCwgY29sb3IgPSBjOTVfY29sLCBhbHBoYSA9IDAuOSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEw5MCwgVTkwKSwgbGluZXR5cGUgPSAiZGFzaGVkIiwNCiAgICAgICAgICAgICBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gYzkwX2NvbCwgYWxwaGEgPSAwLjk1KSArDQoNCiAgIyBNZWFuIGxpbmUgKyBwb2ludA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBwaGF0LCBsaW5ld2lkdGggPSAxLjYsIGNvbG9yID0gbWVhbl9jb2wpICsNCiAgZ2VvbV9wb2ludChhZXMoeCA9IHBoYXQsIHkgPSAwKSwgc2l6ZSA9IDMuMiwgY29sb3IgPSBtZWFuX2NvbCkgKw0KDQogICMgQmFyIGludGVydmFsIGRpIGJhd2FoDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5OSwgeGVuZCA9IFU5OSwgeSA9IHltYXgqMC4wMywgeWVuZCA9IHltYXgqMC4wMyksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5OV9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5NSwgeGVuZCA9IFU5NSwgeSA9IHltYXgqMC4wNiwgeWVuZCA9IHltYXgqMC4wNiksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5NV9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEw5MCwgeGVuZCA9IFU5MCwgeSA9IHltYXgqMC4wOSwgeWVuZCA9IHltYXgqMC4wOSksDQogICAgICAgICAgICAgICBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGM5MF9jb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQoNCiAgIyBMYWJlbCB0ZW5nYWgNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0gcGhhdCwgeSA9IHltYXgqMC45OCwNCiAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoInDMgiA9ICIsIHJvdW5kKHBoYXQsIDIpKSwNCiAgICAgICAgICAgY29sb3IgPSBtZWFuX2NvbCwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSA1KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHBoYXQsIHkgPSB5bWF4KjAuNzgsIGxhYmVsID0gIjk5JSIsDQogICAgICAgICAgIGNvbG9yID0gYzk5X2NvbCwgZm9udGZhY2UgPSAiYm9sZCIsIGFscGhhID0gMC45LCBzaXplID0gNikgKw0KICBhbm5vdGF0ZSgidGV4dCIsIHggPSBwaGF0LCB5ID0geW1heCowLjYyLCBsYWJlbCA9ICI5NSUiLA0KICAgICAgICAgICBjb2xvciA9IGM5NV9jb2wsIGZvbnRmYWNlID0gImJvbGQiLCBhbHBoYSA9IDAuOSwgc2l6ZSA9IDYpICsNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0gcGhhdCwgeSA9IHltYXgqMC40NiwgbGFiZWwgPSAiOTAlIiwNCiAgICAgICAgICAgY29sb3IgPSBjOTBfY29sLCBmb250ZmFjZSA9ICJib2xkIiwgYWxwaGEgPSAwLjk1LCBzaXplID0gNikgKw0KDQogICMgPT09PT09PSBMRUdFTkQgS0FOQU4gKDMgYmFyaXMpID09PT09PT0NCiAgZ2VvbV9zZWdtZW50KGRhdGEgPSBsZWcsDQogICAgICAgICAgICAgICBhZXMoeCA9IHgwLCB4ZW5kID0geDEsIHkgPSB5LCB5ZW5kID0geSksDQogICAgICAgICAgICAgICBpbmhlcml0LmFlcyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgbGluZXdpZHRoID0gNCwgY29sb3IgPSBsZWckY29sLCBsaW5lZW5kID0gInJvdW5kIikgKw0KICBnZW9tX2xhYmVsKGRhdGEgPSBsZWcsDQogICAgICAgICAgICAgYWVzKHggPSB4bGFiLCB5ID0geSwNCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBzcHJpbnRmKCJDTCAlcyA9ICglLjRmLCAlLjRmKSIsIGxldmVsLCBMLCBVKSksDQogICAgICAgICAgICAgaW5oZXJpdC5hZXMgPSBGQUxTRSwNCiAgICAgICAgICAgICBoanVzdCA9IDAsDQogICAgICAgICAgICAgbGFiZWwuc2l6ZSA9IDAsDQogICAgICAgICAgICAgZmlsbCA9IG1pc3QsIGNvbG9yID0gaW5rLCBmb250ZmFjZSA9ICJib2xkIikgKw0KDQogIGxhYnMoDQogICAgdGl0bGUgPSAiQ29uZmlkZW5jZSBJbnRlcnZhbHMgdW50dWsgUHJvcG9yc2kgKE5vcm1hbCBBcHByb3guKSIsDQogICAgc3VidGl0bGUgPSBwYXN0ZTAoIm4gPSAiLCBuLCAiLCB4ID0gIiwgeCwgIiwgcMyCID0gIiwgcm91bmQocGhhdCwgMiksDQogICAgICAgICAgICAgICAgICAgICAgIiwgU0UgPSAiLCByb3VuZChzZSwgNCkpLA0KICAgIHggPSAiUHJvcG9yc2kgKENUUikiLCB5ID0gIkRlbnNpdHkiDQogICkgKw0KDQogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYyh4X21pbiwgeF9tYXggKyAzLjYqc2UpLCBjbGlwID0gIm9mZiIpICsNCg0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIwLCBoanVzdCA9IDAuNSwgY29sb3IgPSBpbmspLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBoanVzdCA9IDAuNSwgY29sb3IgPSBtdXRlZCksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBjb2xvciA9IGluayksDQogICAgYXhpcy50ZXh0ICA9IGVsZW1lbnRfdGV4dChjb2xvciA9IG11dGVkKSwNCiAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG9yID0gIiNFNUU3RUIiKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KDQogICAgIyBiaWFyIG55YXR1IHNhbWEgQ1NTDQogICAgcGxvdC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQoNCiAgICAjIHJ1YW5nIGthbmFuIGJ1YXQgbGVnZW5kDQogICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMTAsIDIwMCwgMTAsIDEwKQ0KICApDQpgYGANCg0KLS0tDQoNCiMjIyAqKkV4cGxhaW4gY29uZmlkZW5jZSBsZXZlbCBhZmZlY3RzIGRlY2lzaW9uLW1ha2luZyBpbiBwcm9kdWN0IGV4cGVyaW1lbnRzLioqDQoNCkRhbGFtIGVrc3BlcmltZW4gcHJvZHVrIChtaXNhbG55YSBBL0IgdGVzdGluZyBDVEEpLCAqKmNvbmZpZGVuY2UgbGV2ZWwgbWVuZW50dWthbiBzZWJlcmFwYSDigJxrZXRhdOKAnSBraXRhIHNhYXQgbWVueWltcHVsa2FuIENUUiBzZWJlbmFybnlhKiouIERhcmkgdmlzdWFsaXNhc2ksIHRlcmxpaGF0IGJhaHdhICoqQ0kgOTAlIHBhbGluZyBzZW1waXQqKiwgKipDSSA5NSUgbGViaWggbGViYXIqKiwgZGFuICoqQ0kgOTklIHBhbGluZyBsZWJhci4qKiBhcnRpbnlhICoqc2VtYWtpbiB0aW5nZ2kgY29uZmlkZW5jZSBsZXZlbCwgc2VtYWtpbiBsZWJhciByZW50YW5nIENUUiB5YW5nIGRpYW5nZ2FwIG1hc3VrIGFrYWwqKiwga2FyZW5hIGtpdGEgaW5naW4gKiprZXlha2luYW4geWFuZyBsZWJpaCB0aW5nZ2kuKioNCg0KKipSZWtvbWVuZGFzaSB1bnR1ayBwZW5nYW1iaWxhbiBrZXB1dHVzYW46KioNCg0KLSAqKkNvbmZpZGVuY2UgbGV2ZWwgdGluZ2dpICg5OSUpKiog4oaSIGludGVydmFsIGxlYmloIGxlYmFyIOKGkiBrZXB1dHVzYW4gbGViaWgga29uc2VydmF0aWYvYW1hbiAocmlzaWtvIHNhbGFoIGtsYWltIGxlYmloIGtlY2lsKSwgdGV0YXBpIGJpc2EgbGViaWggc2VyaW5nIOKAnGJlbHVtIGN1a3VwIGJ1a3Rp4oCdICoqdW50dWsgbWVuZ2FtYmlsIGtlcHV0dXNhbiBjZXBhdC4qKg0KDQotICoqQ29uZmlkZW5jZSBsZXZlbCBsZWJpaCByZW5kYWggKDkwJSkqKiDihpIgaW50ZXJ2YWwgbGViaWggc2VtcGl0IOKGkiBrZXB1dHVzYW4gbGViaWggY2VwYXQgZGFuIHJlc3BvbnNpZiwgdGV0YXBpICoqcmlzaWtvbnlhIGxlYmloIGJlc2FyIGRpYmFuZGluZyA5NSUvOTklLioqDQoNCioqUmVrb21lbmRhc2k6KioNCg0KLSAqKlVudHVrIGtlcHV0dXNhbiBoaWdoLXJpc2sgKHJvbGxvdXQgYmVzYXIsIGRhbXBhayByZXZlbnVlIGJlc2FyLCBiaWF5YSB0aW5nZ2kpKiog4oaSIGxlYmloIGNvY29rIHBha2FpIDk1JeKAkzk5JS4NCg0KLSAqKlVudHVrIGtlcHV0dXNhbiBsb3ctcmlzayAoaXRlcmFzaSBVSSBrZWNpbCwgZWtzcGxvcmFzaSBhd2FsKSoqIOKGkiA5MCXigJM5NSUgYmlhc2FueWEgc3VkYWggY3VrdXAuDQoNCi0tLQ0KDQojIyBDYXNlIFN0dWR5IDQgDQoNCioqUHJlY2lzaW9uIENvbXBhcmlzb24gKFotVGVzdCB2cyB0LVRlc3QpOioqIFR3byBkYXRhIHRlYW1zIG1lYXN1cmUgKipBUEkgbGF0ZW5jeSAoaW4gbWlsbGlzZWNvbmRzKSoqIHVuZGVyIGRpZmZlcmVudCBjb25kaXRpb25zLg0KDQpcYmVnaW57ZXFuYXJyYXkqfQ0KXHRleHR7VGVhbSBBOn0gXFwNCm4gJj0mIDM2IFxxdWFkIFx0ZXh0eyhzYW1wbGUgc2l6ZSl9IFxcDQpcYmFye3h9ICY9JiAyMTAgXHF1YWQgXHRleHR7KHNhbXBsZSBtZWFuKX0gXFwNClxzaWdtYSAmPSYgMjQgXHF1YWQgXHRleHR7KGtub3duIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uKX0gXFxbNnB0XQ0KDQpcdGV4dHtUZWFtIEI6fSBcXA0KbiAmPSYgMzYgXHF1YWQgXHRleHR7KHNhbXBsZSBzaXplKX0gXFwNClxiYXJ7eH0gJj0mIDIxMCBccXVhZCBcdGV4dHsoc2FtcGxlIG1lYW4pfSBcXA0KcyAmPSYgMjQgXHF1YWQgXHRleHR7KHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24pfQ0KXGVuZHtlcW5hcnJheSp9DQoNCg0KIyMjICoqSWRlbnRpZnkgdGhlIHN0YXRpc3RpY2FsIHRlc3QgdXNlZCBieSBlYWNoIHRlYW0uKioNCg0KKipUZWFtIEEqKiBtZW5nZ3VuYWthbiAqKlogY29uZmlkZW5jZSBpbnRlcnZhbCoqIHVudHVrIG1lYW4ga2FyZW5hICoqc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIGRpa2V0YWh1aSAoXChcc2lnbWEgPSAyNFwpKSoqLg0KDQpTZWRhbmdrYW4gKipUZWFtIEIqKiBtZW5nZ3VuYWthbiAqKnQgY29uZmlkZW5jZSBpbnRlcnZhbCoqIHVudHVrIG1lYW4ga2FyZW5hICoqc3RhbmRhciBkZXZpYXNpIHBvcHVsYXNpIHRpZGFrIGRpa2V0YWh1aSoqIGRhbiBkaWdhbnRpa2FuIG9sZWggc3RhbmRhciBkZXZpYXNpIHNhbXBlbCAoXChzID0gMjRcKSkgZGVuZ2FuIGRlcmFqYXQgYmViYXMNClwoZGYgPSBuIC0gMSA9IDM1XCkuDQoNCiMjIyAqKkNvbXB1dGUgQ29uZmlkZW5jZSBJbnRlcnZhbHMgZm9yIDkwJSwgOTUlLCBhbmQgOTklLioqDQoNCioqRGF0YSoqDQoNCi0gKipUZWFtIEE6KiogXChuID0gMzYsXCBcYmFye3h9ID0gMjEwLFwgXHNpZ21hID0gMjRcKSAoXChcc2lnbWFcKSBkaWtldGFodWkpDQoNCi0gKipUZWFtIEI6KiogXChuID0gMzYsXCBcYmFye3h9ID0gMjEwLFwgcyA9IDI0XCkgKFwoXHNpZ21hXCkgdGlkYWsgZGlrZXRhaHVpKQ0KDQoqKlN0YW5kYXJkIGVycm9yIChrZWR1YW55YSBzYW1hKToqKg0KDQpcWw0KU0UgPSBcZnJhY3syNH17XHNxcnR7MzZ9fSA9IFxmcmFjezI0fXs2fSA9IDQNClxdDQoNCi0tLQ0KDQoqKlRlYW0gQSAoWi1pbnRlcnZhbCwgXChcc2lnbWFcKSBrbm93bikqKg0KDQpcWw0KQ0kgPSBcYmFye3h9IFxwbSB6X3tcYWxwaGEvMn0gXGNkb3QgU0UNClxdDQoNCi0gKio5MFwlOioqDQpcWw0KMjEwIFxwbSAxLjY0NSg0KQ0KXDtcUmlnaHRhcnJvd1w7DQooMjAzLjQyMSxcOyAyMTYuNTc5KQ0KXF0NCg0KLSAqKjk1XCU6KioNClxbDQoyMTAgXHBtIDEuOTYwKDQpDQpcO1xSaWdodGFycm93XDsNCigyMDIuMTYwLFw7IDIxNy44NDApDQpcXQ0KDQotICoqOTlcJToqKg0KXFsNCjIxMCBccG0gMi41NzYoNCkNClw7XFJpZ2h0YXJyb3dcOw0KKDE5OS42OTYsXDsgMjIwLjMwNCkNClxdDQoNCi0tLQ0KDQoqKlRlYW0gQiAodC1pbnRlcnZhbCwgXChcc2lnbWFcKSB1bmtub3duLCBcKGRmID0gMzVcKSkqKg0KDQpcWw0KQ0kgPSBcYmFye3h9IFxwbSB0X3tcYWxwaGEvMiwzNX0gXGNkb3QgU0UNClxdDQoNCi0gKio5MFwlOioqDQpcWw0KMjEwIFxwbSAxLjY5MCg0KQ0KXDtcUmlnaHRhcnJvd1w7DQooMjAzLjI0MixcOyAyMTYuNzU4KQ0KXF0NCg0KLSAqKjk1XCU6KioNClxbDQoyMTAgXHBtIDIuMDMwKDQpDQpcO1xSaWdodGFycm93XDsNCigyMDEuODgwLFw7IDIxOC4xMjApDQpcXQ0KDQotICoqOTlcJToqKg0KXFsNCjIxMCBccG0gMi43MjQoNCkNClw7XFJpZ2h0YXJyb3dcOw0KKDE5OS4xMDUsXDsgMjIwLjg5NSkNClxdDQoNCi0tLQ0KDQojIyMgKipWaXN1YWxpemF0aW9uIGNvbXBhcmluZyBhbGwgaW50ZXJ2YWxzLioqDQpgYGB7ciBjYWNoZT1UUlVFLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9NiwgZmlnLmFsaWduPSJjZW50ZXIifQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQojID09PT0gSW5wdXQgQ2FzZSBTdHVkeSA0ID09PT0NCnhiYXIgIDwtIDIxMA0KbiAgICAgPC0gMzYNCnNpZ21hIDwtIDI0DQpTRSAgICA8LSBzaWdtYS9zcXJ0KG4pICAgIyA9IDQNCmRmX3QgIDwtIG4gLSAxICAgICAgICAgICAjID0gMzUNCg0KIyBDcml0aWNhbCB2YWx1ZXMNCno5MCA8LSBxbm9ybSgwLjk1KTsgICB6OTUgPC0gcW5vcm0oMC45NzUpOyB6OTkgPC0gcW5vcm0oMC45OTUpDQp0OTAgPC0gcXQoMC45NSwgZGZfdCk7IHQ5NSA8LSBxdCgwLjk3NSwgZGZfdCk7IHQ5OSA8LSBxdCgwLjk5NSwgZGZfdCkNCg0KIyBUZWFtIEEgKFopIGJvdW5kcw0KQTkwTCA8LSB4YmFyIC0gejkwKlNFOyBBOTBVIDwtIHhiYXIgKyB6OTAqU0UNCkE5NUwgPC0geGJhciAtIHo5NSpTRTsgQTk1VSA8LSB4YmFyICsgejk1KlNFDQpBOTlMIDwtIHhiYXIgLSB6OTkqU0U7IEE5OVUgPC0geGJhciArIHo5OSpTRQ0KDQojIFRlYW0gQiAodCkgYm91bmRzDQpCOTBMIDwtIHhiYXIgLSB0OTAqU0U7IEI5MFUgPC0geGJhciArIHQ5MCpTRQ0KQjk1TCA8LSB4YmFyIC0gdDk1KlNFOyBCOTVVIDwtIHhiYXIgKyB0OTUqU0UNCkI5OUwgPC0geGJhciAtIHQ5OSpTRTsgQjk5VSA8LSB4YmFyICsgdDk5KlNFDQoNCiMgPT09PSBDdXJ2ZSA9PT09DQp4X21pbiA8LSB4YmFyIC0gNipTRQ0KeF9tYXggPC0geGJhciArIDYqU0UNCnggPC0gc2VxKHhfbWluLCB4X21heCwgbGVuZ3RoLm91dCA9IDkwMCkNCmRmIDwtIGRhdGEuZnJhbWUoeCA9IHgsIHkgPSBkbm9ybSh4LCBtZWFuID0geGJhciwgc2QgPSBTRSkpDQp5bWF4IDwtIG1heChkZiR5KQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyBTTk9XQkFMTCBQQUxFVFRFIOKAlCBTRU1VQSBXQVJOQSBVVEFNQSBCRURBDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KbWlzdCAgIDwtICIjRTJFNUU5IiAgIyBjYXJkL3NvZnQNCmJsdXNoMiA8LSAiI0ZGRTRFOCIgICMgYmx1c2ggbGVtYnV0IChiZWRhIGRhcmkgI0ZGRERFMikNCmJ1dHRlcjI8LSAiI0Y4RjRCMyIgICMgYnV0dGVyIGxlbWJ1dCAoYmVkYSBkYXJpICNGOEY5QkEpDQoNCmluayAgICA8LSAiIzM3NDE1MSIgICMgb3V0bGluZS9kZW5zaXR5DQptZWFuX2MgPC0gIiM4Q0MxQjYiICAjIG1lYW4gKG1pbnQvdGVhbCkNCg0KIyBTaGFkaW5nIChUZWFtIEIgaW50ZXJ2YWxzKSDigJQgMyBiZWRhDQpzaGFkZTk5IDwtIG1pc3QNCnNoYWRlOTUgPC0gYmx1c2gyDQpzaGFkZTkwIDwtIGJ1dHRlcjINCg0KIyBUZWFtIEEgKFopIOKAlCAzIGJlZGEgKHRlYWwgZmFtaWx5KQ0KQTk5X2MgPC0gIiM1RjlGOTYiDQpBOTVfYyA8LSAiIzkzQjJBQyINCkE5MF9jIDwtICIjNkVBRkExIg0KDQojIFRlYW0gQiAodCkg4oCUIDMgYmVkYSAocGluay9ncmV5IGZhbWlseSkNCkI5OV9jIDwtICIjOUNBM0FGIg0KQjk1X2MgPC0gIiNEN0I2QjUiDQpCOTBfYyA8LSAiI0YxQzZDRSINCg0KIyA9PT09IHJ1YW5nIGthbmFuIGJ1YXQgbGVnZW5kIHRla3MgPT09PQ0KeF9yaWdodCA8LSB4X21heCArIDYqU0UNCg0KIyBkYXRhIGxlZ2VuZCBrYW5hbiAoYmlhciByYXBpICsga29uc2lzdGVuKQ0KbGVnQSA8LSBkYXRhLmZyYW1lKA0KICBsYWIgPSBjKCJDTCA5OSUiLCJDTCA5NSUiLCJDTCA5MCUiKSwNCiAgTCAgID0gYyhBOTlMLCBBOTVMLCBBOTBMKSwNCiAgVSAgID0gYyhBOTlVLCBBOTVVLCBBOTBVKSwNCiAgY29sID0gYyhBOTlfYywgQTk1X2MsIEE5MF9jKSwNCiAgeSAgID0geW1heCAqIGMoMC44MCwgMC43MiwgMC42NCkNCikNCmxlZ0IgPC0gZGF0YS5mcmFtZSgNCiAgbGFiID0gYygiQ0wgOTklIiwiQ0wgOTUlIiwiQ0wgOTAlIiksDQogIEwgICA9IGMoQjk5TCwgQjk1TCwgQjkwTCksDQogIFUgICA9IGMoQjk5VSwgQjk1VSwgQjkwVSksDQogIGNvbCA9IGMoQjk5X2MsIEI5NV9jLCBCOTBfYyksDQogIHkgICA9IHltYXggKiBjKDAuNDIsIDAuMzQsIDAuMjYpDQopDQoNCiMgcG9zaXNpIGdhcmlzICYga290YWsgbGVnZW5kIGthbmFuDQpsZWdBJHgwIDwtIHhfcmlnaHQ7IGxlZ0EkeDEgPC0geF9yaWdodCArIDIqU0U7IGxlZ0EkeGxhYiA8LSB4X3JpZ2h0ICsgMi4yKlNFDQpsZWdCJHgwIDwtIHhfcmlnaHQ7IGxlZ0IkeDEgPC0geF9yaWdodCArIDIqU0U7IGxlZ0IkeGxhYiA8LSB4X3JpZ2h0ICsgMi4yKlNFDQoNCmdncGxvdChkZiwgYWVzKHgsIHkpKSArDQoNCiAgIyBTaGFkaW5nIG5lc3RlZCAocGFrYWkgaW50ZXJ2YWwgVGVhbSBCICh0KSkNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGYsIHggPj0gQjk5TCAmIHggPD0gQjk5VSksIGZpbGwgPSBzaGFkZTk5LCBhbHBoYSA9IDAuNjApICsNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGYsIHggPj0gQjk1TCAmIHggPD0gQjk1VSksIGZpbGwgPSBzaGFkZTk1LCBhbHBoYSA9IDAuNjApICsNCiAgZ2VvbV9hcmVhKGRhdGEgPSBzdWJzZXQoZGYsIHggPj0gQjkwTCAmIHggPD0gQjkwVSksIGZpbGwgPSBzaGFkZTkwLCBhbHBoYSA9IDAuNzApICsNCg0KICAjIE91dGxpbmUgY3VydmUNCiAgZ2VvbV9saW5lKGxpbmV3aWR0aCA9IDEuMSwgY29sb3IgPSBpbmspICsNCg0KICAjIE1lYW4NCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0geGJhciwgbGluZXdpZHRoID0gMS42LCBjb2xvciA9IG1lYW5fYykgKw0KICBnZW9tX3BvaW50KGFlcyh4ID0geGJhciwgeSA9IDApLCBzaXplID0gMy4yLCBjb2xvciA9IG1lYW5fYykgKw0KDQogICMgVGVhbSBBIGRhc2hlZCAoWikg4oCUIDMgYmVkYQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEE5OUwsIEE5OVUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQTk5X2MsIGFscGhhID0gMC44NSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEE5NUwsIEE5NVUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQTk1X2MsIGFscGhhID0gMC44NSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEE5MEwsIEE5MFUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQTkwX2MsIGFscGhhID0gMC45MCkgKw0KDQogICMgVGVhbSBCIGRhc2hlZCAodCkg4oCUIDMgYmVkYQ0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEI5OUwsIEI5OVUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQjk5X2MsIGFscGhhID0gMC44NSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEI5NUwsIEI5NVUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQjk1X2MsIGFscGhhID0gMC44NSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKEI5MEwsIEI5MFUpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBsaW5ld2lkdGggPSAxLjAsIGNvbG9yID0gQjkwX2MsIGFscGhhID0gMC45NSkgKw0KDQogICMgQmFycyBiYXdhaCDigJQgVGVhbSBCIChsZWJpaCBiYXdhaCkNCiAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gQjk5TCwgeGVuZCA9IEI5OVUsIHkgPSB5bWF4KjAuMDMsIHllbmQgPSB5bWF4KjAuMDMpLCBsaW5ld2lkdGggPSA0LCBjb2xvciA9IEI5OV9jLCBsaW5lZW5kID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoYWVzKHggPSBCOTVMLCB4ZW5kID0gQjk1VSwgeSA9IHltYXgqMC4wNiwgeWVuZCA9IHltYXgqMC4wNiksIGxpbmV3aWR0aCA9IDQsIGNvbG9yID0gQjk1X2MsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEI5MEwsIHhlbmQgPSBCOTBVLCB5ID0geW1heCowLjA5LCB5ZW5kID0geW1heCowLjA5KSwgbGluZXdpZHRoID0gNCwgY29sb3IgPSBCOTBfYywgbGluZWVuZCA9ICJyb3VuZCIpICsNCg0KICAjIEJhcnMgYmF3YWgg4oCUIFRlYW0gQSAobGViaWggYXRhcykNCiAgZ2VvbV9zZWdtZW50KGFlcyh4ID0gQTk5TCwgeGVuZCA9IEE5OVUsIHkgPSB5bWF4KjAuMTIsIHllbmQgPSB5bWF4KjAuMTIpLCBsaW5ld2lkdGggPSA0LCBjb2xvciA9IEE5OV9jLCBsaW5lZW5kID0gInJvdW5kIikgKw0KICBnZW9tX3NlZ21lbnQoYWVzKHggPSBBOTVMLCB4ZW5kID0gQTk1VSwgeSA9IHltYXgqMC4xNSwgeWVuZCA9IHltYXgqMC4xNSksIGxpbmV3aWR0aCA9IDQsIGNvbG9yID0gQTk1X2MsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fc2VnbWVudChhZXMoeCA9IEE5MEwsIHhlbmQgPSBBOTBVLCB5ID0geW1heCowLjE4LCB5ZW5kID0geW1heCowLjE4KSwgbGluZXdpZHRoID0gNCwgY29sb3IgPSBBOTBfYywgbGluZWVuZCA9ICJyb3VuZCIpICsNCg0KICAjIENlbnRlciBsYWJlbHMgKHBha2FpIHdhcm5hIGJlZGEgdGlhcCBsZXZlbCBiaWFyIGtvbnNpc3RlbikNCiAgYW5ub3RhdGUoInRleHQiLCB4ID0geGJhciwgeSA9IHltYXgqMC45OCwgbGFiZWwgPSBwYXN0ZTAoIlx1MDNCQyA9ICIsIHhiYXIpLA0KICAgICAgICAgICBjb2xvciA9IG1lYW5fYywgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSA1KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhiYXIsIHkgPSB5bWF4KjAuNzgsIGxhYmVsID0gIjk5JSIsIGNvbG9yID0gQTk5X2MsIGZvbnRmYWNlID0gImJvbGQiLCBhbHBoYSA9IDAuOTUsIHNpemUgPSA2KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhiYXIsIHkgPSB5bWF4KjAuNjIsIGxhYmVsID0gIjk1JSIsIGNvbG9yID0gQTk1X2MsIGZvbnRmYWNlID0gImJvbGQiLCBhbHBoYSA9IDAuOTUsIHNpemUgPSA2KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhiYXIsIHkgPSB5bWF4KjAuNDYsIGxhYmVsID0gIjkwJSIsIGNvbG9yID0gQTkwX2MsIGZvbnRmYWNlID0gImJvbGQiLCBhbHBoYSA9IDAuOTUsIHNpemUgPSA2KSArDQoNCiAgIyA9PT09IFJpZ2h0LXNpZGUgbGVnZW5kIGxhYmVscyA9PT09DQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhfcmlnaHQsIHkgPSB5bWF4KjAuODgsIGxhYmVsID0gIlRlYW0gQSAoWiwgz4Mga25vd24pIiwgaGp1c3QgPSAwLCBmb250ZmFjZSA9ICJib2xkIiwgY29sb3IgPSBpbmspICsNCiAgZ2VvbV9zZWdtZW50KGRhdGEgPSBsZWdBLCBhZXMoeCA9IHgwLCB4ZW5kID0geDEsIHkgPSB5LCB5ZW5kID0geSksDQogICAgICAgICAgICAgICBpbmhlcml0LmFlcyA9IEZBTFNFLCBsaW5ld2lkdGggPSA0LCBjb2xvciA9IGxlZ0EkY29sLCBsaW5lZW5kID0gInJvdW5kIikgKw0KICBnZW9tX2xhYmVsKGRhdGEgPSBsZWdBLA0KICAgICAgICAgICAgIGFlcyh4ID0geGxhYiwgeSA9IHksDQogICAgICAgICAgICAgICAgIGxhYmVsID0gc3ByaW50ZigiJXMgPSAoJS4zZiwgJS4zZikiLCBsYWIsIEwsIFUpKSwNCiAgICAgICAgICAgICBpbmhlcml0LmFlcyA9IEZBTFNFLA0KICAgICAgICAgICAgIGhqdXN0ID0gMCwgbGFiZWwuc2l6ZSA9IDAsDQogICAgICAgICAgICAgZmlsbCA9IG1pc3QsIGNvbG9yID0gaW5rLCBmb250ZmFjZSA9ICJib2xkIikgKw0KDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IHhfcmlnaHQsIHkgPSB5bWF4KjAuNTAsIGxhYmVsID0gIlRlYW0gQiAodCwgz4MgdW5rbm93bikiLCBoanVzdCA9IDAsIGZvbnRmYWNlID0gImJvbGQiLCBjb2xvciA9IGluaykgKw0KICBnZW9tX3NlZ21lbnQoZGF0YSA9IGxlZ0IsIGFlcyh4ID0geDAsIHhlbmQgPSB4MSwgeSA9IHksIHllbmQgPSB5KSwNCiAgICAgICAgICAgICAgIGluaGVyaXQuYWVzID0gRkFMU0UsIGxpbmV3aWR0aCA9IDQsIGNvbG9yID0gbGVnQiRjb2wsIGxpbmVlbmQgPSAicm91bmQiKSArDQogIGdlb21fbGFiZWwoZGF0YSA9IGxlZ0IsDQogICAgICAgICAgICAgYWVzKHggPSB4bGFiLCB5ID0geSwNCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBzcHJpbnRmKCIlcyA9ICglLjNmLCAlLjNmKSIsIGxhYiwgTCwgVSkpLA0KICAgICAgICAgICAgIGluaGVyaXQuYWVzID0gRkFMU0UsDQogICAgICAgICAgICAgaGp1c3QgPSAwLCBsYWJlbC5zaXplID0gMCwNCiAgICAgICAgICAgICBmaWxsID0gbWlzdCwgY29sb3IgPSBpbmssIGZvbnRmYWNlID0gImJvbGQiKSArDQoNCiAgbGFicygNCiAgICB0aXRsZSA9ICJWaXN1YWxpemF0aW9uIENvbXBhcmluZyBBbGwgQ29uZmlkZW5jZSBJbnRlcnZhbHMgKFRlYW0gQSB2cyBUZWFtIEIpIiwNCiAgICBzdWJ0aXRsZSA9ICJuID0gMzYsIHjMhCA9IDIxMCwgU0UgPSA0IHwgVGVhbSBBIHVzZXMgWiAoz4Mga25vd24pLCBUZWFtIEIgdXNlcyB0IChkZiA9IDM1KSIsDQogICAgeCA9ICJNZWFuIChzY29yZSkiLCB5ID0gIkRlbnNpdHkiDQogICkgKw0KDQogIHNjYWxlX3hfY29udGludW91cygNCiAgICBicmVha3MgPSBzZXEoeF9taW4sIHhfbWF4LCBieSA9IDUpLA0KICAgIGxpbWl0cyA9IGMoeF9taW4sIHhfcmlnaHQgKyAxMCpTRSkNCiAgKSArDQogIGNvb3JkX2NhcnRlc2lhbihjbGlwID0gIm9mZiIpICsNCg0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDE4LCBoanVzdCA9IDAuNSwgY29sb3IgPSBpbmspLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDExLCBoanVzdCA9IDAuNSwgY29sb3IgPSAiIzZCNzI4MCIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgY29sb3IgPSBpbmspLA0KICAgIGF4aXMudGV4dCAgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiIzZCNzI4MCIpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI0U1RTdFQiIpLA0KICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQoNCiAgICAjIG55YXR1IHNhbWEgQ1NTDQogICAgcGxvdC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQoNCiAgICAjIHJ1YW5nIGthbmFuIGJpYXIgbGVnZW5kIHRpZGFrIGtlcG90b25nDQogICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMTAsIDI0MCwgMTAsIDEwKQ0KICApDQpgYGANCg0KLS0tDQoNCiMjIyAqKkV4cGxhaW4gd2h5IHRoZSBpbnRlcnZhbCB3aWR0aHMgZGlmZmVyLCBldmVuIHdpdGggc2ltaWxhciBkYXRhLioqDQoNCk1lc2tpcHVuIFRlYW0gQSBkYW4gVGVhbSBCIHB1bnlhIHJpbmdrYXNhbiBkYXRhIHlhbmcgKip0ZXJsaWhhdCBzYW1hKiogDQooXChuID0gMzZcKSwgXChcYmFye3h9ID0gMjEwXCksIGRhbiB1a3VyYW4gc2ViYXJhbiAyNCksICoqbGViYXIgaW50ZXJ2YWxueWEgdGV0YXAgYmVyYmVkYSoqIGthcmVuYSBzdW1iZXIga2V0aWRha3Bhc3RpYW5ueWEgYmVkYS4gKipUZWFtIEEgbWVtYWthaSBaLWludGVydmFsIGthcmVuYSBcKFxzaWdtYVwpIHBvcHVsYXNpIGJlbmFyLWJlbmFyIGRpa2V0YWh1aSwqKiBzZWhpbmdnYSBrZXRpZGFrcGFzdGlhbiBoYW55YSBiZXJhc2FsIGRhcmkgcHJvc2VzIHNhbXBsaW5nLiANCg0KU2VtZW50YXJhIGl0dSAqKlRlYW0gQiBtZW1ha2FpIHQtaW50ZXJ2YWwga2FyZW5hIFwoXHNpZ21hXCkgdGlkYWsgZGlrZXRhaHVpKiogZGFuIGhhcnVzIGRpcGVya2lyYWthbiBkYXJpIHNhbXBlbCAocGFrYWkgXChzXCkpLCBzZWhpbmdnYSBhZGEga2V0aWRha3Bhc3RpYW4gdGFtYmFoYW4uIA0KDQoqKkFraWJhdG55YSoqLCBuaWxhaSBrcml0aXMgZGlzdHJpYnVzaSB0IHVudHVrIGxldmVsIGtlcGVyY2F5YWFuIHlhbmcgc2FtYSAqKnNlZGlraXQgbGViaWggYmVzYXIgZGFyaXBhZGEgbmlsYWkgeioqLCBzZWhpbmdnYSAqKm1hcmdpbiBvZiBlcnJvciBtZW5qYWRpIGxlYmloIGJlc2FyIGRhbiBpbnRlcnZhbCBUZWFtIEIgamFkaSBsZWJpaCBsZWJhci4qKiANCg0KKipKYWRpKiosIHBlcmJlZGFhbiBsZWJhciBpbnRlcnZhbCB0ZXJ1dGFtYSBrYXJlbmEgdC1pbnRlcnZhbCBsZWJpaCBrb25zZXJ2YXRpZiBzYWF0IFwoXHNpZ21hXCkgdGlkYWsgZGlrZXRhaHVpLg0KDQojIyBDYXNlIFN0dWR5IDUNCg0KKipPbmUtU2lkZWQgQ29uZmlkZW5jZSBJbnRlcnZhbDoqKiBBICoqU29mdHdhcmUgYXMgYSBTZXJ2aWNlIChTYWFTKSoqIGNvbXBhbnkgd2FudHMgdG8gZW5zdXJlIHRoYXQgKiphdCBsZWFzdCA3MCUgb2Ygd2Vla2x5IGFjdGl2ZSB1c2VycyoqIHV0aWxpemUgYSBwcmVtaXVtIGZlYXR1cmUuDQoNCkZyb20gdGhlIGV4cGVyaW1lbnQ6DQoNCiQkDQpcYmVnaW57ZXFuYXJyYXkqfQ0KbiAmPSYgMjUwIFxxdWFkIFx0ZXh0eyh0b3RhbCB1c2Vycyl9IFxcDQp4ICY9JiAxODUgXHF1YWQgXHRleHR7KGFjdGl2ZSBwcmVtaXVtIHVzZXJzKX0NClxlbmR7ZXFuYXJyYXkqfQ0KJCQNCg0KTWFuYWdlbWVudCBpcyBvbmx5IGludGVyZXN0ZWQgaW4gdGhlICoqbG93ZXIgYm91bmQqKiBvZiB0aGUgZXN0aW1hdGUuDQoNCg0KIyMjIElkZW50aWZ5IHRoZSB0eXBlIG9mIENvbmZpZGVuY2UgSW50ZXJ2YWwgYW5kIHRoZSBhcHByb3ByaWF0ZSB0ZXN0Lg0KDQpDYXNlIFN0dWR5IDUgbWVuZ2d1bmFrYW4gKipjb25maWRlbmNlIGludGVydmFsIHNhdHUgc2lzaSAob25lLXNpZGVkKSoqIGRlbmdhbiBmb2t1cyBwYWRhIGJhdGFzIGJhd2FoIGl0dSBzZWJhZ2FpIHByb3BvcnNpIHBlbmdndW5hIGFrdGlmIHlhbmcgbWVtYWthaSBmaXR1ciBwcmVtaXVtLiANCg0KTWV0b2RlIHlhbmcgdGVwYXQgYWRhbGFoIFx0ZXh0aXR7KipvbmUtcHJvcG9ydGlvbiBaIGNvbmZpZGVuY2UgaW50ZXJ2YWwgKGxvd2VyIGJvdW5kKSoqfSwgKiprYXJlbmEgcGFyYW1ldGVyIHlhbmcgZGllc3RpbWFzaSBhZGFsYWggcHJvcG9yc2kgXChwXCkgZGFuIHVrdXJhbiBzYW1wZWwgY3VrdXAgYmVzYXIqKiAoXChuID0gMjUwXCkpIHNlaGluZ2dhIHBlbmRla2F0YW4gbm9ybWFsIGRhcGF0IGRpZ3VuYWthbi4gDQoNCkthcmVuYSAqKnBlcnVzYWhhYW4gaW5naW4gbWVtYXN0aWthbiDigJxtaW5pbWFsIDcwXCXigJ0qKiwgYW5hbGlzaXMgaW5pIGp1Z2Egc2VqYWxhbiBkZW5nYW4gcGVuZ3VqaWFuIHNhdHUgYXJhaCB1bnR1ayB0YXJnZXQsIHlhaXR1DQpcWw0KSF8wIDogcCBcbGUgMC43MA0KXHF1YWQgXHRleHR7dmVyc3VzfSBccXVhZA0KSF8xIDogcCA+IDAuNzAuDQpcXQ0KDQojIyMgKipDb21wdXRlIHRoZSBvbmUtc2lkZWQgbG93ZXIgQ29uZmlkZW5jZSBJbnRlcnZhbCoqDQogICAtICQ5MFwlJA0KICAgLSAkOTVcJSQNCiAgIC0gJDk5XCUkDQogICANCioqRGF0YToqKg0KDQpcWw0KbiA9IDI1MCxccXVhZCB4ID0gMTg1LFxxdWFkIFxoYXR7cH0gPSBcZnJhY3t4fXtufSA9IFxmcmFjezE4NX17MjUwfSA9IDAuNzQNClxdDQoNCi0gKipIaXR1bmcgU3RhbmRhcmQgRXJyb3IgKFNFKSBwcm9wb3JzaToqKg0KDQpcWw0KU0UgPSBcc3FydHtcZnJhY3tcaGF0e3B9KDEgLSBcaGF0e3B9KX17bn19DQogICAgPSBcc3FydHtcZnJhY3swLjc0KDEgLSAwLjc0KX17MjUwfX0NCiAgICA9IFxzcXJ0e1xmcmFjezAuNzQgXGNkb3QgMC4yNn17MjUwfX0NCiAgICA9IFxzcXJ0ezAuMDAwNzY5Nn0NCiAgICBcYXBwcm94IDAuMDI3NzQNClxdDQoNCi0gKipSdW11cyBvbmUtc2lkZWQgbG93ZXIgQ0kgKFopOioqDQoNClBhZGEgY29uZmlkZW5jZSBpbnRlcnZhbCBkdWEgc2lzaSwga2l0YSBiaWFzYW55YSBtZW5naGl0dW5nIGR1YSBiYXRhczoNCg0KXFsNCkNJID0gXGhhdHtwfSBccG0gel97XGFscGhhLzJ9IFxjZG90IFNFDQpcXQ0KDQoqKk5hbXVuKiogcGFkYSBrYXN1cyBpbmkgbWFuYWplbWVuIGhhbnlhIHRlcnRhcmlrIHBhZGEgYmF0YXMgYmF3YWggKOKAnG1pbmltYWwgcHJvcG9yc2lueWEgYmVyYXBh4oCdKS4gDQoNCkthcmVuYSBpdHUgZGlndW5ha2FuIFx0ZXh0aXR7KipvbmUtc2lkZWQgbG93ZXIgY29uZmlkZW5jZSBpbnRlcnZhbCoqfSwgc2VoaW5nZ2Ega2l0YSAqKmhhbnlhIG1lbmdoaXR1bmcgYmF0YXMgYmF3YWgqKiB5YW5nIGRpbm90YXNpa2FuIGRlbmdhbiBcKExcKSwgZGkgbWFuYSBcKExcKSBhZGFsYWggc2luZ2thdGFuIGRhcmkgXHRleHRpdHtsb3dlciBib3VuZH0gKiooYmF0YXMgYmF3YWgpLioqDQoNClVudHVrIGNvbmZpZGVuY2UgbGV2ZWwgXChDXCksIGJhdGFzIGJhd2FoIG9uZS1zaWRlZCBkaXR1bGlzOg0KDQpcWw0KTCA9IFxoYXR7cH0gLSB6X0MgXGNkb3QgU0UNClxdDQoNCmRhbiBpbnRlcnZhbCBvbmUtc2lkZWQgZGFwYXQgZGl0dWxpc2thbiBzZWJhZ2FpOg0KDQpcWw0KKEwsXCwgMSkNClxdDQoNCmthcmVuYSBuaWxhaSBwcm9wb3JzaSBtYWtzaW11bSBhZGFsYWggMS4NCg0KLS0tDQoNCioqMS4gT25lLXNpZGVkIGxvd2VyIENJIDkwJSoqDQoNCi0gKipOaWxhaSBrcml0aXM6KioNClxbDQp6X3swLjkwfSA9IDEuMjgyDQpcXQ0KDQotICoqTWFyZ2luIG9mIEVycm9yOioqDQpcWw0KTUUgPSAxLjI4MiBcdGltZXMgMC4wMjc3NCA9IDAuMDM1NTUNClxdDQoNCi0gKipMb3dlciBib3VuZCA5MFwlOioqDQpcWw0KTCA9IDAuNzQgLSAwLjAzNTU1ID0gMC43MDQ0NQ0KXF0NCg0KSmFkaSBvbmUtc2lkZWQgbG93ZXIgQ0kgOTBcJToNClxbDQooMC43MDQ0NSxcOyAxKQ0KXF0NCg0KLS0tDQoNCioqMi4gT25lLXNpZGVkIGxvd2VyIENJIDk1JSoqDQoNCi0gKipOaWxhaSBrcml0aXM6KioNClxbDQp6X3swLjk1fSA9IDEuNjQ1DQpcXQ0KDQotICoqTWFyZ2luIG9mIEVycm9yOioqDQpcWw0KTUUgPSAxLjY0NSBcdGltZXMgMC4wMjc3NCA9IDAuMDQ1NjMNClxdDQoNCi0gKipMb3dlciBib3VuZCA5NVwlOioqDQpcWw0KTCA9IDAuNzQgLSAwLjA0NTYzID0gMC42OTQzNw0KXF0NCg0KSmFkaSBvbmUtc2lkZWQgbG93ZXIgQ0kgOTVcJToNClxbDQooMC42OTQzNyxcOyAxKQ0KXF0NCg0KLS0tDQoNCiMjIyAqKlZpc3VhbGl6ZSB0aGUgbG93ZXIgYm91bmRzIGZvciBhbGwgY29uZmlkZW5jZSBsZXZlbHMuKioNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD01LjIsIGZpZy5hbGlnbj0iY2VudGVyIn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PQ0KIyBQYWxldCB3YXJuYSBrYW11DQojID09PT09PT09PT09PT09PT09PT09PT09DQpidXR0ZXIgPC0gIiNGOEY5QkEiDQpibHVzaCAgPC0gIiNGRkRERTIiDQptaXN0ICAgPC0gIiNFMkU1RTkiDQoNCmluayAgICA8LSAiIzM3NDE1MSINCm11dGVkICA8LSAiIzZCNzI4MCINCg0KdGVhbCAgIDwtICIjOENDMUI2Ig0KdGVhbF9kIDwtICIjNkVBRkExIg0KcGlua19kIDwtICIjRDdCNkI1Ig0KZ3JleV9kIDwtICIjOUNBM0FGIg0KDQojID09PT09PT09PT09PT09PT09PT09PT09DQojIERhdGEgQ2FzZSBTdHVkeSA1DQojID09PT09PT09PT09PT09PT09PT09PT09DQpuIDwtIDI1MA0KeCA8LSAxODUNCnBoYXQgPC0geC9uDQpTRSA8LSBzcXJ0KHBoYXQqKDEgLSBwaGF0KS9uKQ0KDQp6OTAgPC0gcW5vcm0oMC45MCk7IHo5NSA8LSBxbm9ybSgwLjk1KTsgejk5IDwtIHFub3JtKDAuOTkpDQpMOTAgPC0gcGhhdCAtIHo5MCpTRQ0KTDk1IDwtIHBoYXQgLSB6OTUqU0UNCkw5OSA8LSBwaGF0IC0gejk5KlNFDQoNCnRhcmdldCA8LSAwLjcwDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT0NCiMgRGVuc2l0eSAoTm9ybWFsIGFwcHJveCkNCiMgPT09PT09PT09PT09PT09PT09PT09PT0NCnhtaW4gPC0gbWF4KDAsIHBoYXQgLSA0LjUqU0UpDQp4bWF4IDwtIG1pbigxLCBwaGF0ICsgNC41KlNFKQ0KDQpkZW5zX2RmIDwtIGRhdGEuZnJhbWUocCA9IHNlcSh4bWluLCB4bWF4LCBsZW5ndGgub3V0ID0gMjAwMCkpDQpkZW5zX2RmJHkgPC0gZG5vcm0oZGVuc19kZiRwLCBtZWFuID0gcGhhdCwgc2QgPSBTRSkNCm1heGQgPC0gbWF4KGRlbnNfZGYkeSkNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PQ0KIyBTaGFkaW5nOiBzZXRlbmdhaCBraXJpICsgMyBibG9rDQojID09PT09PT09PT09PT09PT09PT09PT09DQpzaGFkZV9kZiA8LSBzdWJzZXQoZGVuc19kZiwgcCA8PSBwaGF0KQ0Kc2hhZGVfZGYkYmxvayA8LSBOQQ0Kc2hhZGVfZGYkYmxva1tzaGFkZV9kZiRwID49IEw5OSAmIHNoYWRlX2RmJHAgPCAgTDk1XSA8LSAiOTklIg0Kc2hhZGVfZGYkYmxva1tzaGFkZV9kZiRwID49IEw5NSAmIHNoYWRlX2RmJHAgPCAgTDkwXSA8LSAiOTUlIg0Kc2hhZGVfZGYkYmxva1tzaGFkZV9kZiRwID49IEw5MCAmIHNoYWRlX2RmJHAgPD0gcGhhdF0gPC0gIjkwJSINCnNoYWRlX2RmIDwtIHN1YnNldChzaGFkZV9kZiwgIWlzLm5hKGJsb2spKQ0Kc2hhZGVfZGYkYmxvayA8LSBmYWN0b3Ioc2hhZGVfZGYkYmxvaywgbGV2ZWxzID0gYygiOTklIiwiOTUlIiwiOTAlIikpDQoNCiMgVGl0aWsgdGVuZ2FoIGJ1YXQgdGFybyB0ZWtzIGRpIHRpYXAgYmxvaw0KeDk5IDwtIChMOTkgKyBMOTUpLzINCng5NSA8LSAoTDk1ICsgTDkwKS8yDQp4OTAgPC0gKEw5MCArIHBoYXQpLzINCg0KYmxva19sYWJlbCA8LSBkYXRhLmZyYW1lKA0KICBibG9rID0gZmFjdG9yKGMoIjk5JSIsIjk1JSIsIjkwJSIpLCBsZXZlbHMgPSBjKCI5OSUiLCI5NSUiLCI5MCUiKSksDQogIHggPSBjKHg5OSwgeDk1LCB4OTApLA0KICB5ID0gbWF4ZCAqIDAuMjAsDQogIGxhYiA9IGMoIkNJIDk5JSIsICJDSSA5NSUiLCAiQ0kgOTAlIikNCikNCg0KDQojIEdhcmlzIGJhdGFzIChiZWRhIHdhcm5hICsgbGFiZWwpDQpsaW5lc19kZiA8LSBkYXRhLmZyYW1lKA0KICBDTCA9IGZhY3RvcihjKCI5OSUiLCI5NSUiLCI5MCUiKSwgbGV2ZWxzID0gYygiOTklIiwiOTUlIiwiOTAlIikpLA0KICBMICA9IGMoTDk5LCBMOTUsIEw5MCksDQogIHkgID0gbWF4ZCAqIDEuMDYsDQogIGxhYiA9IGMoc3ByaW50ZigiTDk5ID0gJS40ZiIsIEw5OSksDQogICAgICAgICAgc3ByaW50ZigiTDk1ID0gJS40ZiIsIEw5NSksDQogICAgICAgICAgc3ByaW50ZigiTDkwID0gJS40ZiIsIEw5MCkpDQopDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT0NCiMgV2FybmE6IHNlc3VhaSBwYWxldCBrYW11DQojID09PT09PT09PT09PT09PT09PT09PT09DQpmaWxsX2NvbHMgPC0gYygNCiAgIjk5JSIgPSBibHVzaCwNCiAgIjk1JSIgPSBidXR0ZXIsDQogICI5MCUiID0gdGVhbA0KKQ0KDQpsaW5lX2NvbHMgPC0gYygNCiAgIjk5JSIgPSBwaW5rX2QsDQogICI5NSUiID0gdGVhbF9kLA0KICAiOTAlIiA9IGdyZXlfZA0KKQ0KDQpnZ3Bsb3QoZGVuc19kZiwgYWVzKHAsIHkpKSArDQogICMgYmxvayB3YXJuYSAoc2V0ZW5nYWgga2lyaSkNCiAgZ2VvbV9hcmVhKA0KICAgIGRhdGEgPSBzaGFkZV9kZiwNCiAgICBhZXMoeCA9IHAsIHkgPSB5LCBmaWxsID0gYmxvaywgZ3JvdXAgPSBibG9rKSwNCiAgICBhbHBoYSA9IDAuNjIsIGluaGVyaXQuYWVzID0gRkFMU0UNCiAgKSArDQoNCiAgIyBkZW5zaXR5IGN1cnZlDQogIGdlb21fbGluZShjb2xvciA9IGluaywgc2l6ZSA9IDEuMDUpICsNCg0KICAjIGdhcmlzIHAtaGF0ICYgdGFyZ2V0DQogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IHBoYXQsIGxpbmV0eXBlID0gImRhc2hlZCIsIHNpemUgPSAxLCBjb2xvciA9IGluaykgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSB0YXJnZXQsIGxpbmV0eXBlID0gImRvdHRlZCIsIHNpemUgPSAxLCBjb2xvciA9IG11dGVkKSArDQoNCiAgIyBnYXJpcyBiYXRhcyBMOTkvTDk1L0w5MCAoYmVkYSB3YXJuYSkNCiAgZ2VvbV92bGluZSgNCiAgICBkYXRhID0gbGluZXNfZGYsDQogICAgYWVzKHhpbnRlcmNlcHQgPSBMLCBjb2xvciA9IENMKSwNCiAgICBsaW5ldHlwZSA9ICJzb2xpZCIsIHNpemUgPSAxLjE1DQogICkgKw0KDQogICMgbGFiZWwgZGkgYXRhcyBnYXJpcyAoTDk5L0w5NS9MOTApDQogIGdlb21fbGFiZWwoDQogICAgZGF0YSA9IGxpbmVzX2RmLA0KICAgIGFlcyh4ID0gTCwgeSA9IHksIGxhYmVsID0gcGFzdGUwKENMLCAiXG4iLCBsYWIpLCBjb2xvciA9IENMKSwNCiAgICBmaWxsID0gIiNFMkU1RTlDQyIsICAjIG1pc3QgdHJhbnNwYXJhbg0KICAgIGxhYmVsLnNpemUgPSAwLA0KICAgIHNpemUgPSAzLjIsIGZvbnRmYWNlID0gImJvbGQiLA0KICAgIHZqdXN0ID0gMCwgbGFiZWwuciA9IGdyaWQ6OnVuaXQoMC4xNSwgImxpbmVzIikNCiAgKSArDQoNCiAgIyB0ZWtzIGtldGVyYW5nYW4gZGkgREFMQU0gdGlhcCBibG9rDQogIGdlb21fdGV4dCgNCiAgICBkYXRhID0gYmxva19sYWJlbCwNCiAgICBhZXMoeCA9IHgsIHkgPSB5LCBsYWJlbCA9IGxhYiksDQogICAgc2l6ZSA9IDMuNCwgZm9udGZhY2UgPSAiYm9sZCIsDQogICAgbGluZWhlaWdodCA9IDAuOTUsIGNvbG9yID0gaW5rDQogICkgKw0KDQogICMgbGFiZWwgcC1oYXQgZGFuIHRhcmdldA0KICBhbm5vdGF0ZSgNCiAgICAidGV4dCIsIHggPSBwaGF0LCB5ID0gbWF4ZCoxLjIwLA0KICAgIGxhYmVsID0gc3ByaW50ZigicFx1MDMwMiA9ICUuMmYiLCBwaGF0KSwNCiAgICBmb250ZmFjZSA9ICJib2xkIiwgY29sb3IgPSBpbmsNCiAgKSArDQogIGFubm90YXRlKA0KICAgICJ0ZXh0IiwgeCA9IHRhcmdldCwgeSA9IG1heGQqMC45MiwNCiAgICBsYWJlbCA9ICJUYXJnZXQgMC43MCIsDQogICAgZm9udGZhY2UgPSAiYm9sZCIsIGNvbG9yID0gbXV0ZWQNCiAgKSArDQoNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gZmlsbF9jb2xzKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBsaW5lX2NvbHMpICsNCg0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGl6ZSAmIENvbXBhcmUgT25lLVNpZGVkIChMb3dlcikgQ29uZmlkZW5jZSBJbnRlcnZhbHMiLA0KICAgIHN1YnRpdGxlID0gIkJsb2sgd2FybmEgPSBhcmVhIGxvd2VyLXNpZGUgc2FtcGFpIHDMgiwgZ2FyaXMgYmVyd2FybmEgPSBsb3dlciBib3VuZCB0aWFwIGNvbmZpZGVuY2UgbGV2ZWwiLA0KICAgIHggPSAiUHJvcG9yc2kgU2FtcGVsIiwNCiAgICB5ID0gIkRlbnNpdHkiDQogICkgKw0KDQogIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYyhtYXgoMC42MiwgeG1pbiksIG1pbigwLjg1LCB4bWF4KSkpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNSwgY29sb3IgPSBpbmspLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSBtdXRlZCksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9IGluayksDQogICAgYXhpcy50ZXh0ICA9IGVsZW1lbnRfdGV4dChjb2xvciA9IG11dGVkKSwNCiAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAiI0U1RTdFQiIpLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAjIGJpYXIgbnlhdHUgc2FtYSBDU1MgYmFja2dyb3VuZCBrYW11DQogICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSksDQogICAgcGxvdC5iYWNrZ3JvdW5kICA9IGVsZW1lbnRfcmVjdChmaWxsID0gInRyYW5zcGFyZW50IiwgY29sb3IgPSBOQSkNCiAgKQ0KYGBgDQoNCi0tLQ0KDQojIyMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlICoqNzAlIHRhcmdldCoqIGlzIHN0YXRpc3RpY2FsbHkgc2F0aXNmaWVkLg0KDQpVbnR1ayBtZW5lbnR1a2FuICoqYXBha2FoIHRhcmdldCA3MFwlIOKAnHRlcnBlbnVoaSBzZWNhcmEgc3RhdGlzdGlr4oCdKiosIGtpdGEgYmFuZGluZ2thbiBiYXRhcyBiYXdhaCAobG93ZXIgYm91bmQpIG9uZS1zaWRlZCBDSSBkZW5nYW4gMC43MC4gKipKaWthIA0KXChMIFxnZSAwLjcwXCkqKiwgbWFrYSBraXRhIGJpc2EgeWFraW4gKHNlc3VhaSB0aW5na2F0IGNvbmZpZGVuY2UpIGJhaHdhIA0KcHJvcG9yc2kgc2ViZW5hcm55YSBzZXRpZGFrbnlhIDcwXCUuDQoNCioqRGFyaSBoYXNpbCB5YW5nIHN1ZGFoIGRpaGl0dW5nOioqDQoNCi0gKipMb3dlciBib3VuZCA5MFwlOioqDQpcWw0KTF97OTB9ID0gMC43MDQ0NQ0KXF0NCmxlYmloIGJlc2FyIGRhcmkgMC43MCBcKFxSaWdodGFycm93XCkgdGFyZ2V0IFx0ZXh0YmZ7dGVycGVudWhpfSBwYWRhIDkwXCUgY29uZmlkZW5jZS4NCg0KLSAqKkxvd2VyIGJvdW5kIDk1XCU6KioNClxbDQpMX3s5NX0gPSAwLjY5NDM3DQpcXQ0KbGViaWgga2VjaWwgZGFyaSAwLjcwIFwoXFJpZ2h0YXJyb3dcKSB0YXJnZXQgXHRleHRiZntiZWx1bSB0ZXJwZW51aGl9IHBhZGEgOTVcJSBjb25maWRlbmNlLg0KDQotICoqTG93ZXIgYm91bmQgOTlcJToqKg0KXFsNCkxfezk5fSA9IDAuNjc1NDYNClxdDQpsZWJpaCBrZWNpbCBkYXJpIDAuNzAgXChcUmlnaHRhcnJvd1wpIHRhcmdldCBcdGV4dGJme2JlbHVtIHRlcnBlbnVoaX0gcGFkYSA5OVwlIGNvbmZpZGVuY2UuDQoNCioqS2VzaW1wdWxhbm55YSwqKiB0YXJnZXQgNzBcJSBoYW55YSBkYXBhdCBkaW55YXRha2FuIHRlcnBlbnVoaSBzZWNhcmEgc3RhdGlzdGlrIA0KcGFkYSB0aW5na2F0IGtlcGVyY2F5YWFuIDkwXCUsIHRldGFwaSB0aWRhayB0ZXJwZW51aGkgamlrYSBwZXJ1c2FoYWFuIA0KbWVuc3lhcmF0a2FuIGtleWFraW5hbiB5YW5nIGxlYmloIGtldGF0IHNlcGVydGkgOTVcJSBhdGF1IDk5XCUuDQoNCg0K