library(tidyverse)
library(DT)
library(scales)
library(psych)
library(knitr)
library(kableExtra)
library(DescTools)
library(epitools)
library(AER)
library(dplyr)

CHƯƠNG 1: TỔNG QUAN NGHIÊN CỨU

1.1. Lý do chọn đề tài

Đột quỵ (hay còn gọi là tai biến mạch máu não) là một trong những nguyên nhân hàng đầu gây tử vong và tàn tật trên toàn cầu, đồng thời được xem là gánh nặng y tế nghiêm trọng trong thế kỷ 21. Theo Tổ chức Y tế Thế giới (WHO), mỗi năm có khoảng 15 triệu người trên thế giới bị đột quỵ, trong đó gần 6 triệu người tử vong và hơn 5 triệu người sống sót nhưng phải chịu các di chứng nghiêm trọng về thần kinh và vận động. Đột quỵ không chỉ gây tổn thất lớn về mặt sức khỏe và kinh tế mà còn ảnh hưởng lâu dài đến chất lượng cuộc sống của người bệnh và gia đình họ.

Tại Việt Nam, đột quỵ là nguyên nhân gây tử vong đứng thứ ba và đang có xu hướng gia tăng nhanh chóng, đặc biệt ở các khu vực đô thị và dân số cao tuổi. Nhiều yếu tố nguy cơ liên quan đến lối sống hiện đại như hút thuốc lá, ít vận động, chế độ ăn uống không lành mạnh, cùng với các yếu tố lâm sàng như tăng huyết áp, thừa cân, hoặc tiền sử bệnh lý tim mạch, đều có thể làm tăng đáng kể khả năng bị đột quỵ. Đáng lo ngại là nhiều trường hợp đột quỵ xảy ra bất ngờ, khi người bệnh chưa từng được cảnh báo về nguy cơ.

Trong bối cảnh đó, việc phân tích và phát hiện sớm các yếu tố nguy cơ có liên quan đến đột quỵ đóng vai trò then chốt trong việc phòng ngừa chủ động và xây dựng các mô hình dự báo rủi ro chính xác. Những công cụ này có thể giúp hỗ trợ các chương trình y tế cộng đồng, nâng cao nhận thức phòng ngừa, tối ưu hóa chiến lược can thiệp sớm thông qua cải thiện lối sống và theo dõi các chỉ số sức khỏe.

Với tầm quan trọng và tính cấp thiết như vậy, đề tài “NGHIÊN CỨU MỐI LIÊN HỆ GIỮA CÁC YẾU TỐ NGUY CƠ VÀ KHẢ NĂNG MẮC BỆNH ĐỘT QUỴ” được lựa chọn nhằm cung cấp cơ sở khoa học cho việc nhận diện sớm nhóm nguy cơ cao, từ đó hỗ trợ các quyết định trong hoạch định chính sách y tế và nâng cao hiệu quả phòng ngừa đột quỵ trong cộng đồng.

1.2. Mục tiêu nghiên cứu

Mục tiêu tổng quát:

Phân tích và xác định các yếu tố chính ảnh hưởng đến nguy cơ mắc bệnh đột quỵ trên một nhóm đối tượng cụ thể, từ đó xây dựng mô hình dự báo rủi ro nhằm phục vụ công tác phòng ngừa và kiểm soát bệnh.

Mục tiêu cụ thể:

  • Hệ thống hóa các cơ sở lý thuyết liên quan đến bệnh đột quỵ, các dạng biểu hiện lâm sàng, biến chứng và các yếu tố nguy cơ đã được xác định trong các nghiên cứu trước.

  • Thu thập và xử lý dữ liệu từ bộ Stroke Prediction Dataset, bao gồm các đặc điểm nhân khẩu học, hành vi sức khỏe và yếu tố lâm sàng của đối tượng nghiên cứu.

  • Áp dụng các mô hình thống kê và học máy như hồi quy logistic, logit, probit,… để xác định mức độ ảnh hưởng của từng yếu tố đến khả năng mắc đột quỵ.

  • Đề xuất các khuyến nghị cụ thể về thay đổi lối sống, chiến lược tầm soát sớm và chính sách y tế cộng đồng, dựa trên các yếu tố nguy cơ đã được phân tích.

1.3. Đối tượng và phạm vi nghiên cứu

Đối tượng nghiên cứu: Các yếu tố nguy cơ (như tuổi, giới tính, chỉ số khối cơ thể BMI, huyết áp, tiền sử gia đình, loại thuốc sử dụng, mức độ hoạt động thể chất, v.v.) và mối quan hệ của chúng với chứng đột quỵ.

Đối tượng khảo sát: Dữ liệu có thể được thu thập từ các cuộc điều tra sức khỏe cộng đồng, hồ sơ bệnh án tại bệnh viện, được tác giả thu thập từ bộ dữ liệu Stroke Prediction Dataset từ nguồn kaggle.com.

Phạm vi không gian: Nghiên cứu có thể được giới hạn trong một khu vực địa lý nhất định (ví dụ: một tỉnh/thành phố, một bệnh viện).

1.4. Phương pháp nghiên cứu

  • Bộ dữ liệu được sử dụng trong nghiên cứu có cấu trúc phù hợp cho các phân tích định lượng, đặc biệt là các mô hình thống kê với biến phụ thuộc nhị phân. Hầu hết các biến trong tập dữ liệu đều là biến nhị phân hoặc phân loại với số lượng mức độ hạn chế, thuận lợi cho việc áp dụng các mô hình hồi quy nhị phân như hồi quy tuyến tính (OLS), hồi quy logistic, mô hình probit, và mô hình complementary log-log (cloglog). Các mô hình này được lựa chọn nhằm phân tích và định lượng mối quan hệ giữa các yếu tố nguy cơ (biến độc lập) và khả năng xảy ra đột quỵ (biến phụ thuộc – Has_Stroke).

  • Bên cạnh các mô hình hồi quy, nghiên cứu còn sử dụng các phương pháp thống kê mô tả để tóm tắt đặc điểm nhân khẩu học và hành vi sức khỏe của đối tượng khảo sát, đồng thời áp dụng kiểm định Chi-squared để kiểm tra mối liên hệ thống kê giữa các biến phân loại và khả năng mắc đột quỵ. Việc kết hợp giữa phân tích mô tả, kiểm định giả thuyết và mô hình hóa định lượng cho phép nâng cao độ tin cậy, tính khách quan và chiều sâu của các kết luận rút ra từ nghiên cứu.

  • Cách tiếp cận này phù hợp với định hướng phân tích trong thống kê y tế và dịch tễ học, đồng thời bảo đảm tính khoa học và thực tiễn khi ứng dụng vào việc phân tích dữ liệu sức khỏe cộng đồng, từ đó phục vụ công tác dự phòng, sàng lọc và can thiệp y tế một cách hiệu quả hơn.

1.5. Mô tả dữ liệu

1.5.1. Giới thiệu bộ dữ liệu

Bộ dữ liệu “Stroke Prediction Dataset” được thiết kế nhằm hỗ trợ các nhà nghiên cứu, chuyên gia khoa học dữ liệu và những người quan tâm đến lĩnh vực chăm sóc sức khỏe trong việc phân tích các yếu tố nguy cơ liên quan đến đột quỵ.

Tập dữ liệu bao gồm 1.985 quan sát và 9 biến độc lập có ý nghĩa, được xây dựng dựa trên thông tin lâm sàng chi tiết cùng với các mô hình dữ liệu y tế công cộng, nhằm phục vụ cho việc nghiên cứu, dự đoán và phòng ngừa nguy cơ đột quỵ trong cộng đồng.

1.5.2. Đọc file dữ liệu gốc

library(xlsx)
## Warning: package 'xlsx' was built under R version 4.3.3
library(dplyr)
library(ggplot2)
library(gmodels)
## Warning: package 'gmodels' was built under R version 4.3.3
## Registered S3 method overwritten by 'gdata':
##   method         from     
##   reorder.factor DescTools
data <- read.xlsx(file = "C:/Users/HP/Downloads/Stroke Prediction Dataset.xlsx", sheetIndex = 1, header = T)

Cấu trúc bộ dữ liệu

library(data.table)
## Warning: package 'data.table' was built under R version 4.3.3
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:zoo':
## 
##     yearmon, yearqtr
## The following object is masked from 'package:DescTools':
## 
##     %like%
## The following objects are masked from 'package:lubridate':
## 
##     hour, isoweek, mday, minute, month, quarter, second, wday, week,
##     yday, year
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## The following object is masked from 'package:purrr':
## 
##     transpose
data.table(data)
##         Age Salt_Intake   BP_History         BMI    Medication Family_History
##       <num>       <num>       <char>      <char>        <char>         <char>
##    1:    32        11.7       Normal      Normal          None             No
##    2:    78         9.5       Normal      Normal          None             No
##    3:    38        10.0 Hypertension      Normal ACE Inhibitor             No
##    4:    20        10.8 Hypertension      Normal  Beta Blocker            Yes
##    5:    47         7.2       Normal      Normal          None             No
##   ---                                                                        
## 1981:    51        11.8       Normal      Normal         Other             No
## 1982:    61         6.0       Normal Underweight          None             No
## 1983:    29         6.2       Normal      Normal          None             No
## 1984:    19         8.5 Hypertension      Normal          None             No
## 1985:    42         9.1       Normal  Overweight      Diuretic            Yes
##       Exercise_Level Smoking_Status Has_Stroke
##               <char>         <char>     <char>
##    1:            Low     Non-Smoker         No
##    2:       Moderate     Non-Smoker         No
##    3:            Low     Non-Smoker        Yes
##    4:           High     Non-Smoker        Yes
##    5:           High     Non-Smoker         No
##   ---                                         
## 1981:            Low     Non-Smoker         No
## 1982:            Low         Smoker         No
## 1983:       Moderate     Non-Smoker         No
## 1984:           High     Non-Smoker         No
## 1985:       Moderate         Smoker        Yes

Kiểm tra số lượng NA trong cột định tính

if (any(is.na(data))) {
  cat("Có giá trị thiếu trong dữ liệu.\n")
} else {
  cat("Không có giá trị thiếu trong dữ liệu.\n")
}
## Không có giá trị thiếu trong dữ liệu.

Kết quả thu được cho thấy rằng tất cả các cột định tính đều không có giá trị thiếu (NA).

Bộ dữ liệu bao gồm 1.985 quan sát (observations) và 9 biến (variables), phản ánh thông tin sức khỏe và các yếu tố lối sống có liên quan đến nguy cơ đột quỵ ở người trưởng thành từ 18 đến 84 tuổi.

  • Has_Stroke: Biến phụ thuộc.Thể hiện đối tượng có bị đột quỵ hay chưa.

  • Smoking_Status: Tình trạng hút thuốc lá của đối tượng. Bao gồm hai giá trị: “Non-Smoker” (không hút thuốc) và “Smoker” (có hút thuốc).

  • Family_History: Tiền sử gia đình đột quỵ hay không (“Yes”: CÓ / “No”: KHÔNG).

  • BMI: Phân loại tình trạng thể trọng (“Underweight”: gầy, “Normal”: bình thường, “Overweight”: thừa cân).

  • BP_History: Tiền sử huyết áp của đối tượng, được phân thành ba mức: “Normal” (bình thường), “PreHypertension” (tiền tăng huyết áp), và “Hypertension” (huyết áp cao).

Chuyển đổi các biến định tính sang kiểu factor

# Chuyển các biến định tính sang factor
data$BP_History       <- as.factor(data$BP_History)
data$BMI              <- as.factor(data$BMI)
data$Family_History   <- as.factor(data$Family_History)
data$Smoking_Status   <- as.factor(data$Smoking_Status)
data$Has_Stroke    <- as.factor(data$Has_Stroke)

Kiểm tra lại cấu trúc dữ liệu sau khi chuyển đổi

str(data)
## 'data.frame':    1985 obs. of  9 variables:
##  $ Age           : num  32 78 38 20 47 55 77 39 76 77 ...
##  $ Salt_Intake   : num  11.7 9.5 10 10.8 7.2 7.4 8.5 13.7 5 9.3 ...
##  $ BP_History    : Factor w/ 3 levels "Hypertension",..: 2 2 1 1 2 3 2 2 1 1 ...
##  $ BMI           : Factor w/ 3 levels "Normal","Overweight",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Medication    : chr  "None" "None" "ACE Inhibitor" "Beta Blocker" ...
##  $ Family_History: Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 2 2 2 1 ...
##  $ Exercise_Level: chr  "Low" "Moderate" "Low" "High" ...
##  $ Smoking_Status: Factor w/ 2 levels "Non-Smoker","Smoker": 1 1 1 1 1 1 2 1 1 1 ...
##  $ Has_Stroke    : Factor w/ 2 levels "No","Yes": 1 1 2 2 1 1 2 1 2 2 ...

Giải thích:

  • sapply(data, class): Áp dụng hàm class() cho từng cột để kiểm tra kiểu dữ liệu. Kết quả trả về là một vector hiển thị tên cột và loại dữ liệu tương ứng.

  • Kết quả là “factor” cho tất cả các cột → chuyển đổi thành công.

sapply(data, class)
##            Age    Salt_Intake     BP_History            BMI     Medication 
##      "numeric"      "numeric"       "factor"       "factor"    "character" 
## Family_History Exercise_Level Smoking_Status     Has_Stroke 
##       "factor"    "character"       "factor"       "factor"

Kết quả thu được: toàn bộ các biến định tính đã được chuyển đổi thành dạng factor.

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

2.1. Tổng quan về Bệnh Đột quỵ

2.1.1. Định nghĩa

Đột quỵ (Stroke), hay còn gọi là tai biến mạch máu não, là một tình trạng y tế nghiêm trọng xảy ra khi lưu lượng máu đến một phần của não bị gián đoạn hoặc giảm nghiêm trọng, làm cho mô não không nhận đủ oxy và dưỡng chất cần thiết. Trong vài phút, các tế bào não bắt đầu chết, gây ra tổn thương thần kinh nghiêm trọng hoặc thậm chí tử vong nếu không được can thiệp kịp thời.

2.1.2. Phân loại

Đột quỵ thường được chia thành hai loại chính:

  • Đột quỵ thiếu máu cục bộ (Ischemic Stroke): Chiếm khoảng 80–85% các trường hợp, xảy ra khi một cục máu đông làm tắc nghẽn động mạch cung cấp máu cho não.

  • Đột quỵ xuất huyết (Hemorrhagic Stroke): Xảy ra khi một mạch máu trong não bị vỡ, gây xuất huyết trong mô não.

Ngoài ra, còn có cơn thiếu máu não thoáng qua (TIA - Transient Ischemic Attack), thường được xem là “cảnh báo sớm” cho đột quỵ thực sự, với các triệu chứng tương tự nhưng biến mất trong vòng 24 giờ.

2.1.3. Biến chứng

Đột quỵ có thể gây ra nhiều biến chứng nghiêm trọng, bao gồm:

  • Suy giảm vận động: Yếu hoặc liệt một phần cơ thể, thường ở nửa người.

  • Suy giảm nhận thức và giao tiếp: Gặp khó khăn trong ngôn ngữ, trí nhớ hoặc tư duy.

  • Biến chứng tâm lý: Trầm cảm, lo âu, thay đổi cảm xúc.

  • Biến chứng hô hấp và tim mạch: Tăng nguy cơ viêm phổi, nhồi máu cơ tim, tái phát đột quỵ.

  • Tử vong: Đột quỵ là một trong những nguyên nhân hàng đầu gây tử vong toàn cầu.

2.2. Các yếu tố nguy cơ dẫn đến đột quỵ

Chỉ số BMI (Body Mass Index)

  • Chỉ số BMI là chỉ số đo lường trạng thái thể trọng bằng cách lấy cân nặng chia cho bình phương chiều cao (kg/m²). BMI cao, đặc biệt là trong ngưỡng “thừa cân” và “béo phì”, có liên quan chặt chẽ đến nguy cơ mắc đột quỵ. Thừa cân làm tăng huyết áp, rối loạn lipid máu và khả năng hình thành cục máu đông — những yếu tố trực tiếp dẫn đến đột quỵ.

  • Nghiên cứu liên quan: Theo nghiên cứu của Strazzullo et al. (2010) đăng trên tạp chí Stroke, BMI cao làm tăng nguy cơ đột quỵ thiếu máu cục bộ tới 64%. Ngoài ra, mối liên hệ giữa thừa cân và đột quỵ vẫn tồn tại sau khi đã điều chỉnh cho các yếu tố như tuổi, giới tính và tăng huyết áp.

Tiền sử gia đình (Family History)

  • Yếu tố di truyền đóng vai trò quan trọng trong nguy cơ mắc đột quỵ. Những người có cha mẹ, anh chị em từng bị đột quỵ có nguy cơ cao hơn do chia sẻ gen liên quan đến rối loạn mạch máu, huyết áp, cholesterol và đông máu.

  • Nghiên cứu liên quan: Nghiên cứu của Jood và cộng sự (2005) đăng trên Stroke Journal cho thấy nguy cơ đột quỵ tăng gấp 2 lần ở những người có tiền sử gia đình mắc đột quỵ. Mối liên hệ vẫn duy trì ngay cả khi kiểm soát các yếu tố lối sống.

Tiền sử huyết áp (BP History)

  • Tăng huyết áp được xem là yếu tố nguy cơ mạnh nhất và phổ biến nhất của đột quỵ. Huyết áp cao làm tổn thương thành mạch máu, thúc đẩy xơ vữa động mạch và tăng khả năng vỡ mạch hoặc hình thành cục máu đông.

  • Nghiên cứu liên quan: Theo WHO (2021), cứ mỗi 10 mmHg tăng huyết áp tâm thu sẽ làm tăng nguy cơ đột quỵ từ 20–30%. Nghiên cứu lớn INTERSTROKE (2010) cũng khẳng định tăng huyết áp chiếm tới 54% tổng số nguy cơ gây đột quỵ toàn cầu.

Tình trạng hút thuốc (Smoking Status)

  • Hút thuốc lá là một trong những yếu tố nguy cơ đã được xác lập đối với bệnh lý tim mạch và đột quỵ. Các chất trong khói thuốc gây viêm, làm tổn thương nội mô mạch máu, thúc đẩy hình thành cục máu đông và xơ vữa động mạch.

  • Nghiên cứu liên quan: Một phân tích tổng hợp của Shinton và Beevers (1989) chỉ ra rằng người hút thuốc có nguy cơ đột quỵ cao hơn 2–3 lần so với người không hút. Ngoài ra, nguy cơ giảm đáng kể chỉ sau vài năm ngừng hút thuốc, cho thấy tác dụng phục hồi của việc cai thuốc.

CHƯƠNG 3: PHƯƠNG PHÁP NGHIÊN CỨU

3.1. Các mô hình hồi quy cho biến phụ thuộc nhị phân

3.1.1. Mô hình Hồi quy Logistic (Logit Model)

Mô hình Logit được sử dụng phổ biến để phân tích mối quan hệ giữa một biến phụ thuộc nhị phân và một hoặc nhiều biến độc lập (liên tục hoặc định tính). Mục tiêu là ước lượng xác suất xảy ra sự kiện (ở đây là tái phát bệnh).

Xác suất tái phát của cá thể thứ \(i\) được mô hình hóa như sau:

\[ P_i = P(Y_i = 1 | X_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki})}} = \frac{e^{Z_i}}{1 + e^{Z_i}} \]

Trong đó:

  • \(P_i\): Xác suất cá thể \(i\) bị tái phát bệnh.
  • \(X_{1i}, \dots, X_{ki}\): Giá trị của các biến độc lập của cá thể \(i\).
  • \(\beta_0, \beta_1, \dots, \beta_k\): Các hệ số hồi quy cần ước lượng.
  • \(Z_i = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki}\)

Để tuyến tính hóa mô hình, người ta sử dụng hàm logit:

\[ L_i = \ln\left( \frac{P_i}{1 - P_i} \right) = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]

Tỷ số \(\frac{P_i}{1 - P_i}\) được gọi là tỷ số chênh (odds), cho biết khả năng xảy ra sự kiện so với không xảy ra sự kiện. Mỗi hệ số \(\beta_k\) được diễn giải bằng tỷ số chênh lệch (Odds Ratio – OR):

\[ OR_k = e^{\beta_k} \]

Ý nghĩa: Khi biến \(X_k\) tăng một đơn vị (và các biến khác giữ nguyên), odds của việc tái phát bệnh sẽ thay đổi \(e^{\beta_k}\) lần.


3.1.2. Mô hình Probit

Mô hình Probit là một lựa chọn thay thế cho Logit, với khác biệt chính nằm ở hàm liên kết. Probit sử dụng hàm phân phối tích lũy chuẩn \(\Phi(Z)\) thay vì hàm logistic.

Mô hình có dạng:

\[ P_i = P(Y_i = 1 | X_i) = \Phi(Z_i) = \int_{-\infty}^{Z_i} \frac{1}{\sqrt{2\pi}} e^{-t^2/2} dt \]

Trong đó:

\[ Z_i = \beta_0 + \beta_1 X_{1i} + \dots + \beta_k X_{ki} \]

Mặc dù Logit và Probit sử dụng các phân phối khác nhau (logistic vs chuẩn), trong thực tế hai mô hình thường cho kết quả khá tương đồng. Tuy nhiên, Logit được ưa chuộng hơn do khả năng diễn giải đơn giản thông qua Odds Ratio.


3.1.3. Mô hình Cloglog

Mô hình Cloglog là một dạng của hồi quy nhị phân, trong đó hàm liên kết là:

\[ \log(-\log(1 - p)) = \eta = \beta_0 + \beta_1 x_1 + \cdots + \beta_k x_k \]

Từ đó, xác suất xảy ra sự kiện là:

\[ p = 1 - \exp(-\exp(\eta)) \]

Để ước lượng các tham số \(\beta\), mô hình sử dụng phương pháp ước lượng hợp lý tối đa (MLE), thông qua việc cực đại hóa hàm log-likelihood:

\[ \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(1 - \exp(-\exp(\eta_i))) + (1 - y_i)( -\exp(\eta_i)) \right] \]

Phương pháp này đặc biệt phù hợp khi xác suất xảy ra sự kiện không đối xứng hoặc sự kiện hiếm. Hàm liên kết cloglog giúp mô hình phản ánh tốt hơn sự thay đổi nhanh chóng về xác suất gần ngưỡng 1.


3.2. Kiểm định sự phù hợp của mô hình

Để đánh giá mức độ phù hợp của mô hình hồi quy nhị phân (logit, probit, cloglog), các chỉ số được dùng để đánh giá phổ biến như:

3.2.1. Chỉ số AIC (Akaike Information Criterion)

  • Công thức:

    \[ AIC = -2 \cdot \log(L) + 2k \]

    Trong đó:

    • \(L\) là giá trị hàm hợp lý tối đa (likelihood),

    • \(k\) là số lượng tham số ước lượng trong mô hình.

  • Ý nghĩa: AIC là thước đo cân bằng giữa độ phù hợp của mô hình và độ phức tạp của nó. Mô hình có AIC thấp hơn được xem là phù hợp hơn, tránh được hiện tượng overfitting.

3.2.2. Hàm log-likelihood

Do hàm Likelihood là một tích phức tạp, người ta thường sử dụng logarit của nó để dễ tính toán:

\[ \ln L = \sum_{i=1}^{n} \left[ Y_i \ln(P_i) + (1 - Y_i) \ln(1 - P_i) \right] \]

Quá trình ước lượng sẽ tìm các giá trị \(\hat{\beta}_0, \hat{\beta}_1, \dots, \hat{\beta}_k\) sao cho hàm log-likelihood đạt cực đại. Việc tối ưu hóa này thường được thực hiện bằng các thuật toán số như Newton-Raphson, Fisher scoring, hay Gradient ascent.

CHƯƠNG 4: PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN KHẢ NĂNG ĐỘT QUỴ

PHÂN TÍCH ĐƠN BIẾN

4.1. Tình trạng hút thuốc của bệnh nhân tác động đến Bị đột quỵ

4.1.1 Bảng tần số - tần suất cho biến Hút thuốc (Smoking_Status)

tab_smoking <- table(data$Smoking_Status)
tab_smoking
## 
## Non-Smoker     Smoker 
##       1417        568

Kết quả trên sẽ được trực quan hóa bằng biểu đồ cột để so sánh số lượng giữa hai nhóm.

barplot(tab_smoking,
        main = "Biểu đồ tần số tình trạng hút thuốc",
        xlab = "Tình trạng hút thuốc",
        ylab = "Tần số",
        col = c("lightblue", "orange"),
        border = "white",
        ylim = c(0, max(tab_smoking) + 40)) -> bp_smoking

text(x = bp_smoking, y = tab_smoking + 15, labels = tab_smoking)

Thông qua bảng tần số và biểu đồ, ta thấy rằng trong tổng số 1985 bệnh nhân, có 1417 người không hút thuốc (Non-Smoker), cao gần gấp 2,5 lần so với nhóm hút thuốc . Trong khi đó, số bệnh nhân có hút thuốc (Smoker) là 568 người. Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự chênh lệch về mặt tương đối giữa hai nhóm.

Trực quan hóa

library(graphics)

# Tính tần suất từng loại Smoking_Status
smoking_freq <- table(data$Smoking_Status)

# Tính phần trăm
smoking_percent <- round(smoking_freq / sum(smoking_freq) * 100, 1)  # Làm tròn 1 chữ số

# Tạo nhãn: "Non-smoker - 40%"
labels <- paste(names(smoking_freq), "-", smoking_percent, "%")

# Vẽ biểu đồ tròn với nhãn phần trăm
pie(smoking_freq,
    labels = labels,
    main = "Biểu đồ tròn tình trạng hút thuốc",
    col = rainbow(length(smoking_freq))
)

Biểu đồ tròn thể hiện tỷ lệ phần trăm: nhóm Non-Smoker chiếm 71,4%, trong khi nhóm Smoker chiếm 28,6%. Điều này cho thấy phần lớn đối tượng trong nghiên cứu không hút thuốc, phản ánh xu hướng hạn chế hành vi hút thuốc trong quần thể khảo sát. Sự chênh lệch lớn này cho thấy thói quen hút thuốc không phải là một đặc điểm phổ biến trong nhóm bệnh nhân được khảo sát. Tuy nhiên, điều quan trọng là phải phân tích xem liệu nhóm thiểu số này có nguy cơ đột quỵ cao hơn hay không.

4.1.2. Thống kê mô tả cho hai biến Hút thuốc và khả năng đột quỵ

Chúng ta sẽ lập bảng tần số chéo giữa hai biến Smoking và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.

# Đổi tên levels của biến Smoking
data$Smoking <- factor(data$Smoking_Status, levels = c("Non-Smoker", "Smoker"),
                      labels = c("Không hút thuốc", "Hút thuốc"))

# Tạo lại bảng tần số
table_Stroke_smoking <- table(data$Smoking, data$Has_Stroke)
table_Stroke_smoking
##                  
##                    No Yes
##   Không hút thuốc 793 624
##   Hút thuốc       160 408

Bảng tần số chéo cho thấy:

Trong nhóm không hút thuốc (No): có 793 người không đột quỵ và 624 người đột quỵ. Trong nhóm có hút thuốc (Yes): có 160 người không đột quỵ và 408 người đột quỵ.

Một quan sát ban đầu đáng chú ý là ở nhóm hút thuốc, số ca đột quỵ (408) gần cao hơn gấp gần 3 lần so với số ca không đột quỵ (160). . Điều này gợi ý rằng tỷ lệ mắc bệnh ở nhóm bệnh nhân hút thuốc có thể cao hơn.

Trực quan hóa

Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.

# Chuyển bảng tần số thành data frame đúng chiều
df_plot_smoking <- as.data.frame(table_Stroke_smoking)
colnames(df_plot_smoking) <- c("Smoking_Status", "Has_Stroke", "Count")

# Vẽ biểu đồ
library(ggplot2)

ggplot(df_plot_smoking, aes(x = Smoking_Status, y = Count, fill = Has_Stroke)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng đột quỵ theo tình trạng hút thuốc",
       x = "Tình trạng hút thuốc",
       y = "Số lượng bệnh nhân",
       fill = "Tình trạng mắc bệnh đột quỵ") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "lightpink", "Yes" = "lightgreen"))

Biểu đồ cột trực quan hóa một cách rõ ràng sự khác biệt đã nêu:

Ở nhóm không hút thuốc: Cột “Không đột quỵ” (màu hồng) cao hơn cột “đột quỵ” (màu xanh).

Ở nhóm có hút thuốc: Cột “đột quỵ” (màu xanh) cao hơn rất nhiều so với cột “Không đột quỵ” (màu hồng).

Biểu đồ củng cố mạnh mẽ giả thuyết rằng việc hút thuốc có liên quan đến nguy cơ đột quỵ cao hơn. Bệnh nhân hút thuốc dường như có tỷ lệ đột quỵ cao gấp 250%, trong khi tỷ lệ này ở người không hút thuốc thấp hơn đáng kể.

4.1.3. Phân tích Relative Risk giữa Hút thuốc và khả năng đột quỵ

Tiếp theo, chúng ta tính toán Nguy cơ tương đối (Relative Risk - RR) để định lượng mức độ ảnh hưởng của việc hút thuốc đến khả năng đột quỵ. Nhóm không hút thuốc sẽ được coi là nhóm phơi nhiễm gốc (baseline).

install.packages("epitools")
## Warning: package 'epitools' is in use and will not be installed
library(epitools)
riskratio(table_Stroke_smoking)
## $data
##                  
##                    No  Yes Total
##   Không hút thuốc 793  624  1417
##   Hút thuốc       160  408   568
##   Total           953 1032  1985
## 
## $measure
##                  risk ratio with 95% C.I.
##                   estimate    lower    upper
##   Không hút thuốc 1.000000       NA       NA
##   Hút thuốc       1.631162 1.508637 1.763638
## 
## $p.value
##                  two-sided
##                   midp.exact fisher.exact   chi.square
##   Không hút thuốc         NA           NA           NA
##   Hút thuốc                0 8.212484e-30 3.971194e-29
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Dựa trên bảng tần số đã được giải thích rõ ở phần trước ác giải sẽ tính toán Relative Risk trong đó biến độc lập là tình trạng hút thuốc và phụ thuộc là khả năng đột quỵ. Nhóm tham chiếu là bệnh nhân không hút thuốc và không bị đột quỵ. Và nhóm đối tượng cần quan tâm là bệnh nhân đang trong tình trạng hút thuốc và bị đột quỵ.

Phân tích Risk Ratio (RR) giữa tình trạng hút thuốc và nguy cơ đột quỵ

Bảng tần số

Nhóm hút thuốc đột quỵ(Yes) Không đột quỵ(No) Tổng
Không hút thuốc 624 793 1417
Hút thuốc 408 160 568
Tổng 1032 953 1985

Công thức tính nguy cơ (Risk)

\[ \text{Risk} = \frac{\text{Số ca mắc (Yes)}}{\text{Tổng số trong nhóm}} \]

\[\text{Risk}_{\text{Không hút thuốc}} = \frac{624}{1417} \approx 0.4403\]

\[\text{Risk}_{\text{Hút thuốc}} = \frac{408}{568} \approx 0.7183\]

Công thức tính Risk Ratio (RR)

\[ RR = \frac{\text{Risk}_{\text{Hút thuốc}}}{\text{Risk}_{\text{Không hút thuốc}}} \]

\[ RR = \frac{0.7183}{0.4403} \approx 1.63 \]

Nhận xét:

Tỷ lệ đột quỵ ở nhóm hút thuốc là 408/568 ≈ 71,8%, cao hơn đáng kể so với nhóm không hút thuốc (624/1417 ≈ 44,1%).

Risk Ratio (RR) = 1,63; 95% CI: [1,51 – 1,76]; p < 0,001: → Điều này chứng minh rằng nhóm hút thuốc có nguy cơ đột quỵ cao gấp khoảng 1,63 lần so với nhóm không hút thuốc, và kết quả có ý nghĩa thống kê rất mạnh (p gần bằng 0).

Khoảng tin cậy (CI) không bao gồm 1, cho thấy mối liên hệ này ổn định và đáng tin cậy.

Kết luận từ các kiểm định:

đột quỵ midp.exact fisher.exact chi.square
No NA NA NA
Yes 0 0 8.212484e-30 3.971194e-29

Các giá trị p-value từ cả ba phương pháp kiểm định (Mid-p exact, Fisher exact, và Chi-square) đều rất nhỏ (p < 0.001). Điều này bác bỏ giả thuyết không (H₀: không có mối liên hệ giữa hút thuốc và đột quỵ) và khẳng định rằng có một mối liên hệ có ý nghĩa thống kê rất mạnh mẽ giữa hai biến này.

4.1.4. Phân tích Odd Ratio giữa Hút thuốc và khả năng mắc bệnh

oddsratio(table_Stroke_smoking, conf.level = 0.95)
## $data
##                  
##                    No  Yes Total
##   Không hút thuốc 793  624  1417
##   Hút thuốc       160  408   568
##   Total           953 1032  1985
## 
## $measure
##                  odds ratio with 95% C.I.
##                   estimate    lower    upper
##   Không hút thuốc 1.000000       NA       NA
##   Hút thuốc       3.237094 2.626336 4.005022
## 
## $p.value
##                  two-sided
##                   midp.exact fisher.exact   chi.square
##   Không hút thuốc         NA           NA           NA
##   Hút thuốc                0 8.212484e-30 3.971194e-29
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Công thức tính Odds

\[ \text{Odds} = \frac{\text{Số ca mắc (Yes)}}{\text{Số ca không mắc (No)}} \]

Công thức tính Odds Ratio (OR)

\[ \text{Odds} = \frac{\text{Odds Hút thuốc}}{\text{Odds không Hút thuốc}} \]

Nhận xét:

Kết quả cho thấy Tỷ số chênh (OR) là 3.237 Điều này có nghĩa là “odds” (tỷ lệ giữa xác suất xảy ra và không xảy ra) của việc đột quỵ ở nhóm bệnh nhân hút thuốc cao gấp 3.237 lần so với “odds” đột quỵ ở nhóm bệnh nhân không hút thuốc. Kết quả này có ý nghĩa thống kê cao (p-value < 0.001), cho thấy hút thuốc là một yếu tố nguy cơ có liên quan mạnh mẽ đến khả năng đột quỵ trong bộ dữ liệu nghiên cứu.

4.1.5. Thống kê suy diễn

4.1.5.1. Kiểm định tính độc lập

Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tình trạng hút thuốc và khả năng đột quỵ.

Giả thuyết kiểm định:

  • H₀ (Giả thuyết không): Tình trạng hút thuốc và khả năng đột quỵ là hai biến độc lập (không có mối liên hệ).
  • H₁ (Giả thuyết đối): Tình trạng hút thuốc và khả năng đột quỵ hai biến phụ thuộc (có mối liên hệ).
# Kiểm định Chi bình phương
chisq.test(table_Stroke_smoking)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_Stroke_smoking
## X-squared = 124.38, df = 1, p-value < 2.2e-16

Kết quả kiểm định Chi-squared cho thấy giá trị thống kê χ² là 124,38 với 1 bậc tự do, và giá trị p (p-value) < 2.2 × 10⁻¹⁶. Với mức ý nghĩa thông thường α = 0.05, giá trị p rất nhỏ này cho phép bác bỏ giả thuyết không (H₀), tức là giả thuyết cho rằng hai biến “Smoking_Status” và “Has_Stroke” là độc lập với nhau.

Điều này chứng tỏ tồn tại mối liên hệ có ý nghĩa thống kê giữa tình trạng hút thuốc và khả năng bị đột quỵ trong quần thể được khảo sát. Cụ thể, người hút thuốc có xu hướng bị đột quỵ với tỷ lệ cao hơn đáng kể so với người không hút thuốc.

Phát hiện này hoàn toàn phù hợp với các bằng chứng y học trước đây, vốn đã chỉ ra rằng hành vi hút thuốc làm gia tăng nguy cơ rối loạn chức năng nội mô mạch máu, tăng huyết áp, và xơ vữa động mạch — những yếu tố góp phần trực tiếp vào nguy cơ mắc đột quỵ và các bệnh lý tim mạch nghiêm trọng khác.

4.1.5.2. Kiểm định hiệu tỷ lệ

Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ.

Gọi p1 là tỷ lệ đột quỵ ở nhóm hút thuốc, p2 là tỷ lệ đột quỵ ở nhóm không hút thuốc.

Giả thuyết kiểm định:

  • H₀: p1 - p2 = 0 (Tỷ lệ đột quỵ ở hai nhóm là như nhau).

  • H₁: p1 - p2 > 0 (Tỷ lệ đột quỵ ở nhóm hút thuốc cao hơn nhóm không hút thuốc).

# Số ca đột quỵ ở nhóm hút thuốc và không hút thuốc
success_smoking <- c(408, 624)

# Tổng số bệnh nhân trong mỗi nhóm
n_smoking <- c(568, 1417)

# Kiểm định hiệu tỷ lệ một phía
prop.test(success_smoking, n_smoking, alternative = "greater", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  success_smoking out of n_smoking
## X-squared = 125.49, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
##  0.24007 1.00000
## sample estimates:
##    prop 1    prop 2 
## 0.7183099 0.4403670

Nhận xét kết quả kiểm định hai tỷ lệ

Kết quả kiểm định hai tỷ lệ độc lập (two-sample proportion test) cho thấy:

  • Giá trị thống kê: \(X^2 = 125.49\)
  • Bậc tự do: \(df = 1\)
  • \(p\)-value: \(p < 2.2 \times 10^{-16}\)

Với \(p\)-value nhỏ hơn rất nhiều so với mức ý nghĩa \(\alpha = 0.05\), ta bác bỏ giả thuyết không \((H_0: p_1 - p_2 = 0)\)chấp nhận giả thuyết đối \((H_1: p_1 - p_2 > 0)\).

Điều này cho thấy tỷ lệ đột quỵ ở nhóm hút thuốc \((p_1 = 71.83\%)\) cao hơn một cách có ý nghĩa thống kê so với nhóm không hút thuốc \((p_2 = 44.04\%)\).

Khoảng tin cậy 95% cho hiệu tỷ lệ \((p_1 - p_2)\) nằm trong khoảng \([0.240; 1.000]\), xác nhận rằng sự chênh lệch này là dương và có ý nghĩa thống kê.

Kết luận: Hành vi hút thuốc có liên quan chặt chẽ đến việc gia tăng nguy cơ đột quỵ.

4.2 Tiền sử gia đình bị đột quỵ tác động đến Bị đột quỵ

Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa đặc điểm tiền sử gia đình đột quỵ của bệnh nhân và khả năng đột quỵ. Biến độc lập là Family_History và biến phụ thuộc là Has_Stroke.

4.2.1 Bảng tần số - tần suất cho biến Family_History

Đầu tiên, chúng ta sẽ lập bảng tần số cho biến Family_History để hiểu rõ sự phân bố của nhóm bệnh nhân có tiền sử gia đình bị đột quỵ trong tập dữ liệu.

tab_Family_History <- table(data$Family_History)
tab_Family_History
## 
##   No  Yes 
## 1000  985

Kết quả sẽ được trực quan hóa bằng biểu đồ cột để dễ dàng so sánh số lượng giữa hai nhóm.

barplot(tab_Family_History,
        main = "Biểu đồ tần số nhóm bệnh nhân có tiền sử gia đình bị đột quỵ",
        xlab = "Tiền sử gia đình bị đột quỵ",
        ylab = "Tần số",
        col = c("lightyellow", "lightgreen"),
        border = "white",
        ylim = c(0, max(tab_Family_History) + 40)) -> bp_Family_History

text(x = bp_Family_History, y = tab_Family_History + 15, labels = tab_Family_History)

Thông qua bảng tần số và biểu đồ, ta thấy rằng trong tổng số 1985 bệnh nhân, có 985 người có tiền sử gia đình đột quỵ (Yes). Trong khi đó, số bệnh nhân không có tiền sử gia đình đột quỵ (No) là 1000 người.

Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự chênh lệch về mặt tương đối giữa hai nhóm.

# Thay đổi nhãn từ Yes/No sang Có/Không
data$Family_History <- ifelse(data$Family_History == "Yes", "Có", "Không")

# Đảm bảo là factor và đúng thứ tự
data$Family_History <- factor(data$Family_History, levels = c("Không", "Có"))

# Tính tần suất và phần trăm
family_freq <- table(data$Family_History)
family_percent <- round(family_freq / sum(family_freq) * 100, 1)

# Tạo nhãn: "Có - 58.2%"
labels <- paste(names(family_freq), "-", family_percent, "%")

# Vẽ biểu đồ tròn có phần trăm
pie(family_freq,
    labels = labels,
    main = "Biểu đồ tròn: Tiền sử gia đình (Family History)",
    col = rainbow(length(family_freq))
)

Biểu đồ tròn cho thấy một cách trực quan rằng nhóm bệnh nhân có tiền sử gia đình đột quỵ chiếm đến 49.6% trong mẫu nghiên cứu, trong khi nhóm không có tiền sử gia đình đột quỵ chiếm 50.4%. Điều này cho thấy tiền sử gia đình đột quỵ là trường hợp ít phổ biến hơn. Phân tích tiếp theo sẽ làm rõ liệu đặc điểm này có ảnh hưởng đến nguy cơ đột quỵ hay không.

4.2.2. Thống kê mô tả cho hai biến Family_History và khả năng đột quỵ

Chúng ta sẽ lập bảng tần số chéo giữa hai biến Family_History và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.

table_Stroke_Family_History <- table(data$Family_History, data$Has_Stroke)
table_Stroke_Family_History
##        
##          No Yes
##   Không 620 380
##   Có    333 652

Bảng tần số chéo cho thấy:

  • Trong nhóm tiền sử gia đình đột quỵ (có): có 333 người không đột quỵ và 652 người đột quỵ.
  • Trong nhóm tiền sử gia đình không đột quỵ (không): có 620 người không đột quỵ và 380 người đột quỵ.

Điều này cho thấy tình trạng tiền sử gia đình đột quỵ có thể liên quan đến nguy cơ đột quỵ cao hơn so với tiền sử gia đình đột quỵ . Tuy nhiên, cần thực hiện kiểm định thống kê để xác định mức độ ý nghĩa của mối liên hệ này.

Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.

# Tạo bảng tần số chéo
table_Stroke_Family_History <- table(data$Family_History, data$Has_Stroke)

# Chuyển bảng chéo thành data frame
df_plot_Family_History <- as.data.frame(table_Stroke_Family_History)
colnames(df_plot_Family_History) <- c("Family_History", "Has_Stroke", "Count")

# Vẽ biểu đồ
ggplot(df_plot_Family_History, aes(x = Family_History, y = Count, fill = Has_Stroke)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng đột quỵ theo tiền sử gia đình mắc đột quỵ",
       x = "Tiền sử gia đình mắc đột quỵ (Family_History)",
       y = "Số lượng bệnh nhân",
       fill = " đột quỵ") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "purple", "Yes" = "green"))

  • Biểu đồ cột trực quan hóa một cách rõ ràng sự khác biệt đã nêu:
    • Ở nhóm tiền sử gia đình không đột quỵ (Không): Cột “Không đột quỵ” cao hơn hẳn cột “đột quỵ”.
    • Ở nhóm tiền sử gia đình đột quỵ (Có): Cột “đột quỵ” lại cao hơn gấp đôi cột “Không đột quỵ”.
  • Biểu đồ củng cố mạnh mẽ giả thuyết rằng việc tiền sử gia đình mắc bệnh đột quỵ có tính liên quan đến nguy cơ đột quỵ cao hơn. Bệnh nhân có tiền sử gia đình mắc đột quỵ dường như có tỷ lệ đột quỵ cao hơn 50%, trong khi tỷ lệ này ở người không có tiền sử gia đình đột quỵ thấp hơn đáng kể.

4.2.3. Phân tích Relative Risk giữa Family_History và khả năng đột quỵ

Tiếp theo, chúng ta tính toán Nguy cơ tương đối (Relative Risk - RR) để định lượng mức độ ảnh hưởng của tính đến khả năng đột quỵ. Nhóm không có tiền sử gia đình đột quỵ sẽ được coi là nhóm tham chiếu.

riskratio(table_Stroke_Family_History)
## $data
##        
##          No  Yes Total
##   Không 620  380  1000
##   Có    333  652   985
##   Total 953 1032  1985
## 
## $measure
##        risk ratio with 95% C.I.
##         estimate   lower    upper
##   Không 1.000000      NA       NA
##   Có    1.741918 1.59059 1.907643
## 
## $p.value
##        two-sided
##         midp.exact fisher.exact  chi.square
##   Không         NA           NA          NA
##   Có             0  1.65228e-36 3.06871e-36
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét:

1. Cách tính Risk Ratio (RR)

RR được tính bằng công thức:

\[ RR = \frac{\text{Tỷ lệ bệnh ở nhóm có tiền sử}}{\text{Tỷ lệ bệnh ở nhóm không có tiền sử}} \]

  • Nhóm Có tiền sử gia đình:

\[ p_{\text{Có}} = \frac{652}{985} \approx 0.662 \]

  • Nhóm không có tiền sử gia đình:

\[ p_{\text{Không}} = \frac{380}{1000} = 0.380 \]

RR:

\[ RR = \frac{0.662}{0.380} \approx 1.742 \]


Nhận xét kết quả

Kết quả phân tích cho thấy:

  • RR = 1.742 (95% CI: 1.591 – 1.908), p < 0.001.

  • Những người có tiền sử gia đình bị đột quỵ có nguy cơ đột quỵ cao hơn khoảng 1.74 lần so với những người không có tiền sử gia đình.

  • Khoảng tin cậy 95% không chứa giá trị 1 và p-value rất nhỏ (< 0.05), chứng tỏ sự khác biệt có ý nghĩa thống kê mạnh.

  • Yếu tố Family History là một yếu tố nguy cơ quan trọng, có liên quan chặt chẽ đến khả năng đột quỵ.

Kết luận từ các kiểm định:

Family_History midp.exact fisher.exact chi.square
không NA NA NA
0 1.65228e-36 3.06871e-36

Dựa trên kết quả kiểm định giữa tính chất tiền sử gia đình đột quỵ (Family_History) và khả năng đột quỵ, ta thấy rằng ở nhóm tiền sử gia đình đột quỵ (có), các giá trị p từ cả ba phương pháp kiểm định mid-p exact, Fisher exact và Chi-square đều rất nhỏ, nhỏ hơn nhiều so với ngưỡng ý nghĩa 0.05. Điều này cho thấy mối liên hệ giữa tính chất tiền sử gia đình đột quỵ và khả năng đột quỵ là có ý nghĩa thống kê. Nói cách khác, tính chất của tiền sử gia đình đột quỵ có thể là một yếu tố nguy cơ làm tăng khả năng đột quỵ.

4.2.4. Phân tích Odd Ratio giữa Family_History và khả năng đột quỵ

Tương tự, chúng ta sẽ tính Tỷ số chênh (Odds Ratio - OR).

oddsratio(table_Stroke_Family_History, conf.level = 0.95)
## $data
##        
##          No  Yes Total
##   Không 620  380  1000
##   Có    333  652   985
##   Total 953 1032  1985
## 
## $measure
##        odds ratio with 95% C.I.
##         estimate    lower    upper
##   Không 1.000000       NA       NA
##   Có    3.191925 2.658208 3.838499
## 
## $p.value
##        two-sided
##         midp.exact fisher.exact  chi.square
##   Không         NA           NA          NA
##   Có             0  1.65228e-36 3.06871e-36
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

OR được tính bằng công thức:

\[ OR = \frac{\dfrac{a}{b}}{\dfrac{c}{d}} = \frac{a \times d}{b \times c} \]

Trong đó:

  • \(a\): số người Có tiền sử gia đìnhbị đột quỵ = 652
  • \(b\): số người Có tiền sử gia đình nhưng không bị đột quỵ = 333
  • \(c\): số người Không có tiền sử gia đìnhbị đột quỵ = 380
  • \(d\): số người Không có tiền sử gia đìnhkhông bị đột quỵ = 620

Khi đó:

\[ OR = \frac{652 \times 620}{333 \times 380} \approx 3.19 \]

  • OR = 3.19 (95% CI: 2.66 – 3.84), p < 0.001.
  • Những người có tiền sử gia đình bị đột quỵ có odds đột quỵ cao gấp khoảng 3.19 lần so với những người không có tiền sử gia đình.
  • Khoảng tin cậy 95% không chứa giá trị 1 và p-value rất nhỏ, chứng tỏ sự khác biệt này có ý nghĩa thống kê mạnh.
  • Nhóm tham chiếu trong phân tích là “Không có tiền sử gia đình”.
  • Điều này cho thấy yếu tố di truyền (family history) là một yếu tố nguy cơ quan trọng, cần được xem xét trong các mô hình dự đoán và trong công tác phòng ngừa đột quỵ.

4.2.5. Thống kê suy diễn

Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tính chất Tiền sử gia đình và khả năng đột quỵ.

4.2.5.1 Kiểm định chi bình phương

Giả thuyết kiểm định:

  • H₀ (Giả thuyết không): Tính chất Tiền sử gia đình bị đột quỵ và khả năng bị đột quỵ là hai biến độc lập (không có mối liên hệ).
  • H₁ (Giả thuyết đối): Tính chất tiền sử gia đình bị đột quỵ và khả năng bị đột quỵ là hai biến phụ thuộc (có mối liên hệ).
# Kiểm định Chi bình phương
chisq.test(table_Stroke_Family_History)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_Stroke_Family_History
## X-squared = 156.89, df = 1, p-value < 2.2e-16

Nhận xét

Kết quả kiểm định Chi bình phương Pearson với hiệu chỉnh liên tục của Yates cho giá trị thống kê X-squared là 156.89, với bậc tự do là 1. Giá trị p-value tương ứng là 2.2e-16, một giá trị cực kỳ nhỏ.

Do p-value nhỏ hơn rất nhiều so với mức ý nghĩa thông thường (α = 0.05), chúng ta bác bỏ giả thuyết không (H₀). Điều này cung cấp bằng chứng thống kê mạnh mẽ để kết luận rằng có một mối liên hệ phụ thuộc rất rõ ràng giữa việc tiền sử gia đình bị đột quỵ và khả năng đột quỵ .

Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ. Gọi p1 là tỷ lệ đột quỵ ở nhóm có tiền sử gia đình bệnh , p2 là tỷ lệ đột quỵ ở nhóm không có tiền sử gia đình bị đột quỵ.

4.2.5.2 Kiểm định hiệu tỷ lệ:

  • H₀: p1 - p2 = 0 (Tỷ lệ đột quỵ ở hai nhóm là như nhau).
  • H₁: p1 - p2 > 0 (Tỷ lệ đột quỵ ở nhóm có tiền sử gia đình bệnh cao hơn nhóm còn lại ).
# Số ca  đột quỵ ở nhóm  và 
success_Family_History <- c(652, 380)

# Tổng số bệnh nhân trong mỗi nhóm
n_Family_History <- c(985, 1000)

# Kiểm định hiệu tỷ lệ một phía
prop.test(success_Family_History, n_Family_History, alternative = "greater", correct = FALSE)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  success_Family_History out of n_Family_History
## X-squared = 158.02, df = 1, p-value < 2.2e-16
## alternative hypothesis: greater
## 95 percent confidence interval:
##  0.2465441 1.0000000
## sample estimates:
##    prop 1    prop 2 
## 0.6619289 0.3800000
  • Kết quả kiểm định hai tỷ lệ cho thấy tỷ lệ đột quỵ ở nhóm bệnh nhân có tiền sử gia đình đột quỵ (p₁ = 66.2%) cao hơn rõ rệt so với nhóm khong có tiền sử gia đình đột quỵ (p₂ = 38%). Giá trị p rất nhỏ (\(p = 2.2 \times 10^{-16}\)) cho thấy sự khác biệt này có ý nghĩa thống kê ở mức ý nghĩa 5%.

  • Bác bỏ giả thuyết \(H_0\), kết luận rằng tỷ lệ đột quỵ ở nhóm có tiền sử gia đình cao hơn một cách có ý nghĩa thống kê so với nhóm không có tiền sử.

4.3. Tiền sử huyết áp tác động đến Bị đột quỵ

Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa tiền sử huyết áp của bệnh nhân và khả năng đột quỵ. Biến độc lập là BP_History (với 3 mức độ: “Normal”: Bình thường ,“Hypertension”: huyết áp cao, “PreHypertension”: tiền tăng huyết áp) và biến phụ thuộc là Has_Stroke (có hoặc không đột quỵ).

4.3.1 Bảng tần số - tần suất cho biến BP_History

Đầu tiên, chúng ta sẽ lập bảng tần số cho biến BP_History để hiểu rõ sự phân bố của các nhóm bệnh nhân theo tiền sử huyết áp điều trị.

tab_BP_History <- table(data$BP_History)
tab_BP_History
## 
##    Hypertension          Normal Prehypertension 
##             569             796             620

Kết quả trên sẽ được trực quan hóa bằng biểu đồ cột để so sánh số lượng giữa các nhóm.

barplot(tab_BP_History,
        main = "Biểu đồ tần số tiền sử huyết áp ",
        xlab = "tiền sử huyết áp",
        ylab = "Tần số",
        col = c("skyblue", "lightgreen", "lightcoral", "plum"),
        border = "white",
        ylim = c(0, max(tab_BP_History) + 40)) -> bp_BP_History

text(x = bp_BP_History, y = tab_BP_History + 15, labels = tab_BP_History)

Bảng dịch thuật

tiền sử huyết áp (tiếng Anh) Tiếng Việt tương ứng
Hypertension tiền sử huyết áp cao
Normal Bình thường
Prehypertension tiền tăng huyết áp
# Tính tần suất
bp_freq <- table(data$BP_History)

# Tính phần trăm và làm tròn
bp_percent <- round(bp_freq / sum(bp_freq) * 100, 1)

# Tạo nhãn hiển thị: "Prehypertension - 28.3%"
labels <- paste(names(bp_freq), "-", bp_percent, "%")

# Vẽ biểu đồ tròn
pie(bp_freq,
    labels = labels,
    main = "Phân loại tiền sử huyết áp",
    col = rainbow(length(bp_freq))
)

Nhận xét

  • Thông qua bảng tần số và biểu đồ, ta thấy rằng trong tổng số 1985 bệnh nhân:

Kết quả phân bố tình trạng huyết áp cho thấy trong tổng số mẫu khảo sát, 40,1% đối tượng có huyết áp bình thường (569 người), trong khi 31,2% rơi vào nhóm tiền tăng huyết áp (620 người) và 28,7% (569 người) đã mắc tăng huyết áp. Tỷ lệ tiền tăng huyết áp khá cao, phản ánh một bộ phận đáng kể dân số đang ở giai đoạn nguy cơ, có khả năng tiến triển thành đột quỵ thực sự nếu không có các biện pháp can thiệp kịp thời về lối sống và dinh dưỡng. Số người đã bị tăng huyết áp (gần 1/3 mẫu nghiên cứu) cũng là một con số đáng lưu ý, cho thấy vấn đề này là một thách thức sức khỏe cộng đồng.

Tiếp theo, chúng ta sẽ tính tỷ lệ phần trăm và vẽ biểu đồ tròn để thể hiện rõ hơn sự phân bố tương đối giữa các nhóm.

4.3.2. Thống kê mô tả cho hai biến BP_History và khả năng đột quỵ

Chúng ta sẽ lập bảng tần số chéo giữa hai biến BP_History và Has_Stroke để xem xét mối quan hệ sơ bộ giữa chúng.

# Bảng tần số chéo giữa tiền sử huyết áp và đột quỵ
table_caohuyetap_BP_History <- table(data$BP_History, data$Has_Stroke)

# Thêm hàng và cột tổng
addmargins(table_caohuyetap_BP_History)
##                  
##                     No  Yes  Sum
##   Hypertension      41  528  569
##   Normal           510  286  796
##   Prehypertension  402  218  620
##   Sum              953 1032 1985
  • Hypertension (tiền sử cao huyết áp) : 569 bệnh nhân, có đến 528 ca đột quỵ → nguy cơ rất cao.

  • Normal: 796 bệnh nhân, 286 ca đột quỵ → nguy cơ trung bình.

  • PreHypertension: 620 bệnh nhân, 218 ca đột quỵ → nguy cơ trung bình.

Kết luận: tiền sử huyết áp điều trị liên quan rõ rệt đến khả năng đột quỵ.

Để làm rõ hơn nhận định trên, chúng ta sẽ sử dụng biểu đồ cột nhóm.

# Chuyển bảng chéo thành data frame
df_plot_BP_History <- as.data.frame(table_caohuyetap_BP_History)
colnames(df_plot_BP_History) <- c("BP_History", "Has_Stroke", "Count")

# Đảm bảo thứ tự tiền sử huyết áp theo lâm sàng
df_plot_BP_History$BP_History <- factor(df_plot_BP_History$BP_History,
                                    levels = c("Hypertension", "Normal"
                                               ,"PreHypertension"))

# Vẽ biểu đồ cột tỷ lệ
library(ggplot2)
ggplot(df_plot_BP_History, aes(x = BP_History, y = Count, fill = Has_Stroke)) +
  geom_col(position = "fill") +  # tỷ lệ phần trăm theo cột
  scale_y_continuous(labels = scales::percent_format()) +
  scale_fill_manual(values = c("No" = "lightblue", "Yes" = "pink"),
                    labels = c("Không cao huyết áp", "cao huyết áp")) +
  labs(title = "Tỷ lệ đột quỵ theo tiền sử huyết áp điều trị",
       x = "tiền sử huyết áp điều trị",
       y = "Tỷ lệ (%)",
       fill = "Tình trạng cao huyết áp") +
  theme_minimal(base_size = 13) +
  theme(axis.text.x = element_text(angle = 25, hjust = 1))

  • Biểu đồ cho thấy tỷ lệ đột quỵ tăng dần theo tiền sử huyết áp điều trị. Cụ thể:

    • Nhóm Hypertension ( tiền sử huyết áp cao) gần như sẽ mắc bệnh đột quỵ
    • Nhóm Normal có tỷ lệ mắc bệnh đột quỵ khoảng 35%.
    • Nhóm PreHypertension (tiền tăng huyết áp) có tỷ lệ mắc bệnh đột quỵ khoảng 35%.
  • Đáng chú ý, nhóm Hypertension có tỷ lệ đột quỵ gần như tuyệt đối.

Điều này cho thấy tiền sử huyết áp có liên quan rõ rệt đến nguy cơ mắc bệnh đột quỵ, trong đó tiền sử tăng huyết áp là yếu tố nguy cơ cao nhất.

4.3.3. Phân tích Relative Risk giữa BP_History và khả năng mắc bệnh

3án Nguy cơ tương đối (RR), lấy nhóm Hypertension làm nhóm tham chiếu.

riskratio(table_caohuyetap_BP_History)
## $data
##                  
##                    No  Yes Total
##   Hypertension     41  528   569
##   Normal          510  286   796
##   Prehypertension 402  218   620
##   Total           953 1032  1985
## 
## $measure
##                  risk ratio with 95% C.I.
##                    estimate     lower     upper
##   Hypertension    1.0000000        NA        NA
##   Normal          0.3871964 0.3519120 0.4260186
##   Prehypertension 0.3789162 0.3396787 0.4226861
## 
## $p.value
##                  two-sided
##                   midp.exact  fisher.exact   chi.square
##   Hypertension            NA            NA           NA
##   Normal                   0 1.134512e-111 6.141558e-99
##   Prehypertension          0 4.564659e-104 1.101697e-93
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Trong nghiên cứu này, nhóm Hypertension được chọn làm nhóm tham chiếu để đánh giá nguy cơ đột quỵ ở các nhóm tiền sử huyết áp. Việc phân tích tỉ số nguy cơ (Relative Risk – RR) cho phép so sánh khả năng đột quỵ giữa các nhóm một cách trực quan và có ý nghĩa thống kê.

Nhóm Hypertension (tăng huyết áp)

Được chọn làm nhóm tham chiếu với RR = 1.00.

Đây là nhóm có tỷ lệ biến phụ thuộc (Yes) cao nhất (528/569 ≈ 92,8%).

Nhóm Normal (huyết áp bình thường)

Có RR = 0.387 (95% CI: 0.352 – 0.426), nghĩa là nguy cơ mắc bệnh đột quỵ ở nhóm này chỉ bằng khoảng 38,7% so với nhóm tiền sử huyết áp cao.

Giá trị p rất nhỏ (p < 2.2e-16), cho thấy sự khác biệt có ý nghĩa thống kê cao.

Nhóm PreHypertension (tiền tăng huyết áp)

Có RR = 0.379 (95% CI: 0.340 – 0.423), tương đương với nguy cơ mắc bệnh chỉ bằng 37,9% so với nhóm tiền sử huyết áp cao.

P-value cũng cực kỳ nhỏ (p < 2.2e-16), chứng tỏ sự khác biệt có ý nghĩa thống kê mạnh mẽ.

Tổng thể, Kết quả cho thấy nhóm tăng huyết áp có xác suất xảy ra biến phụ thuộc cao vượt trội so với hai nhóm còn lại. Cả nhóm huyết áp bình thường và tiền tăng huyết áp đều có nguy cơ thấp hơn đáng kể, với mức giảm khoảng 62% so với nhóm tăng huyết áp. Sự khác biệt này có ý nghĩa thống kê rất cao (p-value cực nhỏ), chứng tỏ trạng thái huyết áp là một yếu tố quan trọng ảnh hưởng đến biến phụ thuộc.

4.3.4. Phân tích Odd Ratio giữa BP_History và khả năng mắc bệnh

oddsratio(table_caohuyetap_BP_History)
## $data
##                  
##                    No  Yes Total
##   Hypertension     41  528   569
##   Normal          510  286   796
##   Prehypertension 402  218   620
##   Total           953 1032  1985
## 
## $measure
##                  odds ratio with 95% C.I.
##                     estimate      lower      upper
##   Hypertension    1.00000000         NA         NA
##   Normal          0.04382381 0.03047540 0.06141565
##   Prehypertension 0.04240178 0.02925768 0.05997314
## 
## $p.value
##                  two-sided
##                   midp.exact  fisher.exact   chi.square
##   Hypertension            NA            NA           NA
##   Normal                   0 1.134512e-111 6.141558e-99
##   Prehypertension          0 4.564659e-104 1.101697e-93
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Phân tích Odds Ratio (OR) nhằm so sánh khả năng đột quỵ giữa các nhóm tiền sử huyết áp điều trị, với nhóm Hypertension được chọn làm nhóm tham chiếu.

Hypertension (tiền sử huyết áp cao): Là nhóm tham chiếu (OR = 1.00).

Normal (huyết áp bình thường): OR = 0.0438 (95% CI: 0.0305–0.0614), p < 2.2e-16. Nhóm này có khả năng bị đột quỵ thấp hơn đáng kể, chỉ khoảng 4,4% so với nhóm tăng huyết áp.

PreHypertension (tiền tăng huyết áp): OR = 0.0424 (95% CI: 0.0293–0.0600), p < 2.2e-16. Nhóm tiền tăng huyết áp cũng có khả năng mắc bệnh thấp hơn nhiều, chỉ bằng khoảng 4,2% so với nhóm tăng huyết áp.

Kết luận tổng thể:

Những người hiện đang ở tình trạng tăng huyết áp có xác suất mắc bệnh đột quỵ vượt trội so với hai nhóm còn lại. Hai nhóm “bình thường” và “tiền tăng huyết áp” có nguy cơ thấp hơn rất nhiều (chỉ khoảng 4% so với nhóm tăng huyết áp). Sự khác biệt này có ý nghĩa thống kê mạnh (p < 0.001).

4.3.5. Thống kê suy diễn

Chúng ta sử dụng kiểm định Chi bình phương để kiểm tra giả thuyết về tính độc lập giữa tiền sử huyết áp và khả năng đột quỵ.

4.3.5.1. Kiểm định Chi bình phương

Giả thuyết kiểm định:

H₀ (Giả thuyết không): tiền sử huyết áp và khả năng mắc bệnh đột quỵ là hai biến độc lập. H₁ (Giả thuyết đối): tiền sử huyết áp và khả năng mắc bệnh đột quỵ là hai biến phụ thuộc.

# Kiểm định Chi bình phương
chisq.test(table_caohuyetap_BP_History)
## 
##  Pearson's Chi-squared test
## 
## data:  table_caohuyetap_BP_History
## X-squared = 532.16, df = 2, p-value < 2.2e-16

Kết quả kiểm định

\[ \chi^2 = 532.16,\quad df = 2,\quad p\text{-value} < 2.2 \times 10^{-16} \]

Diễn giải

Giá trị p rất nhỏ (gần bằng 0), cho thấy có đủ bằng chứng để bác bỏ giả thuyết \(H_0\) với mức ý nghĩa 5%. Điều này chứng tỏ rằng tiền sử huyết áp có mối liên hệ có ý nghĩa thống kê với khả năng mắc bệnh đột quỵ.

Nói cách khác, khả năng mắc bệnh đột quỵ phụ thuộc đáng kể vào tiền sử huyết áp, từ đó củng cố vai trò của việc theo dõi sát và phân tầng nguy cơ dựa trên tiền sử huyết áp.

4.3.5.2. Kiểm định hiệu tỷ lệ

Để so sánh trực tiếp tỷ lệ đột quỵ giữa hai nhóm, chúng ta tiến hành kiểm định hiệu hai tỷ lệ.

Gọi p1 là tỷ lệ đột quỵ ở nhóm có huyết áp cao, p2 là tỷ lệ đột quỵ ở nhóm có huyết áp bình thường, p3 là tỷ lệ đột quỵ ở nhóm có tiền huyết áp.

Giả thuyết kiểm định

  • H₀: p1 = p2 = p3 (Tỷ lệ đột quỵ ở ba nhóm là như nhau).
  • H₁: (Tồn tại ít nhất một cặp tỷ lệ khác nhau ).
# Số ca  đột quỵ ở nhóm
success_BP_History <- c(528, 286, 218)

# Tổng số bệnh nhân trong mỗi nhóm
n_BP_History <- c(569, 796, 620)

# Kiểm định hiệu tỷ lệ một phía
prop.test(success_BP_History, n_BP_History, alternative = "greater", correct = FALSE)
## 
##  3-sample test for equality of proportions without continuity correction
## 
## data:  success_BP_History out of n_BP_History
## X-squared = 532.16, df = 2, p-value < 2.2e-16
## alternative hypothesis: two.sided
## sample estimates:
##    prop 1    prop 2    prop 3 
## 0.9279438 0.3592965 0.3516129
  • Kết quả kiểm định hai tỷ lệ cho thấy tỷ lệ đột quỵ ở nhóm bệnh nhân có tiền sử huyết áp cao (p₁ = 92.79%) cao hơn rõ rệt so với nhóm tiền sử huyết áp bình thường và nhóm tiền huyết áp cao (p₂ = 35.92% và p3 = 35.16%). Giá trị p rất nhỏ (\(p = 2.2 \times 10^{-16}\)) cho thấy sự khác biệt này có ý nghĩa thống kê ở mức ý nghĩa 5%.

  • Bác bỏ giả thuyết \(H_0\), kết luận rằng tỷ lệ đột quỵ ở nhóm có tiền sử huyết áp cao cao hơn một cách có ý nghĩa thống kê so với hai nhóm còn lại.

4.4 Thể Trạng tác động đến Bị đột quỵ

library(ggplot2)

4.4.1 Bảng tần số - tần suất cho biến BMI

affect_freq <- table(data$BMI)
affect_percent <- prop.table(affect_freq) * 100
data.frame(Affects = names(affect_freq),
           Frequency = as.numeric(affect_freq),
           Percentage = round(as.numeric(affect_percent), 1))
##       Affects Frequency Percentage
## 1      Normal       703       35.4
## 2  Overweight      1182       59.5
## 3 Underweight       100        5.0

Trực quan hóa

library(ggplot2)
library(dplyr)

# Nhập dữ liệu
data1 <- data.frame(
  Affects = c("Normal", "Overweight", "Underweight"),
  Frequency = c(703, 1182, 100),
  Percentage = c(35.4, 59.5, 5.0)
)

# Tạo nhãn phần trăm
data1 <- data1 %>%
  mutate(label = paste0(Percentage, "%"))

# Vẽ biểu đồ tròn với màu đẹp
ggplot(data1, aes(x = "", y = Frequency, fill = Affects)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y") +
  geom_text(aes(label = label), 
            position = position_stack(vjust = 0.5), 
            color = "white", size = 5) +
  scale_fill_manual(values = c(
    "Normal" = "#66c2a5",        # xanh ngọc
    "Overweight" = "#fc8d62",    # cam
    "Underweight" = "#8da0cb"    # xanh dương nhạt
  )) +
  labs(title = "Biểu đồ tròn: Phân bố thể trạng BMI") +
  theme_void() +
  theme(plot.title = element_text(hjust = 0.5, size = 16, face = "bold"))

Nhận xét

Biểu đồ mô tả phân bố thể trạng (BMI) của các bệnh nhân đến khám cho thấy, 59.5% bệnh nhân có chỉ số BMI nằm trong ngưỡng bình thường, trong khi 35,4% thuộc nhóm thừa cân (overweight) và 5% thiếu cân (underweight).

  • Ngoài ra chúng ta sẽ thực hiện tính tỷ lệ phần trăm cho từng nhóm và vẽ biểu đồ tròn thể hiện tỷ lệ phần trăm ở cả 2 nhóm đối tượng tham gia khảo sát để so sánh theo số lượng tương đối.

4.4.2. Thống kê mô tả cho hai biến Thể trạng và khả năng bị đột quỵ

4.4.2.1. Bảng tần suất chéo

Trong trường hợp này ta lập bảng tần số giữa hai biến Thể Trạng và bị đột quỵ của bệnh nhân tham gia khảo sát . Bảng tần số giúp chúng ta hiểu rõ hơn sự khác nhau theo 2 nhóm.

table_dotquy_bmi <- table(data$Has_Stroke, data$BMI)
table_dotquy_bmi
##      
##       Normal Overweight Underweight
##   No     368        532          53
##   Yes    335        650          47

4.4.2.2. Trực quan hóa

# Bảng chéo

# Chuyển thành data frame để dùng với ggplot
df_plot <- as.data.frame(table_dotquy_bmi)
colnames(df_plot) <- c("Has_Stroke", "BMI", "Count")

# Biểu đồ
ggplot(df_plot, aes(x = BMI, y = Count, fill = Has_Stroke)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng bị đột quỵ theo thể trạng",
       x = "Thể Trạng (BMI)",
       y = "Số lượng bị đột quỵ",
       fill = "đột quỵ") +
  theme_minimal()

Biểu đồ trên minh họa mối quan hệ giữa tình trạng chỉ số khối cơ thể (BMI) và nguy cơ đột quỵ trong mẫu dữ liệu bao gồm các bệnh nhân từ 18 đến 84 tuổi. Kết quả thể hiện như sau:

  • Nhóm Overweight (thừa cân) chiếm tỷ trọng lớn nhất trong toàn bộ mẫu và có số lượng người bị đột quỵ cao hơn đáng kể so với nhóm không bị (khoảng 650 so với 532 trường hợp). Phát hiện này gợi ý rằng tình trạng thừa cân có thể là một yếu tố liên quan chặt chẽ đến nguy cơ đột quỵ.

  • Ở nhóm Normal BMI (cân nặng bình thường), số lượng người không bị đột quỵ (368) chỉ nhỉnh hơn nhóm bị đột quỵ (335) một cách không đáng kể. Điều này cho thấy ngay cả trong nhóm có thể trạng bình thường, nguy cơ đột quỵ vẫn tồn tại và không thể xem nhẹ.

  • Nhóm Underweight (thiếu cân) có quy mô mẫu nhỏ nhất trong ba nhóm, với số lượng bị đột quỵ (47) và không bị (53) gần như tương đương. Tuy nhiên, do số quan sát thấp, khả năng khái quát hóa kết quả từ nhóm này là hạn chế và cần được thận trọng khi đưa ra nhận định.

Tổng thể, biểu đồ cho thấy xu hướng rõ rệt rằng tình trạng thừa cân có liên quan đến tỷ lệ đột quỵ cao hơn trong quần thể nghiên cứu. Trong khi đó, dữ liệu từ nhóm thiếu cân quá hạn chế để đưa ra kết luận đáng tin cậy về mối liên hệ giữa thiếu cân và nguy cơ đột quỵ.

4.4.3. Phân tích Relative Risk giữa Thể Trạng và khả năng Bị đột quỵ

library(epitools)

Trong phần này, tác giả sẽ thực hiện tính Relative Risk nhằm phân tích sự ảnh hưởng của 3 nhóm thể trạng lên khả năng đột quỵ của các bệnh nhân tham gia khảo sát. Chúng ta sẽ tính toán Nguy cơ tương đối (RR), lấy nhóm Normal (Bình Thường) làm nhóm tham chiếu.

# Tạo bảng tần số
tab <- matrix(c(335,368,   # Normal: Yes, No
                650,532,   # Overweight: Yes, No
                47,53),    # Underweight: Yes, No
              nrow=3, byrow=TRUE)

# Đặt tên hàng và cột
rownames(tab) <- c("Normal", "Overweight", "Underweight")
colnames(tab) <- c("Yes", "No")

# Tính Risk Ratio
rr_result <- riskratio(tab, rev="columns")

# Xem kết quả
print(rr_result)
## $data
##              No  Yes Total
## Normal      368  335   703
## Overweight  532  650  1182
## Underweight  53   47   100
## Total       953 1032  1985
## 
## $measure
##                         NA
## risk ratio with 95% C.I.  estimate     lower    upper
##              Normal      1.0000000        NA       NA
##              Overweight  1.1540016 1.0514417 1.266565
##              Underweight 0.9862985 0.7898754 1.231567
## 
## $p.value
##              NA
## two-sided     midp.exact fisher.exact  chi.square
##   Normal              NA           NA          NA
##   Overweight  0.00206186  0.002270016 0.002037362
##   Underweight 0.90425574  0.915226144 0.902640554
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Phân tích Risk Ratio (RR) khẳng định quan sát trên khi nhóm thừa cân có RR = 1,154 (95% CI: 1,051 – 1,267; p ≈ 0,003), nghĩa là nguy cơ bị đột quỵ ở nhóm này cao hơn khoảng 15,4% so với nhóm bình thường và sự khác biệt này có ý nghĩa thống kê. Ngược lại, nhóm thiếu cân có RR = 0,986 (95% CI: 0,789 – 1,232; p ≈ 0,928), thể hiện nguy cơ bị tương đương nhóm bình thường và không đạt được mức ý nghĩa thống kê.

Kết quả trên củng cố giả thuyết rằng thừa cân là một yếu tố nguy cơ quan trọng đối với sự xuất hiện đột quỵ. Trong khi đó, thiếu cân dường như không làm thay đổi đáng kể nguy cơ bị bệnh. Những phát hiện này phù hợp với nhiều nghiên cứu dịch tễ học trước đây, vốn đã chỉ ra mối liên hệ giữa tình trạng thừa cân, béo phì và sự gia tăng tỷ lệ các bệnh lý tim mạch, đặc biệt là đột quỵ.

4.4.4. Phân tích Odd Ratio giữa BMI và bị đột quỵ

or_result <- oddsratio(tab, rev="columns")
# Xem kết quả
print(or_result)
## $data
##              No  Yes Total
## Normal      368  335   703
## Overweight  532  650  1182
## Underweight  53   47   100
## Total       953 1032  1985
## 
## $measure
##                         NA
## odds ratio with 95% C.I.  estimate     lower    upper
##              Normal      1.0000000        NA       NA
##              Overweight  1.3418854 1.1128927 1.618597
##              Underweight 0.9745193 0.6382994 1.483865
## 
## $p.value
##              NA
## two-sided     midp.exact fisher.exact  chi.square
##   Normal              NA           NA          NA
##   Overweight  0.00206186  0.002270016 0.002037362
##   Underweight 0.90425574  0.915226144 0.902640554
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Phân tích Odds Ratio (OR) nhằm so sánh khả năng bị đột quỵ giữa các nhóm Thể Trạng, với nhóm Normal được chọn làm nhóm tham chiếu.

Nhận xét

Kết quả phân tích Odds Ratio (OR) chỉ ra rằng nhóm thừa cân có khả năng bị đột quỵ cao hơn nhóm bình thường với OR = 1,341 (95% CI: 1,113 – 1,619; p ≈ 0,003). Điều này đồng nghĩa với việc những người thuộc nhóm thừa cân có odds bị đột quỵ lớn hơn khoảng 34,1% so với nhóm bình thường, và sự khác biệt này mang ý nghĩa thống kê.

Ngược lại, nhóm thiếu cân có OR = 0,975 (95% CI: 0,639 – 1,484; p ≈ 0,928), thể hiện rằng odds đột quỵ ở nhóm này tương đương với nhóm bình thường và không có sự khác biệt có ý nghĩa thống kê.

Kết quả này củng cố nhận định rằng thừa cân là một yếu tố liên quan mạnh đến sự gia tăng khả năng đột quỵ, trong khi tình trạng thiếu cân không cho thấy ảnh hưởng đáng kể. Xu hướng này phù hợp với nhiều nghiên cứu dịch tễ học trước đây, vốn đã chỉ ra rằng tích lũy mỡ cơ thể, đặc biệt là mỡ nội tạng, có vai trò quan trọng trong việc làm tăng nguy cơ bị đột quỵ thông qua các cơ chế liên quan đến rối loạn chuyển hóa và điều hòa mạch máu.

PHÂN TÍCH ĐA BIẾN

Sau khi đã thực hiện các phân tích đơn biến và nhận thấy rằng các yếu tố BMI, Smoking_Status, Family_History và BP_History đều có mối liên hệ với khả năng bị đột quỵ (HasStroke), bước tiếp theo là xây dựng một mô hình hồi quy đa biến.

4.5 Mục tiêu:

  • Mục tiêu của phân tích đa biến là để đánh giá tác động đồng thời của nhiều biến độc lập lên một biến phụ thuộc. Điều này cho phép chúng ta:

    • Xác định các yếu tố dự báo mạnh nhất cho khả năng mắc bệnh.
    • Đánh giá ảnh hưởng của một biến sau khi đã “kiểm soát” hoặc “điều chỉnh” cho các biến khác trong mô hình. Điều này giúp loại bỏ các yếu tố gây nhiễu (confounders).
    • Xây dựng một mô hình dự báo toàn diện hơn.

4.5.1 Mô hình xác suất tuyến tính đối với dữ liệu nhị phân

# Linear Probability Model
data$Stroke_bin <- ifelse(data$Has_Stroke == "Yes", 1, 0)
model_lpm <- lm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History, data = data)
summary(model_lpm)
## 
## Call:
## lm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.73265 -0.29374 -0.09307  0.27740  0.90693 
## 
## Coefficients:
##                           Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                0.66420    0.02213  30.008  < 2e-16 ***
## BMIOverweight              0.06844    0.01823   3.755 0.000179 ***
## BMIUnderweight             0.03670    0.04094   0.897 0.370065    
## Smoking_StatusSmoker       0.27581    0.01901  14.507  < 2e-16 ***
## BP_HistoryNormal          -0.57114    0.02102 -27.173  < 2e-16 ***
## BP_HistoryPrehypertension -0.57105    0.02222 -25.704  < 2e-16 ***
## Family_HistoryCó           0.28528    0.01719  16.600  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3827 on 1978 degrees of freedom
## Multiple R-squared:  0.4154, Adjusted R-squared:  0.4137 
## F-statistic: 234.3 on 6 and 1978 DF,  p-value: < 2.2e-16

\[ \hat{\pi} = 0.6642 + 0.06844 \cdot \text{BMI}_\text{Overweight} + 0.03670 \cdot \text{BMI}_\text{Underweight} + 0.27581 \cdot \text{Smoking_Status}_\text{Smoker} - 0.57114 \cdot \text{BP_History}_\text{Normal} \\ - 0.57105 \cdot \text{BP_History}_\text{Prehypertension} + 0.28528 \cdot \text{Family_History}_\text{Yes} \]

4.5.1.1 Đánh giá tổng quan mô hình

Mô hình hồi quy tuyến tính được sử dụng nhằm dự đoán xác suất bị đột quỵ \(\hat{\pi}\) của bệnh nhân dựa trên các yếu tố: thể trạng, hút thuốc, tiền sử gia đình, và tiền sử huyết áp.

  • Biến phụ thuộc: Stroke_bin (biến nhị phân: có/không bị).

  • Biến độc lập: BMI, Smoking_Status, BP_History, Family_History.

4.5.1.2. Chất lượng mô hình
  • Hệ số xác định: \(R^2 = 0.4154\)
  • Hệ số xác định hiệu chỉnh: \(R^2_{adj} = 0.4137\)
  • Sai số chuẩn phần dư: 0.3827
  • Thống kê F: \(F = 234.3\), với \(p < 2.2 \times 10^{-16}\)

mô hình giải thích được khoảng 41.5% biến thiên của biến phụ thuộc (Stroke_bin). Kiểm định F CHO THẤY mô hình có ý nghĩa thống kê toàn cục, tức ít nhất một biến độc lập có ảnh hưởng đáng kể đến khả năng đột quỵ.

4.5.1.3. Ý nghĩa các biến độc lập
  • BMIOverweight: Hệ số dương (0.9307, p < 0.001) → thừa cân làm tăng xác suất đột quỵ khoảng 9.3 điểm % so với BMI bình thường.

  • BMIUnderweight: Không có ý nghĩa thống kê (p = 0.37).

  • Smoking_Status: Hệ số 0.27581 (p < 0.001) → hút thuốc có xác suất đột quỵ cao hơn 27.6%.

  • BP_History:

    • Normal: Hệ số -0.57114 (p < 0.001) → nhóm huyết áp bình thường có xác suất đột quỵ thấp hơn so với nhóm tham chiếu).

    • Prehypertension: Tương tự, hệ số -0.57105 (p < 0.001) → nhóm tiền tăng huyết áp cũng có xác suất tương tự.

  • Family_HistoryYes: Hệ số 0.28528 (p < 0.001) → tiền sử gia đình bị đột quỵ làm tăng xác suất đột quỵ.

4.5.1.4. Kết luận
  • Mô hình hồi quy tuyến tính (LPM) cho thấy các yếu tố thừa cân, hút thuốc, tiền sử huyết áp, và tiền sử gia đình đều có ảnh hưởng đáng kể đến xác suất đột quỵ.

  • Tuy nhiên, do biến phụ thuộc là nhị phân, LPM không phải là mô hình tối ưu: nó có thể dự báo xác suất ngoài khoảng [0,1] và vi phạm giả định phân phối chuẩn của sai số

  • Cần tiếp tục so sánh với các mô hình nhị phân như logit, probit, và cloglog để xác định mô hình phù hợp hơn.

4.5.2 Mô hình Logit

# Logit
model_logit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                   family = binomial(link = "logit"), data = data)
summary(model_logit)
## 
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                 1.3631     0.1854   7.350 1.97e-13 ***
## BMIOverweight               0.4676     0.1293   3.617 0.000298 ***
## BMIUnderweight              0.2483     0.2865   0.867 0.385972    
## Smoking_StatusSmoker        1.8781     0.1436  13.079  < 2e-16 ***
## BP_HistoryNormal           -3.9614     0.2073 -19.113  < 2e-16 ***
## BP_HistoryPrehypertension  -3.9553     0.2121 -18.649  < 2e-16 ***
## Family_HistoryCó            1.9795     0.1361  14.548  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2748.6  on 1984  degrees of freedom
## Residual deviance: 1698.4  on 1978  degrees of freedom
## AIC: 1712.4
## 
## Number of Fisher Scoring iterations: 5
4.5.2.1. Đánh giá tổng quan mô hình logit

Mô hình hồi quy logistic (logit) được sử dụng nhằm dự đoán xác suất tái phát \(\pi\) của bệnh nhân tuyến giáp biệt hóa, với biến phụ thuộc nhị phân Stroke_bin (0: không có khả năng, 1: có khả năng).

Các biến độc lập được đưa vào mô hình gồm:

  • BMI (Thể Trạng),
  • Smoking_Status (hút thuốc hay không),
  • BP_History (tiền sử huyết áp),
  • Family_History (gia đình có mắc bệnh không),
4.5.2.1 Chất lượng mô hình
  • Sai số chuẩn (Dispersion): 1
  • Độ lệch dư (Residual deviance): 1698.4 trên 1978 bậc tự do
  • Độ lệch gốc (Null deviance): 2748.6 trên 1984 bậc tự do
  • Chênh lệch deviance: \(\Delta D = 2748.6 - 1698.4 = 1050.2\) với \(1984 - 1978 = 6\) bậc tự do
  • AIC = 1712.4

Mô hình logit cải thiện đáng kể so với mô hình rỗng, thể hiện qua deviance giảm mạnh. AIC thấp cho thấy mức độ phù hợp tương đối tốt với dữ liệu nhị phân.


4.5.2.3. Phương trình mô hình

Mô hình logit có dạng tổng quát:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 \cdot \text{BMI} + \beta_2 \cdot \text{Smoking\_Status} + \beta_3 \cdot \text{BP\_History} + \beta_4 \cdot \text{Family\_History} \]

Thay các hệ số ước lượng:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = 1.3631 + 0.4676 \cdot \text{BMI}_{Overweight} + 0.2483 \cdot \text{BMI}_{Underweight} + 1.8781 \cdot \text{Smoking\_Status}_{Smoker} - 3.9614 \cdot \text{BP\_History}_{Normal} - 3.9553 \cdot \text{BP\_History}_{Prehypertension} + 1.9795 \cdot \text{Family\_History}_{Yes} \]


4.5.2.4. Nhận xét chi tiết

Tỷ số Odds (Odds Ratio):

exp(coef(model_logit))
##               (Intercept)             BMIOverweight            BMIUnderweight 
##                3.90819501                1.59615213                1.28190008 
##      Smoking_StatusSmoker          BP_HistoryNormal BP_HistoryPrehypertension 
##                6.54082651                0.01903604                0.01915200 
##          Family_HistoryCó 
##                7.23891566
Biến Hệ số \(\beta\) OR (odds ratio) Giá trị p Ý nghĩa thống kê Diễn giải ý nghĩa
BMIOverweight 0.4676 1.596 0.000298 Người thừa cân có odds đột quỵ cao hơn ~5.96 lần so với nhóm BMI bình thường.
BMIUnderweight 0.2483 1.282 0.386 Không Ảnh hưởng không đáng kể.
Smoking_Status 1.8781 6.539 < 2e-16 Người hút thuốc có odds khả năng đột quỵ cao gấp ~ 6.5 lần so với người không hút.
BP_History_Normal -3.9614 0.019 < 2e-16 Người có tiền sử huyết áp bình thường có odds khả năng đột quỵ không đáng kể so với nhóm tham chiếu.
BP_HistoryPrehypertension -3.9553 0.019 < 2e-16 Người tiền tăng huyết áp cũng có odds khả năng đột quỵ không đáng kể so với nhóm tham chiếu.
Family_HistoryYes 1.9795 7.237 < 2e-16 Có tiền sử gia đình mắc bệnh làm tăng odds đột quỵ ~7.2 lần.

Ghi chú:
- \(\text{OR} = e^{\beta}\)
- Giá trị p < 0.05 → Có ý nghĩa thống kê


4.5.2.5. Kết luận
  • Mô hình logit phù hợp để dự đoán khả năng đột quỵ.
  • Các biến Smoking_Status, BP_History, và Family_History là những yếu tố dự báo mạnh mẽ nhất.
  • BMI thừa cân có tác động đáng kể, trong khi BMI thiếu cân không có ý nghĩa thống kê.
  • Kết quả này gợi ý rằng việc kiểm soát hút thuốc, theo dõi tiền sử huyết áp và yếu tố di truyền có thể đóng vai trò quan trọng trong phòng ngừa đột quỵ.

4.5.3 Mô hình Probit

# Probit
model_probit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                    family = binomial(link = "probit"), data = data)
summary(model_probit)
## 
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "probit"), data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.80831    0.10158   7.957 1.76e-15 ***
## BMIOverweight              0.27289    0.07467   3.655 0.000257 ***
## BMIUnderweight             0.10695    0.16562   0.646 0.518436    
## Smoking_StatusSmoker       1.09529    0.08088  13.542  < 2e-16 ***
## BP_HistoryNormal          -2.31464    0.11089 -20.874  < 2e-16 ***
## BP_HistoryPrehypertension -2.32096    0.11400 -20.360  < 2e-16 ***
## Family_HistoryCó           1.14632    0.07475  15.335  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2748.6  on 1984  degrees of freedom
## Residual deviance: 1691.6  on 1978  degrees of freedom
## AIC: 1705.6
## 
## Number of Fisher Scoring iterations: 6
4.5.3.1. Phương trình mô hình:

Mô hình hồi quy Probit có dạng:

\[ \Phi^{-1}(\pi) = 0.80831 + 0.27289 \cdot \text{BMI}_{Overweight} + 0.10695 \cdot \text{BMI}_{Underweight} + 1.09529 \cdot \text{Smoking\_Status}_{Smoker} - 2.31464 \cdot \text{BP\_History}_{Normal} - 2.32096 \cdot \text{BP\_History}_{Prehypertension} + 1.14632 \cdot \text{Family\_History}_{Yes} \]

Trong đó: - \(\Phi^{-1}(\pi)\) là hàm nghịch đảo của hàm phân phối chuẩn tích lũy, đặc trưng cho mô hình Probit. - \(\pi\) là xác suất đột quỵ.


4.5.3.2 Đánh giá mô hình
  • Null deviance: 2748.6 (df = 1984)
  • Residual deviance: 1691.6 (df = 1978)
  • Chênh lệch deviance: \(\Delta D = 2748.6 - 1691.6 = 1057.0\) với 6 bậc tự do → cải thiện mô hình rõ rệt.
  • AIC = 1705.6, thấp hơn so với mô hình logit trước đó (1712.4) → mô hình Probit mô tả dữ liệu tốt hơn một chút.

4.5.3.3 Bảng kết quả chi tiết
Biến Hệ số \(\beta\) Giá trị p Ý nghĩa thống kê Diễn giải ý nghĩa
BMIOverweight 0.27289 0.000257 Người thừa cân có xác suất đột quỵ cao hơn nhóm BMI bình thường.
BMIUnderweight 0.10695 0.518 Không Ảnh hưởng không đáng kể.
Smoking_StatusSmoker 1.09529 < 2e-16 Người hút thuốc có xác suất đột quỵ cao hơn đáng kể.
BP_History_HypertensionNormal -2.31464 < 2e-16 Nhóm huyết áp bình thường có xác suất mắc thấp hơn nhiều so với nhóm tăng huyết áp.
BP_HistoryPrehypertension - 2.32096 < 2e-16 Nhóm tiền tăng huyết áp cũng có xác suất thấp hơn đáng kể.
Family_HistoryYes 1.14632 < 2e-16 Có tiền sử gia đình làm tăng xác suất đột quỵ.

4.5.3.4 Kết luận
  • Mô hình Probit phù hợp với dữ liệu và cải thiện rõ rệt so với mô hình rỗng.
  • Các yếu tố hút thuốc, tiền sử huyết áp, tiền sử gia đình, BMI thừa cân đều có ảnh hưởng mạnh đến nguy cơ đột quỵ.
  • Kết quả tương đồng với mô hình Logit, nhưng Probit có AIC thấp hơn, gợi ý khả năng mô phỏng tốt hơn một chút.

4.5.4 Mô hình Cloglog

# Cloglog
model_cloglog <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                     family = binomial(link = "cloglog"), data = data)
summary(model_cloglog)
## 
## Call:
## glm(formula = Stroke_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "cloglog"), data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                0.31787    0.09735   3.265 0.001094 ** 
## BMIOverweight              0.29497    0.08774   3.362 0.000774 ***
## BMIUnderweight             0.11984    0.19590   0.612 0.540702    
## Smoking_StatusSmoker       1.26412    0.09210  13.725  < 2e-16 ***
## BP_HistoryNormal          -2.56855    0.12764 -20.123  < 2e-16 ***
## BP_HistoryPrehypertension -2.60559    0.13294 -19.599  < 2e-16 ***
## Family_HistoryCó           1.41020    0.09884  14.268  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2748.6  on 1984  degrees of freedom
## Residual deviance: 1685.1  on 1978  degrees of freedom
## AIC: 1699.1
## 
## Number of Fisher Scoring iterations: 6
4.5.4.1 Phương trình mô hình

Mô hình hồi quy Cloglog có dạng:

\[ \log\left(-\log(1 - \pi)\right) = 0.31787 + 0.29497 \cdot \text{BMI}_{Overweight} + 0.11984 \cdot \text{BMI}_{Underweight} + 1.26412 \cdot \text{Smoking\_Status}_{Smoker} - 2.56855 \cdot \text{BP\_History}_{Normal} - 2.60559 \cdot \text{BP\_History}_{Prehypertension} + 1.41020 \cdot \text{Family\_History}_{Yes} \]

Trong đó: - \(\pi\) là xác suất đột quỵ. - Hàm liên kết là \(g(\pi) = \log(-\log(1 - \pi))\).


4.5.4.2. Đánh giá mô hình
  • Null deviance: 2748.6 (df = 1984)
  • Residual deviance: 1685.1 (df = 1978)
  • Chênh lệch deviance: \(\Delta D = 2748.6 - 1685.1 = 1063.5\) với 6 bậc tự do → cải thiện mô hình rất rõ rệt.
  • AIC = 1699.1, thấp hơn Logit (1712.4) và Probit (1705.6) → Cloglog mô phỏng dữ liệu tốt nhất trong ba mô hình.

4.5.4.3. Bảng kết quả chi tiết
Biến Hệ số \(\beta\) Giá trị p Ý nghĩa thống kê Diễn giải ý nghĩa
BMIOverweight 0.29497 0.00077 Người thừa cân có xác suất đột quỵ cao hơn đáng kể.
BMIUnderweight 0.11984 0.541 Không Ảnh hưởng không đáng kể.
Smoking_StatusSmoker 1.26412 < 2e-16 Người hút thuốc có nguy cơ mắc bệnh cao hơn nhiều.
BP_History_HypertensionNormal -2.56855 < 2e-16 Huyết áp bình thường có nguy cơ đột quỵ thấp.
BP_HistoryPrehypertension -2.60559 < 2e-16 Tiền tăng huyết áp có xác suất ảnh hưởng thấp.
Family_HistoryYes 1.41020 < 2e-16 Có tiền sử gia đình mắc bệnh làm tăng mạnh nguy cơ đột quỵ.

4.5.4.4 Kết luận
  • Mô hình Cloglog cho thấy sự phù hợp tốt nhất (AIC thấp nhất).
  • Các yếu tố quan trọng: BMI thừa cân, hút thuốc, tiền sử huyết áp, tiền sử gia đình đều có ảnh hưởng rõ rệt đến nguy cơ đột quỵ.
  • So với Logit và Probit, Cloglog thích hợp hơn khi dữ liệu có phân phối xác suất lệch về phía thấp (nhiều người không mắc, ít người mắc).

4.5.5 So sánh và đánh giá các mô hình

# So sánh AIC
aic_values <- data.frame(
  Mô_hình = c("LPM", "Logit", "Probit", "Cloglog"),
  AIC = c(AIC(model_lpm), AIC(model_logit), AIC(model_probit), AIC(model_cloglog))
)
print(aic_values)
##   Mô_hình      AIC
## 1     LPM 1828.510
## 2   Logit 1712.377
## 3  Probit 1705.560
## 4 Cloglog 1699.130

Bảng AIC của các mô hình

Mô hình AIC Nhận xét về độ phù hợp
LPM 1828.510 Phù hợp tương đối
Logit 1712.377 Phù hợp tương đối
Probit 1705.560 Phù hợp tương tự Logit
Cloglog 1699.130 ✅ Tốt nhất (AIC thấp nhất trong các mô hình nhị phân)

Lưu ý: Mô hình LPM (Linear Probability Model) là mô hình hồi quy tuyến tính, không thuộc họ phân phối nhị thức nên AIC có thể âm và không trực tiếp so sánh được với các mô hình logit, probit, cloglog.


Kết luận:

  • Trong ba mô hình nhị phân (Logit, Probit, Cloglog):
    • Cloglog có AIC thấp nhất (1699.130) → mô hình có độ phù hợp tốt nhất.
    • Logit và Probit có AIC xấp xỉ nhau → mức độ phù hợp tương đương..
    • Với biến phụ thuộc dạng nhị phân, Cloglog là lựa chọn ưu tiên nếu mục tiêu là phân tích chính xác xác suất mắc bệnh đột quỵ.

4.6. Kết quả hồi quy và dự báo xác suất

# Cài đặt gói
if (!require(pROC)) install.packages("pROC", dependencies = TRUE)
## Loading required package: pROC
## Warning: package 'pROC' was built under R version 4.3.3
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following object is masked from 'package:gmodels':
## 
##     ci
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
library(pROC)

# Huấn luyện mô hình cloglog
model_cloglog <- glm(
  formula = Stroke_bin ~ BMI + Smoking_Status + BP_History + 
    Family_History, 
  family = binomial(link = "cloglog"), 
  data = data
)

# Tính xác suất dự đoán từ mô hình cloglog
predicted_probs_cloglog <- predict(model_cloglog, type = "response")

# Vẽ đường cong ROC và tính AUC, loại bỏ cảnh báo
suppressWarnings({
  roc_cloglog <- roc(
    response = data$Has_Stroke,
    predictor = predicted_probs_cloglog,
    levels = c("No", "Yes"),
    direction = "<"
  )
})

# Vẽ biểu đồ ROC
plot(roc_cloglog, col = "darkgreen", lwd = 2, main = "ROC Curve - Cloglog Model")

# Hiển thị AUC
auc_cloglog <- auc(roc_cloglog)
print(paste("AUC:", round(auc_cloglog, 4)))
## [1] "AUC: 0.8732"
model_logit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + 
                     Family_History, family = binomial(link = "logit"), data = data)

model_probit <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + 
                      Family_History, family = binomial(link = "probit"), data = data)

model_cloglog <- glm(Stroke_bin ~ BMI + Smoking_Status + BP_History + 
                       Family_History, family = binomial(link = "cloglog"), data = data)

# Dự đoán xác suất
pred_logit <- predict(model_logit, type = "response")
pred_probit <- predict(model_probit, type = "response")
pred_cloglog <- predict(model_cloglog, type = "response")

# Tạo ROC cho từng mô hình và loại bỏ cảnh báo
suppressWarnings({
  roc_logit <- roc(response = data$Has_Stroke, predictor = pred_logit, levels = c("No", "Yes"), direction = "<")
  roc_probit <- roc(response = data$Has_Stroke, predictor = pred_probit, levels = c("No", "Yes"), direction = "<")
  roc_cloglog <- roc(response = data$Has_Stroke, predictor = pred_cloglog, levels = c("No", "Yes"), direction = "<")
})

# Vẽ ROC đầu tiên
plot(roc_logit, col = "#1b9e77", lwd = 2, main = "So sánh ROC: Logit - Probit - Cloglog", legacy.axes = TRUE)

# Vẽ các ROC tiếp theo
lines(roc_probit, col = "#7570b3", lwd = 2)
lines(roc_cloglog, col = "#fc8d62", lwd = 2)

# Thêm chú thích (legend)
legend("bottomright", legend = c(
  paste("Logit (AUC =", round(auc(roc_logit), 3), ")"),
  paste("Probit (AUC =", round(auc(roc_probit), 3), ")"),
  paste("Cloglog (AUC =", round(auc(roc_cloglog), 3), ")")
),
col = c("#1b9e77", "#7570b3", "#fc8d62"),
lwd = 2, cex = 0.8, box.lwd = 0
)

Đánh giá hiệu suất mô hình bằng ROC và AUC

  • Ba mô hình hồi quy nhị phân (Logit, Probit, Cloglog) được xây dựng để dự đoán khả năng đột quỵ dựa trên các biến độc lập: BMI, tình trạng hút thuốc, tiền sử huyết áp, và tiền sử gia đình.

  • Biểu đồ ROC cho thấy cả ba mô hình đều có AUC = 0.873, chứng tỏ khả năng phân loại tương đươngmức độ dự đoán rất tốt.

  • Các đường ROC gần như trùng khít, cho thấy việc lựa chọn Logit, Probit hay Cloglog không tạo ra sự khác biệt đáng kể về hiệu suất phân loại.

  • Mặc dù Probit và Cloglog đạt AIC thấp hơn Logit, nhưng trong thực tiễn:

    • Logit vẫn là lựa chọn phổ biến hơn nhờ dễ diễn giải, có thể quy đổi trực tiếp sang Odds Ratio (OR).
    • Probit và Cloglog yêu cầu người sử dụng hiểu sâu về phân phối chuẩn tích lũy hoặc hàm log-log, ít được sử dụng trong các báo cáo lâm sàng.

Kết luận: - Cả ba mô hình đều đạt AUC cao (0.873), thể hiện khả năng dự đoán mạnh. - Logit được khuyến nghị sử dụng vì: - Dễ diễn giải. - Phù hợp với chuẩn báo cáo trong các nghiên cứu y học. - Đem lại hiệu suất phân loại tương đương với Probit và Cloglog.

CHƯƠNG 5: KẾT LUẬN, HẠN CHẾ VÀ ĐỀ XUẤT

5.1 Kết luận

Nghiên cứu “Phân tích các yếu tố ảnh hưởng đến khả năng mắc đột quỵ” sử dụng dữ liệu thực tế nhằm xác định các yếu tố nguy cơ chính góp phần vào khả năng xảy ra đột quỵ. Phân tích hồi quy nhị phân được thực hiện thông qua ba mô hình phổ biến: Logit, Probit và Complementary Log-log (Cloglog). Các biến được đưa vào mô hình bao gồm: chỉ số khối cơ thể (BMI), tình trạng hút thuốc, tiền sử huyết áp, và tiền sử gia đình có người mắc đột quỵ.

Kết quả cho thấy có hai yếu tố nguy cơ nổi bật và nhất quán trong cả ba mô hình: tiền sử huyết áp và tiền sử gia đình. Cụ thể, người có tiền sử huyết áp có nguy cơ đột quỵ cao hơn gần 3 lần so với người không có tiền sử này. Tương tự, người có người thân từng mắc đột quỵ cũng có nguy cơ cao hơn đáng kể. Các yếu tố này đều đạt mức ý nghĩa thống kê và phù hợp với các nghiên cứu trước đó trong lĩnh vực y học dự phòng và dịch tễ học.

Trong khi đó, các yếu tố như BMI và tình trạng hút thuốc không cho thấy ảnh hưởng thống kê rõ rệt trong mô hình phân tích đa biến, mặc dù chúng vẫn được xem là yếu tố nguy cơ tiềm năng trong thực hành lâm sàng.

Đánh giá hiệu suất mô hình qua đường cong ROC và chỉ số AUC cho thấy cả ba mô hình đều đạt hiệu năng phân loại tương đương nhau, với AUC = 0.873. Điều này phản ánh khả năng phân biệt tương đối tốt giữa nhóm có nguy cơ và không có nguy cơ đột quỵ. Đường ROC gần như trùng khít giữa ba mô hình càng củng cố thêm tính ổn định trong hiệu năng phân loại.

Mặc dù Probit và Cloglog có AIC thấp hơn, mô hình Logit vẫn được lựa chọn là phương án tối ưu nhờ tính dễ diễn giải (qua tỷ số odds – odds ratio) và phổ biến rộng rãi trong nghiên cứu y học lâm sàng. Việc sử dụng mô hình Logit giúp hỗ trợ tốt hơn trong công tác tiên lượng nguy cơ đột quỵ, từ đó phục vụ công tác sàng lọc, tư vấn và can thiệp sớm cho nhóm đối tượng nguy cơ cao trong cộng đồng.

5.2 Hạn chế

Trong quá trình thực hiện nghiên cứu, tác giả nhận thấy vẫn còn tồn tại một số hạn chế nhất định.

Thứ nhất, kích thước mẫu sử dụng trong phân tích chưa thật sự lớn, điều này có thể ảnh hưởng đến độ chính xác của các kết quả ước lượng và tính khái quát khi áp dụng cho cộng đồng rộng hơn.

Thứ hai, dữ liệu được thu thập chủ yếu từ nguồn thứ cấp hoặc do người tham gia tự khai báo, nên không tránh khỏi sai lệch, đặc biệt với các thông tin như tình trạng hút thuốc hay tiền sử bệnh lý.

Thứ ba, mô hình chưa đưa vào các biến số lâm sàng quan trọng khác, như huyết áp thực tế, mức mỡ máu, chỉ số đường huyết hay tuổi – vốn là những yếu tố có mối liên hệ chặt chẽ với nguy cơ đột quỵ trong thực tế.

Cuối cùng, do nghiên cứu mang tính mô tả cắt ngang, nên chỉ phản ánh được mối liên hệ giữa các yếu tố, chứ chưa đủ cơ sở để khẳng định mối quan hệ nhân – quả.

5.3 Đề xuất

Từ những hạn chế nêu trên, tác giả xin đưa ra một số kiến nghị nhằm cải thiện chất lượng nghiên cứu trong tương lai.

Trước hết, cần mở rộng cỡ mẫu và phạm vi khảo sát, bao gồm nhiều nhóm tuổi, nghề nghiệp, khu vực sinh sống khác nhau để tăng tính đại diện và độ tin cậy cho kết quả nghiên cứu.

Thứ hai, nên bổ sung thêm các chỉ số y khoa cụ thể hơn, như huyết áp đo trực tiếp, chỉ số lipid, glucose máu hay độ tuổi, để giúp mô hình dự đoán chính xác và đầy đủ hơn.

Bên cạnh đó, nhóm khuyến khích nên thực hiện những nghiên cứu theo thời gian (cohort study) để có thể đánh giá rõ ràng hơn về mối quan hệ nhân – quả giữa các yếu tố nguy cơ và nguy cơ mắc đột quỵ.

Cuối cùng, nếu có điều kiện, nên phát triển các công cụ đánh giá nguy cơ đột quỵ đơn giản và dễ sử dụng, ứng dụng vào các cơ sở y tế hoặc cộng đồng, nhằm giúp phát hiện sớm nhóm đối tượng nguy cơ cao và có biện pháp can thiệp kịp thời.

LS0tDQp0aXRsZTogIk5HSEnDik4gQ+G7qFUgTeG7kEkgTEnDik4gSOG7hiBHSeG7rkEgQ8OBQyBZ4bq+VSBU4buQIE5HVVkgQ8agIFbDgCBLSOG6oiBOxIJORyBN4bquQyBC4buGTkggxJDhu5hUIFFV4bu0Ig0KYXV0aG9yOiAiVsO1IFRydW5nIEhp4bq/dSINCmRhdGU6ICIyMDI1LTA2LTExIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleA0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogJzQnDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KYGBge2NzcyxlY2hvID0gRkFMU0V9DQpoMSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDMycHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkDQogIH0NCg0KaDIgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiANCn0NCg0KaDMgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpoNCB7Zm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljfQ0KDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMThweDsNCiAgDQp9DQpwOm5vdChoMSk6bm90KGgyKTpub3QoaDMpOm5vdChoNCk6bm90KGg1KSB7DQogIHRleHQtaW5kZW50OiAyZW07fQ0KcCB7DQogIHRleHQtYWxpZ246IGp1c3RpZnk7DQogIH0NCi50b2NpZnktaGVhZGVyIHsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCmBgYA0KDQpgYGB7cixtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkoQUVSKQ0KbGlicmFyeShkcGx5cikNCmBgYA0KDQojICoqQ0jGr8agTkcgMTogVOG7lE5HIFFVQU4gTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMS4xLiBMw70gZG8gY2jhu41uIMSR4buBIHTDoGkqKg0KDQrEkOG7mXQgcXXhu7UgKGhheSBjw7JuIGfhu41pIGzDoCB0YWkgYmnhur9uIG3huqFjaCBtw6F1IG7Do28pIGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIG5ndXnDqm4gbmjDom4gaMOgbmcgxJHhuqd1IGfDonkgdOG7rSB2b25nIHbDoCB0w6BuIHThuq10IHRyw6puIHRvw6BuIGPhuqd1LCDEkeG7k25nIHRo4budaSDEkcaw4bujYyB4ZW0gbMOgIGfDoW5oIG7hurduZyB5IHThur8gbmdoacOqbSB0cuG7jW5nIHRyb25nIHRo4bq/IGvhu7cgMjEuIFRoZW8gVOG7lSBjaOG7qWMgWSB04bq/IFRo4bq/IGdp4bubaSAoV0hPKSwgbeG7l2kgbsSDbSBjw7Mga2hv4bqjbmcgMTUgdHJp4buHdSBuZ8aw4budaSB0csOqbiB0aOG6vyBnaeG7m2kgYuG7iyDEkeG7mXQgcXXhu7UsIHRyb25nIMSRw7MgZ+G6p24gNiB0cmnhu4d1IG5nxrDhu51pIHThu60gdm9uZyB2w6AgaMahbiA1IHRyaeG7h3UgbmfGsOG7nWkgc+G7kW5nIHPDs3QgbmjGsG5nIHBo4bqjaSBjaOG7i3UgY8OhYyBkaSBjaOG7qW5nIG5naGnDqm0gdHLhu41uZyB24buBIHRo4bqnbiBraW5oIHbDoCB24bqtbiDEkeG7mW5nLiDEkOG7mXQgcXXhu7Uga2jDtG5nIGNo4buJIGfDonkgdOG7lW4gdGjhuqV0IGzhu5tuIHbhu4EgbeG6t3Qgc+G7qWMga2jhu49lIHbDoCBraW5oIHThur8gbcOgIGPDsm4g4bqjbmggaMaw4bufbmcgbMOidSBkw6BpIMSR4bq/biBjaOG6pXQgbMaw4bujbmcgY3Xhu5ljIHPhu5FuZyBj4bunYSBuZ8aw4budaSBi4buHbmggdsOgIGdpYSDEkcOsbmggaOG7jS4NCg0KVOG6oWkgVmnhu4d0IE5hbSwgxJHhu5l0IHF14bu1IGzDoCBuZ3V5w6puIG5ow6JuIGfDonkgdOG7rSB2b25nIMSR4bupbmcgdGjhu6kgYmEgdsOgIMSRYW5nIGPDsyB4dSBoxrDhu5tuZyBnaWEgdMSDbmcgbmhhbmggY2jDs25nLCDEkeG6t2MgYmnhu4d0IOG7nyBjw6FjIGtodSB24buxYyDEkcO0IHRo4buLIHbDoCBkw6JuIHPhu5EgY2FvIHR14buVaS4gTmhp4buBdSB54bq/dSB04buRIG5ndXkgY8ahIGxpw6puIHF1YW4gxJHhur9uIGzhu5FpIHPhu5FuZyBoaeG7h24gxJHhuqFpIG5oxrAgaMO6dCB0aHXhu5FjIGzDoSwgw610IHbhuq1uIMSR4buZbmcsIGNo4bq/IMSR4buZIMSDbiB14buRbmcga2jDtG5nIGzDoG5oIG3huqFuaCwgY8O5bmcgduG7m2kgY8OhYyB54bq/dSB04buRIGzDom0gc8OgbmcgbmjGsCB0xINuZyBodXnhur90IMOhcCwgdGjhu6thIGPDom4sIGhv4bq3YyB0aeG7gW4gc+G7rSBi4buHbmggbMO9IHRpbSBt4bqhY2gsIMSR4buBdSBjw7MgdGjhu4MgbMOgbSB0xINuZyDEkcOhbmcga+G7gyBraOG6oyBuxINuZyBi4buLIMSR4buZdCBxdeG7tS4gxJDDoW5nIGxvIG5n4bqhaSBsw6Agbmhp4buBdSB0csaw4budbmcgaOG7o3AgxJHhu5l0IHF14bu1IHjhuqN5IHJhIGLhuqV0IG5n4budLCBraGkgbmfGsOG7nWkgYuG7h25oIGNoxrBhIHThu6tuZyDEkcaw4bujYyBj4bqjbmggYsOhbyB24buBIG5ndXkgY8ahLg0KDQpUcm9uZyBi4buRaSBj4bqjbmggxJHDsywgdmnhu4djIHBow6JuIHTDrWNoIHbDoCBwaMOhdCBoaeG7h24gc+G7m20gY8OhYyB54bq/dSB04buRIG5ndXkgY8ahIGPDsyBsacOqbiBxdWFuIMSR4bq/biDEkeG7mXQgcXXhu7UgxJHDs25nIHZhaSB0csOyIHRoZW4gY2jhu5F0IHRyb25nIHZp4buHYyBwaMOybmcgbmfhu6thIGNo4bunIMSR4buZbmcgdsOgIHjDonkgZOG7sW5nIGPDoWMgbcO0IGjDrG5oIGThu7EgYsOhbyBy4bunaSBybyBjaMOtbmggeMOhYy4gTmjhu69uZyBjw7RuZyBj4bulIG7DoHkgY8OzIHRo4buDIGdpw7pwIGjhu5cgdHLhu6MgY8OhYyBjaMawxqFuZyB0csOsbmggeSB04bq/IGPhu5luZyDEkeG7k25nLCBuw6JuZyBjYW8gbmjhuq1uIHRo4bupYyBwaMOybmcgbmfhu6thLCB04buRaSDGsHUgaMOzYSBjaGnhur9uIGzGsOG7o2MgY2FuIHRoaeG7h3Agc+G7m20gdGjDtG5nIHF1YSBj4bqjaSB0aGnhu4duIGzhu5FpIHPhu5FuZyB2w6AgdGhlbyBkw7VpIGPDoWMgY2jhu4kgc+G7kSBz4bupYyBraOG7j2UuDQoNClbhu5tpIHThuqdtIHF1YW4gdHLhu41uZyB2w6AgdMOtbmggY+G6pXAgdGhp4bq/dCBuaMawIHbhuq15LCDEkeG7gSB0w6BpIOKAnE5HSEnDik4gQ+G7qFUgTeG7kEkgTEnDik4gSOG7hiBHSeG7rkEgQ8OBQyBZ4bq+VSBU4buQIE5HVVkgQ8agIFbDgCBLSOG6oiBOxIJORyBN4bquQyBC4buGTkggxJDhu5hUIFFV4bu04oCdIMSRxrDhu6NjIGzhu7FhIGNo4buNbiBuaOG6sW0gY3VuZyBj4bqlcCBjxqEgc+G7nyBraG9hIGjhu41jIGNobyB2aeG7h2Mgbmjhuq1uIGRp4buHbiBz4bubbSBuaMOzbSBuZ3V5IGPGoSBjYW8sIHThu6sgxJHDsyBo4buXIHRy4bujIGPDoWMgcXV54bq/dCDEkeG7i25oIHRyb25nIGhv4bqhY2ggxJHhu4tuaCBjaMOtbmggc8OhY2ggeSB04bq/IHbDoCBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIHBow7JuZyBuZ+G7q2EgxJHhu5l0IHF14bu1IHRyb25nIGPhu5luZyDEkeG7k25nLg0KDQojIyAqKjEuMi4gTeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdSoqDQoNCioqTeG7pWMgdGnDqnUgdOG7lW5nIHF1w6F0OioqDQoNClBow6JuIHTDrWNoIHbDoCB4w6FjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGNow61uaCDhuqNuaCBoxrDhu59uZyDEkeG6v24gbmd1eSBjxqEgbeG6r2MgYuG7h25oIMSR4buZdCBxdeG7tSB0csOqbiBt4buZdCBuaMOzbSDEkeG7kWkgdMaw4bujbmcgY+G7pSB0aOG7gywgdOG7qyDEkcOzIHjDonkgZOG7sW5nIG3DtCBow6xuaCBk4buxIGLDoW8gcuG7p2kgcm8gbmjhurFtIHBo4bulYyB24bulIGPDtG5nIHTDoWMgcGjDsm5nIG5n4burYSB2w6Aga2nhu4NtIHNvw6F0IGLhu4duaC4NCg0KKipN4bulYyB0acOqdSBj4bulIHRo4buDOioqDQoNCi0gSOG7hyB0aOG7kW5nIGjDs2EgY8OhYyBjxqEgc+G7nyBsw70gdGh1eeG6v3QgbGnDqm4gcXVhbiDEkeG6v24gYuG7h25oIMSR4buZdCBxdeG7tSwgY8OhYyBk4bqhbmcgYmnhu4N1IGhp4buHbiBsw6JtIHPDoG5nLCBiaeG6v24gY2jhu6luZyB2w6AgY8OhYyB54bq/dSB04buRIG5ndXkgY8ahIMSRw6MgxJHGsOG7o2MgeMOhYyDEkeG7i25oIHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSB0csaw4bubYy4NCg0KLSBUaHUgdGjhuq1wIHbDoCB44butIGzDvSBk4buvIGxp4buHdSB04burIGLhu5kgU3Ryb2tlIFByZWRpY3Rpb24gRGF0YXNldCwgYmFvIGfhu5NtIGPDoWMgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jLCBow6BuaCB2aSBz4bupYyBraOG7j2UgdsOgIHnhur91IHThu5EgbMOibSBzw6BuZyBj4bunYSDEkeG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdS4NCg0KLSDDgXAgZOG7pW5nIGPDoWMgbcO0IGjDrG5oIHRo4buRbmcga8OqIHbDoCBo4buNYyBtw6F5IG5oxrAgaOG7k2kgcXV5IGxvZ2lzdGljLCBsb2dpdCwgcHJvYml0LC4uLiDEkeG7gyB4w6FjIMSR4buLbmggbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIMSR4buZdCBxdeG7tS4NCg0KLSDEkOG7gSB4deG6pXQgY8OhYyBraHV54bq/biBuZ2jhu4sgY+G7pSB0aOG7gyB24buBIHRoYXkgxJHhu5VpIGzhu5FpIHPhu5FuZywgY2hp4bq/biBsxrDhu6NjIHThuqdtIHNvw6F0IHPhu5ttIHbDoCBjaMOtbmggc8OhY2ggeSB04bq/IGPhu5luZyDEkeG7k25nLCBk4buxYSB0csOqbiBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgxJHDoyDEkcaw4bujYyBwaMOibiB0w61jaC4NCg0KIyMgKioxLjMuIMSQ4buRaSB0xrDhu6NuZyB2w6AgcGjhuqFtIHZpIG5naGnDqm4gY+G7qXUqKg0KDQrEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdTogQ8OhYyB54bq/dSB04buRIG5ndXkgY8ahIChuaMawIHR14buVaSwgZ2nhu5tpIHTDrW5oLCBjaOG7iSBz4buRIGto4buRaSBjxqEgdGjhu4MgQk1JLCBodXnhur90IMOhcCwgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCwgbG/huqFpIHRodeG7kWMgc+G7rSBk4bulbmcsIG3hu6ljIMSR4buZIGhv4bqhdCDEkeG7mW5nIHRo4buDIGNo4bqldCwgdi52LikgdsOgIG3hu5FpIHF1YW4gaOG7hyBj4bunYSBjaMO6bmcgduG7m2kgY2jhu6luZyDEkeG7mXQgcXXhu7UuDQoNCsSQ4buRaSB0xrDhu6NuZyBraOG6o28gc8OhdDogROG7ryBsaeG7h3UgY8OzIHRo4buDIMSRxrDhu6NjIHRodSB0aOG6rXAgdOG7qyBjw6FjIGN14buZYyDEkWnhu4F1IHRyYSBz4bupYyBraOG7j2UgY+G7mW5nIMSR4buTbmcsIGjhu5Mgc8ahIGLhu4duaCDDoW4gdOG6oWkgYuG7h25oIHZp4buHbiwgxJHGsOG7o2MgdMOhYyBnaeG6oyB0aHUgdGjhuq1wIHThu6sgYuG7mSBk4buvIGxp4buHdSBTdHJva2UgUHJlZGljdGlvbiBEYXRhc2V0IHThu6sgbmd14buTbiBrYWdnbGUuY29tLg0KDQpQaOG6oW0gdmkga2jDtG5nIGdpYW46IE5naGnDqm4gY+G7qXUgY8OzIHRo4buDIMSRxrDhu6NjIGdp4bubaSBo4bqhbiB0cm9uZyBt4buZdCBraHUgduG7sWMgxJHhu4thIGzDvSBuaOG6pXQgxJHhu4tuaCAodsOtIGThu6U6IG3hu5l0IHThu4luaC90aMOgbmggcGjhu5EsIG3hu5l0IGLhu4duaCB2aeG7h24pLg0KDQojIyAqKjEuNC4gUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNCi0gQuG7mSBk4buvIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IGPDsyBj4bqldSB0csO6YyBwaMO5IGjhu6NwIGNobyBjw6FjIHBow6JuIHTDrWNoIMSR4buLbmggbMaw4bujbmcsIMSR4bq3YyBiaeG7h3QgbMOgIGPDoWMgbcO0IGjDrG5oIHRo4buRbmcga8OqIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuLiBI4bqndSBo4bq/dCBjw6FjIGJp4bq/biB0cm9uZyB04bqtcCBk4buvIGxp4buHdSDEkeG7gXUgbMOgIGJp4bq/biBuaOG7iyBwaMOibiBob+G6t2MgcGjDom4gbG/huqFpIHbhu5tpIHPhu5EgbMaw4bujbmcgbeG7qWMgxJHhu5kgaOG6oW4gY2jhur8sIHRodeG6rW4gbOG7o2kgY2hvIHZp4buHYyDDoXAgZOG7pW5nIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuaMawIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIChPTFMpLCBo4buTaSBxdXkgbG9naXN0aWMsIG3DtCBow6xuaCBwcm9iaXQsIHbDoCBtw7QgaMOsbmggY29tcGxlbWVudGFyeSBsb2ctbG9nIChjbG9nbG9nKS4gQ8OhYyBtw7QgaMOsbmggbsOgeSDEkcaw4bujYyBs4buxYSBjaOG7jW4gbmjhurFtIHBow6JuIHTDrWNoIHbDoCDEkeG7i25oIGzGsOG7o25nIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyB54bq/dSB04buRIG5ndXkgY8ahIChiaeG6v24gxJHhu5ljIGzhuq1wKSB2w6Aga2jhuqMgbsSDbmcgeOG6o3kgcmEgxJHhu5l0IHF14bu1IChiaeG6v24gcGjhu6UgdGh14buZYyDigJMgSGFzX1N0cm9rZSkuDQoNCi0gQsOqbiBj4bqhbmggY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5LCBuZ2hpw6puIGPhu6l1IGPDsm4gc+G7rSBk4bulbmcgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBtw7QgdOG6oyDEkeG7gyB0w7NtIHThuq90IMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyB2w6AgaMOgbmggdmkgc+G7qWMga2jhu49lIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBraOG6o28gc8OhdCwgxJHhu5NuZyB0aOG7nWkgw6FwIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZCDEkeG7gyBraeG7g20gdHJhIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogZ2nhu69hIGPDoWMgYmnhur9uIHBow6JuIGxv4bqhaSB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgxJHhu5l0IHF14bu1LiBWaeG7h2Mga+G6v3QgaOG7o3AgZ2nhu69hIHBow6JuIHTDrWNoIG3DtCB04bqjLCBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dCB2w6AgbcO0IGjDrG5oIGjDs2EgxJHhu4tuaCBsxrDhu6NuZyBjaG8gcGjDqXAgbsOibmcgY2FvIMSR4buZIHRpbiBj4bqteSwgdMOtbmgga2jDoWNoIHF1YW4gdsOgIGNoaeG7gXUgc8OidSBj4bunYSBjw6FjIGvhur90IGx14bqtbiByw7p0IHJhIHThu6sgbmdoacOqbiBj4bupdS4NCg0KLSBDw6FjaCB0aeG6v3AgY+G6rW4gbsOgeSBwaMO5IGjhu6NwIHbhu5tpIMSR4buLbmggaMaw4bubbmcgcGjDom4gdMOtY2ggdHJvbmcgdGjhu5FuZyBrw6ogeSB04bq/IHbDoCBk4buLY2ggdOG7hSBo4buNYywgxJHhu5NuZyB0aOG7nWkgYuG6o28gxJHhuqNtIHTDrW5oIGtob2EgaOG7jWMgdsOgIHRo4buxYyB0aeG7hW4ga2hpIOG7qW5nIGThu6VuZyB2w6BvIHZp4buHYyBwaMOibiB0w61jaCBk4buvIGxp4buHdSBz4bupYyBraOG7j2UgY+G7mW5nIMSR4buTbmcsIHThu6sgxJHDsyBwaOG7pWMgduG7pSBjw7RuZyB0w6FjIGThu7EgcGjDsm5nLCBzw6BuZyBs4buNYyB2w6AgY2FuIHRoaeG7h3AgeSB04bq/IG3hu5l0IGPDoWNoIGhp4buHdSBxdeG6oyBoxqFuLg0KDQojIyAqKjEuNS4gTcO0IHThuqMgZOG7ryBsaeG7h3UqKg0KDQojIyMgKioxLjUuMS4gR2nhu5tpIHRoaeG7h3UgYuG7mSBk4buvIGxp4buHdSoqDQoNCkLhu5kgZOG7ryBsaeG7h3UgIlN0cm9rZSBQcmVkaWN0aW9uIERhdGFzZXQiIMSRxrDhu6NjIHRoaeG6v3Qga+G6vyBuaOG6sW0gaOG7lyB0cuG7oyBjw6FjIG5ow6AgbmdoacOqbiBj4bupdSwgY2h1ecOqbiBnaWEga2hvYSBo4buNYyBk4buvIGxp4buHdSB2w6Agbmjhu69uZyBuZ8aw4budaSBxdWFuIHTDom0gxJHhur9uIGzEqW5oIHbhu7FjIGNoxINtIHPDs2Mgc+G7qWMga2jhu49lIHRyb25nIHZp4buHYyBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgbGnDqm4gcXVhbiDEkeG6v24gIMSR4buZdCBxdeG7tS4NCg0KVOG6rXAgZOG7ryBsaeG7h3UgYmFvIGfhu5NtIDEuOTg1IHF1YW4gc8OhdCB2w6AgOSBiaeG6v24gxJHhu5ljIGzhuq1wIGPDsyDDvSBuZ2jEqWEsIMSRxrDhu6NjIHjDonkgZOG7sW5nIGThu7FhIHRyw6puIHRow7RuZyB0aW4gbMOibSBzw6BuZyBjaGkgdGnhur90IGPDuW5nIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGThu68gbGnhu4d1IHkgdOG6vyBjw7RuZyBj4buZbmcsIG5o4bqxbSBwaOG7pWMgduG7pSBjaG8gdmnhu4djIG5naGnDqm4gY+G7qXUsIGThu7EgxJFvw6FuIHbDoCBwaMOybmcgbmfhu6thIG5ndXkgY8ahIMSR4buZdCBxdeG7tSB0cm9uZyBj4buZbmcgxJHhu5NuZy4NCg0KIyMjICoqMS41LjIuIMSQ4buNYyBmaWxlIGThu68gbGnhu4d1IGfhu5FjKioNCg0KYGBge3J9DQpsaWJyYXJ5KHhsc3gpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShnbW9kZWxzKQ0KDQpkYXRhIDwtIHJlYWQueGxzeChmaWxlID0gIkM6L1VzZXJzL0hQL0Rvd25sb2Fkcy9TdHJva2UgUHJlZGljdGlvbiBEYXRhc2V0Lnhsc3giLCBzaGVldEluZGV4ID0gMSwgaGVhZGVyID0gVCkNCmBgYA0KDQoqKkPhuqV1IHRyw7pjIGLhu5kgZOG7ryBsaeG7h3UqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZGF0YS50YWJsZSkNCmRhdGEudGFibGUoZGF0YSkNCmBgYA0KDQoqKktp4buDbSB0cmEgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBj4buZdCDEkeG7i25oIHTDrW5oKioNCg0KYGBge3J9DQppZiAoYW55KGlzLm5hKGRhdGEpKSkgew0KICBjYXQoIkPDsyBnacOhIHRy4buLIHRoaeG6v3UgdHJvbmcgZOG7ryBsaeG7h3UuXG4iKQ0KfSBlbHNlIHsNCiAgY2F0KCJLaMO0bmcgY8OzIGdpw6EgdHLhu4sgdGhp4bq/dSB0cm9uZyBk4buvIGxp4buHdS5cbiIpDQp9DQpgYGANCkvhur90IHF14bqjIHRodSDEkcaw4bujYyBjaG8gdGjhuqV5IHLhurFuZyB04bqldCBj4bqjIGPDoWMgY+G7mXQgxJHhu4tuaCB0w61uaCDEkeG7gXUga2jDtG5nIGPDsyBnacOhIHRy4buLIHRoaeG6v3UgKE5BKS4NCg0KQuG7mSBk4buvIGxp4buHdSBiYW8gZ+G7k20gMS45ODUgcXVhbiBzw6F0IChvYnNlcnZhdGlvbnMpIHbDoCA5IGJp4bq/biAodmFyaWFibGVzKSwgcGjhuqNuIMOhbmggdGjDtG5nIHRpbiBz4bupYyBraOG7j2UgdsOgIGPDoWMgeeG6v3UgdOG7kSBs4buRaSBz4buRbmcgY8OzIGxpw6puIHF1YW4gxJHhur9uIG5ndXkgY8ahIMSR4buZdCBxdeG7tSDhu58gbmfGsOG7nWkgdHLGsOG7n25nIHRow6BuaCB04burIDE4IMSR4bq/biA4NCB0deG7lWkuDQoNCi0gSGFzX1N0cm9rZTogKkJp4bq/biBwaOG7pSB0aHXhu5ljKi5UaOG7gyBoaeG7h24gxJHhu5FpIHTGsOG7o25nIGPDsyBi4buLIMSR4buZdCBxdeG7tSBoYXkgY2jGsGEuDQoNCi0gU21va2luZ19TdGF0dXM6IFTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIGzDoSBj4bunYSDEkeG7kWkgdMaw4bujbmcuIEJhbyBn4buTbSBoYWkgZ2nDoSB0cuG7izogIk5vbi1TbW9rZXIiIChraMO0bmcgaMO6dCB0aHXhu5FjKSB2w6AgIlNtb2tlciIgKGPDsyBow7p0IHRodeG7kWMpLg0KDQotIEZhbWlseV9IaXN0b3J5OiBUaeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgaGF5IGtow7RuZyAoIlllcyI6IEPDkyAvICJObyI6IEtIw5RORykuDQoNCi0gQk1JOiBQaMOibiBsb+G6oWkgdMOsbmggdHLhuqFuZyB0aOG7gyB0cuG7jW5nICgiVW5kZXJ3ZWlnaHQiOiBn4bqneSwgIk5vcm1hbCI6IGLDrG5oIHRoxrDhu51uZywgIk92ZXJ3ZWlnaHQiOiB0aOG7q2EgY8OibikuDQoNCi0gQlBfSGlzdG9yeTogVGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY+G7p2EgxJHhu5FpIHTGsOG7o25nLCDEkcaw4bujYyBwaMOibiB0aMOgbmggYmEgbeG7qWM6ICJOb3JtYWwiIChiw6xuaCB0aMaw4budbmcpLCAiUHJlSHlwZXJ0ZW5zaW9uIiAodGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwKSwgdsOgICJIeXBlcnRlbnNpb24iIChodXnhur90IMOhcCBjYW8pLg0KDQoqKkNodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHNhbmcga2nhu4N1IGZhY3RvcioqDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHNhbmcgZmFjdG9yDQpkYXRhJEJQX0hpc3RvcnkgICAgICAgPC0gYXMuZmFjdG9yKGRhdGEkQlBfSGlzdG9yeSkNCmRhdGEkQk1JICAgICAgICAgICAgICA8LSBhcy5mYWN0b3IoZGF0YSRCTUkpDQpkYXRhJEZhbWlseV9IaXN0b3J5ICAgPC0gYXMuZmFjdG9yKGRhdGEkRmFtaWx5X0hpc3RvcnkpDQpkYXRhJFNtb2tpbmdfU3RhdHVzICAgPC0gYXMuZmFjdG9yKGRhdGEkU21va2luZ19TdGF0dXMpDQpkYXRhJEhhc19TdHJva2UgICAgPC0gYXMuZmFjdG9yKGRhdGEkSGFzX1N0cm9rZSkNCmBgYA0KDQoqKktp4buDbSB0cmEgbOG6oWkgY+G6pXUgdHLDumMgZOG7ryBsaeG7h3Ugc2F1IGtoaSBjaHV54buDbiDEkeG7lWkqKg0KDQpgYGB7cn0NCnN0cihkYXRhKQ0KYGBgDQoNCg0KR2nhuqNpIHRow61jaDoNCg0KLSBzYXBwbHkoZGF0YSwgY2xhc3MpOiDDgXAgZOG7pW5nIGjDoG0gY2xhc3MoKSBjaG8gdOG7q25nIGPhu5l0IMSR4buDIGtp4buDbSB0cmEga2nhu4N1IGThu68gbGnhu4d1LiBL4bq/dCBxdeG6oyB0cuG6oyB24buBIGzDoCBt4buZdCB2ZWN0b3IgaGnhu4NuIHRo4buLIHTDqm4gY+G7mXQgdsOgIGxv4bqhaSBk4buvIGxp4buHdSB0xrDGoW5nIOG7qW5nLg0KDQotIEvhur90IHF14bqjIGzDoCAiZmFjdG9yIiBjaG8gdOG6pXQgY+G6oyBjw6FjIGPhu5l0IOKGkiBjaHV54buDbiDEkeG7lWkgdGjDoG5oIGPDtG5nLg0KDQpgYGB7cn0NCnNhcHBseShkYXRhLCBjbGFzcykNCmBgYA0KDQogS+G6v3QgcXXhuqMgdGh1IMSRxrDhu6NjOiB0b8OgbiBi4buZIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggxJHDoyDEkcaw4bujYyBjaHV54buDbiDEkeG7lWkgdGjDoG5oIGThuqFuZyBmYWN0b3IuDQoNCiMgKipDSMavxqBORyAyOiBDxqAgU+G7niBMw50gVEhVWeG6vlQqKg0KDQojIyAqKjIuMS4gVOG7lW5nIHF1YW4gduG7gSBC4buHbmggxJDhu5l0IHF14bu1KioNCg0KIyMjICoqMi4xLjEuIMSQ4buLbmggbmdoxKlhKiogDQoNCsSQ4buZdCBxdeG7tSAoU3Ryb2tlKSwgaGF5IGPDsm4gZ+G7jWkgbMOgIHRhaSBiaeG6v24gbeG6oWNoIG3DoXUgbsOjbywgbMOgIG3hu5l0IHTDrG5oIHRy4bqhbmcgeSB04bq/IG5naGnDqm0gdHLhu41uZyB44bqjeSByYSBraGkgbMawdSBsxrDhu6NuZyBtw6F1IMSR4bq/biBt4buZdCBwaOG6p24gY+G7p2EgbsOjbyBi4buLIGdpw6FuIMSRb+G6oW4gaG/hurdjIGdp4bqjbSBuZ2hpw6ptIHRy4buNbmcsIGzDoG0gY2hvIG3DtCBuw6NvIGtow7RuZyBuaOG6rW4gxJHhu6cgb3h5IHbDoCBkxrDhu6FuZyBjaOG6pXQgY+G6p24gdGhp4bq/dC4gVHJvbmcgdsOgaSBwaMO6dCwgY8OhYyB04bq/IGLDoG8gbsOjbyBi4bqvdCDEkeG6p3UgY2jhur90LCBnw6J5IHJhIHThu5VuIHRoxrDGoW5nIHRo4bqnbiBraW5oIG5naGnDqm0gdHLhu41uZyBob+G6t2MgdGjhuq1tIGNow60gdOG7rSB2b25nIG7hur91IGtow7RuZyDEkcaw4bujYyBjYW4gdGhp4buHcCBr4buLcCB0aOG7nWkuDQoNCiMjIyAqKjIuMS4yLiBQaMOibiBsb+G6oWkqKg0KDQrEkOG7mXQgcXXhu7UgdGjGsOG7nW5nIMSRxrDhu6NjIGNoaWEgdGjDoG5oIGhhaSBsb+G6oWkgY2jDrW5oOg0KDQotIMSQ4buZdCBxdeG7tSB0aGnhur91IG3DoXUgY+G7pWMgYuG7mSAoSXNjaGVtaWMgU3Ryb2tlKTogQ2hp4bq/bSBraG/huqNuZyA4MOKAkzg1JSBjw6FjIHRyxrDhu51uZyBo4bujcCwgeOG6o3kgcmEga2hpIG3hu5l0IGPhu6VjIG3DoXUgxJHDtG5nIGzDoG0gdOG6r2Mgbmdo4bq9biDEkeG7mW5nIG3huqFjaCBjdW5nIGPhuqVwIG3DoXUgY2hvIG7Do28uDQoNCi0gxJDhu5l0IHF14bu1IHh14bqldCBodXnhur90IChIZW1vcnJoYWdpYyBTdHJva2UpOiBY4bqjeSByYSBraGkgbeG7mXQgbeG6oWNoIG3DoXUgdHJvbmcgbsOjbyBi4buLIHbhu6EsIGfDonkgeHXhuqV0IGh1eeG6v3QgdHJvbmcgbcO0IG7Do28uDQoNCk5nb8OgaSByYSwgY8OybiBjw7MgY8ahbiB0aGnhur91IG3DoXUgbsOjbyB0aG/DoW5nIHF1YSAoVElBIC0gVHJhbnNpZW50IElzY2hlbWljIEF0dGFjayksIHRoxrDhu51uZyDEkcaw4bujYyB4ZW0gbMOgIOKAnGPhuqNuaCBiw6FvIHPhu5tt4oCdIGNobyDEkeG7mXQgcXXhu7UgdGjhu7FjIHPhu7EsIHbhu5tpIGPDoWMgdHJp4buHdSBjaOG7qW5nIHTGsMahbmcgdOG7sSBuaMawbmcgYmnhur9uIG3huqV0IHRyb25nIHbDsm5nIDI0IGdp4budLg0KDQojIyMgKioyLjEuMy4gQmnhur9uIGNo4bupbmcqKiANCg0KxJDhu5l0IHF14bu1IGPDsyB0aOG7gyBnw6J5IHJhIG5oaeG7gXUgYmnhur9uIGNo4bupbmcgbmdoacOqbSB0cuG7jW5nLCBiYW8gZ+G7k206DQoNCi0gU3V5IGdp4bqjbSB24bqtbiDEkeG7mW5nOiBZ4bq/dSBob+G6t2MgbGnhu4d0IG3hu5l0IHBo4bqnbiBjxqEgdGjhu4MsIHRoxrDhu51uZyDhu58gbuG7rWEgbmfGsOG7nWkuDQoNCi0gU3V5IGdp4bqjbSBuaOG6rW4gdGjhu6ljIHbDoCBnaWFvIHRp4bq/cDogR+G6t3Aga2jDsyBraMSDbiB0cm9uZyBuZ8O0biBuZ+G7rywgdHLDrSBuaOG7myBob+G6t2MgdMawIGR1eS4NCg0KLSBCaeG6v24gY2jhu6luZyB0w6JtIGzDvTogVHLhuqdtIGPhuqNtLCBsbyDDonUsIHRoYXkgxJHhu5VpIGPhuqNtIHjDumMuDQoNCi0gQmnhur9uIGNo4bupbmcgaMO0IGjhuqVwIHbDoCB0aW0gbeG6oWNoOiBUxINuZyBuZ3V5IGPGoSB2acOqbSBwaOG7lWksIG5o4buTaSBtw6F1IGPGoSB0aW0sIHTDoWkgcGjDoXQgxJHhu5l0IHF14bu1Lg0KDQotIFThu60gdm9uZzogxJDhu5l0IHF14bu1IGzDoCBt4buZdCB0cm9uZyBuaOG7r25nIG5ndXnDqm4gbmjDom4gaMOgbmcgxJHhuqd1IGfDonkgdOG7rSB2b25nIHRvw6BuIGPhuqd1Lg0KDQojIyAqKjIuMi4gQ8OhYyB54bq/dSB04buRIG5ndXkgY8ahIGThuqtuIMSR4bq/biDEkeG7mXQgcXXhu7UqKg0KDQoqKkNo4buJIHPhu5EgQk1JIChCb2R5IE1hc3MgSW5kZXgpKioNCg0KLSBDaOG7iSBz4buRIEJNSSBsw6AgY2jhu4kgc+G7kSDEkW8gbMaw4budbmcgdHLhuqFuZyB0aMOhaSB0aOG7gyB0cuG7jW5nIGLhurFuZyBjw6FjaCBs4bqleSBjw6JuIG7hurduZyBjaGlhIGNobyBiw6xuaCBwaMawxqFuZyBjaGnhu4F1IGNhbyAoa2cvbcKyKS4gQk1JIGNhbywgxJHhurdjIGJp4buHdCBsw6AgdHJvbmcgbmfGsOG7oW5nIOKAnHRo4burYSBjw6Ju4oCdIHbDoCDigJxiw6lvIHBow6zigJ0sIGPDsyBsacOqbiBxdWFuIGNo4bq3dCBjaOG6vSDEkeG6v24gbmd1eSBjxqEgbeG6r2MgxJHhu5l0IHF14bu1LiBUaOG7q2EgY8OibiBsw6BtIHTEg25nIGh1eeG6v3Qgw6FwLCBy4buRaSBsb+G6oW4gbGlwaWQgbcOhdSB2w6Aga2jhuqMgbsSDbmcgaMOsbmggdGjDoG5oIGPhu6VjIG3DoXUgxJHDtG5nIOKAlCBuaOG7r25nIHnhur91IHThu5EgdHLhu7FjIHRp4bq/cCBk4bqrbiDEkeG6v24gxJHhu5l0IHF14bu1Lg0KDQotIE5naGnDqm4gY+G7qXUgbGnDqm4gcXVhbjogVGhlbyBuZ2hpw6puIGPhu6l1IGPhu6dhIFN0cmF6enVsbG8gZXQgYWwuICgyMDEwKSDEkcSDbmcgdHLDqm4gdOG6oXAgY2jDrSBTdHJva2UsIEJNSSBjYW8gbMOgbSB0xINuZyBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgdGhp4bq/dSBtw6F1IGPhu6VjIGLhu5kgdOG7m2kgNjQlLiBOZ2/DoGkgcmEsIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHRo4burYSBjw6JuIHbDoCDEkeG7mXQgcXXhu7UgduG6q24gdOG7k24gdOG6oWkgc2F1IGtoaSDEkcOjIMSRaeG7gXUgY2jhu4luaCBjaG8gY8OhYyB54bq/dSB04buRIG5oxrAgdHXhu5VpLCBnaeG7m2kgdMOtbmggdsOgIHTEg25nIGh1eeG6v3Qgw6FwLg0KDQoqKlRp4buBbiBz4butIGdpYSDEkcOsbmggKEZhbWlseSBIaXN0b3J5KSoqDQoNCi0gWeG6v3UgdOG7kSBkaSB0cnV54buBbiDEkcOzbmcgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIG5ndXkgY8ahIG3huq9jIMSR4buZdCBxdeG7tS4gTmjhu69uZyBuZ8aw4budaSBjw7MgY2hhIG3hurksIGFuaCBjaOG7iyBlbSB04burbmcgYuG7iyDEkeG7mXQgcXXhu7UgY8OzIG5ndXkgY8ahIGNhbyBoxqFuIGRvIGNoaWEgc+G6uyBnZW4gbGnDqm4gcXVhbiDEkeG6v24gcuG7kWkgbG/huqFuIG3huqFjaCBtw6F1LCBodXnhur90IMOhcCwgY2hvbGVzdGVyb2wgdsOgIMSRw7RuZyBtw6F1Lg0KDQotIE5naGnDqm4gY+G7qXUgbGnDqm4gcXVhbjogTmdoacOqbiBj4bupdSBj4bunYSBKb29kIHbDoCBj4buZbmcgc+G7sSAoMjAwNSkgxJHEg25nIHRyw6puIFN0cm9rZSBKb3VybmFsIGNobyB0aOG6pXkgbmd1eSBjxqEgxJHhu5l0IHF14bu1IHTEg25nIGfhuqVwIDIgbOG6p24g4bufIG5o4buvbmcgbmfGsOG7nWkgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgxJHhu5l0IHF14bu1LiBN4buRaSBsacOqbiBo4buHIHbhuqtuIGR1eSB0csOsIG5nYXkgY+G6oyBraGkga2nhu4NtIHNvw6F0IGPDoWMgeeG6v3UgdOG7kSBs4buRaSBz4buRbmcuDQoNCioqVGnhu4FuIHPhu60gaHV54bq/dCDDoXAgKEJQIEhpc3RvcnkpKioNCg0KLSBUxINuZyBodXnhur90IMOhcCDEkcaw4bujYyB4ZW0gbMOgIHnhur91IHThu5Egbmd1eSBjxqEgbeG6oW5oIG5o4bqldCB2w6AgcGjhu5UgYmnhur9uIG5o4bqldCBj4bunYSDEkeG7mXQgcXXhu7UuIEh1eeG6v3Qgw6FwIGNhbyBsw6BtIHThu5VuIHRoxrDGoW5nIHRow6BuaCBt4bqhY2ggbcOhdSwgdGjDumMgxJHhuql5IHjGoSB24buvYSDEkeG7mW5nIG3huqFjaCB2w6AgdMSDbmcga2jhuqMgbsSDbmcgduG7oSBt4bqhY2ggaG/hurdjIGjDrG5oIHRow6BuaCBj4bulYyBtw6F1IMSRw7RuZy4NCg0KLSBOZ2hpw6puIGPhu6l1IGxpw6puIHF1YW46IFRoZW8gV0hPICgyMDIxKSwgY+G7qSBt4buXaSAxMCBtbUhnIHTEg25nIGh1eeG6v3Qgw6FwIHTDom0gdGh1IHPhur0gbMOgbSB0xINuZyBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgdOG7qyAyMOKAkzMwJS4gTmdoacOqbiBj4bupdSBs4bubbiBJTlRFUlNUUk9LRSAoMjAxMCkgY8Wpbmcga2jhurNuZyDEkeG7i25oIHTEg25nIGh1eeG6v3Qgw6FwIGNoaeG6v20gdOG7m2kgNTQlIHThu5VuZyBz4buRIG5ndXkgY8ahIGfDonkgxJHhu5l0IHF14bu1IHRvw6BuIGPhuqd1Lg0KDQoqKlTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIChTbW9raW5nIFN0YXR1cykqKg0KDQotIEjDunQgdGh14buRYyBsw6EgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgeeG6v3UgdOG7kSBuZ3V5IGPGoSDEkcOjIMSRxrDhu6NjIHjDoWMgbOG6rXAgxJHhu5FpIHbhu5tpIGLhu4duaCBsw70gdGltIG3huqFjaCB2w6AgxJHhu5l0IHF14bu1LiBDw6FjIGNo4bqldCB0cm9uZyBraMOzaSB0aHXhu5FjIGfDonkgdmnDqm0sIGzDoG0gdOG7lW4gdGjGsMahbmcgbuG7mWkgbcO0IG3huqFjaCBtw6F1LCB0aMO6YyDEkeG6qXkgaMOsbmggdGjDoG5oIGPhu6VjIG3DoXUgxJHDtG5nIHbDoCB4xqEgduG7r2EgxJHhu5luZyBt4bqhY2guDQoNCi0gTmdoacOqbiBj4bupdSBsacOqbiBxdWFuOiBN4buZdCBwaMOibiB0w61jaCB04buVbmcgaOG7o3AgY+G7p2EgU2hpbnRvbiB2w6AgQmVldmVycyAoMTk4OSkgY2jhu4kgcmEgcuG6sW5nIG5nxrDhu51pIGjDunQgdGh14buRYyBjw7Mgbmd1eSBjxqEgxJHhu5l0IHF14bu1IGNhbyBoxqFuIDLigJMzIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBow7p0LiBOZ2/DoGkgcmEsIG5ndXkgY8ahIGdp4bqjbSDEkcOhbmcga+G7gyBjaOG7iSBzYXUgdsOgaSBuxINtIG5n4burbmcgaMO6dCB0aHXhu5FjLCBjaG8gdGjhuqV5IHTDoWMgZOG7pW5nIHBo4bulYyBo4buTaSBj4bunYSB2aeG7h2MgY2FpIHRodeG7kWMuDQoNCg0KIyAqKkNIxq/GoE5HIDM6IFBIxq/GoE5HIFBIw4FQIE5HSEnDik4gQ+G7qFUqKg0KDQojIyAqKjMuMS4gQ8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IGNobyBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibioqDQoNCiMjIyAqKjMuMS4xLiBNw7QgaMOsbmggSOG7k2kgcXV5IExvZ2lzdGljIChMb2dpdCBNb2RlbCkqKg0KDQpNw7QgaMOsbmggTG9naXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgcGjhu5UgYmnhur9uIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgbeG7mXQgYmnhur9uIHBo4bulIHRodeG7mWMgbmjhu4sgcGjDom4gdsOgIG3hu5l0IGhv4bq3YyBuaGnhu4F1IGJp4bq/biDEkeG7mWMgbOG6rXAgKGxpw6puIHThu6VjIGhv4bq3YyDEkeG7i25oIHTDrW5oKS4gTeG7pWMgdGnDqnUgbMOgIMaw4bubYyBsxrDhu6NuZyB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiAo4bufIMSRw6J5IGzDoCB0w6FpIHBow6F0IGLhu4duaCkuDQoNCljDoWMgc3XhuqV0IHTDoWkgcGjDoXQgY+G7p2EgY8OhIHRo4buDIHRo4bupIFwoIGkgXCkgxJHGsOG7o2MgbcO0IGjDrG5oIGjDs2EgbmjGsCBzYXU6DQoNClxbDQpQX2kgPSBQKFlfaSA9IDEgfCBYX2kpID0gXGZyYWN7MX17MSArIGVeey0oXGJldGFfMCArIFxiZXRhXzEgWF97MWl9ICsgXGRvdHMgKyBcYmV0YV9rIFhfe2tpfSl9fSA9IFxmcmFje2Vee1pfaX19ezEgKyBlXntaX2l9fQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKCBQX2kgXCk6IFjDoWMgc3XhuqV0IGPDoSB0aOG7gyBcKCBpIFwpIGLhu4sgdMOhaSBwaMOhdCBi4buHbmguDQotIFwoIFhfezFpfSwgXGRvdHMsIFhfe2tpfSBcKTogR2nDoSB0cuG7iyBj4bunYSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgY+G7p2EgY8OhIHRo4buDIFwoIGkgXCkuDQotIFwoIFxiZXRhXzAsIFxiZXRhXzEsIFxkb3RzLCBcYmV0YV9rIFwpOiBDw6FjIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G6p24gxrDhu5tjIGzGsOG7o25nLg0KLSBcKCBaX2kgPSBcYmV0YV8wICsgXGJldGFfMSBYX3sxaX0gKyBcZG90cyArIFxiZXRhX2sgWF97a2l9IFwpDQoNCsSQ4buDIHR1eeG6v24gdMOtbmggaMOzYSBtw7QgaMOsbmgsIG5nxrDhu51pIHRhIHPhu60gZOG7pW5nICoqaMOgbSBsb2dpdCoqOg0KDQpcWw0KTF9pID0gXGxuXGxlZnQoIFxmcmFje1BfaX17MSAtIFBfaX0gXHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFhfezFpfSArIFxkb3RzICsgXGJldGFfayBYX3traX0NClxdDQoNClThu7cgc+G7kSBcKFxmcmFje1BfaX17MSAtIFBfaX1cKSDEkcaw4bujYyBn4buNaSBsw6AgKip04bu3IHPhu5EgY2jDqm5oIChvZGRzKSoqLCBjaG8gYmnhur90IGto4bqjIG7Eg25nIHjhuqN5IHJhIHPhu7Ega2nhu4duIHNvIHbhu5tpIGtow7RuZyB44bqjeSByYSBz4buxIGtp4buHbi4gTeG7l2kgaOG7hyBz4buRIFwoIFxiZXRhX2sgXCkgxJHGsOG7o2MgZGnhu4VuIGdp4bqjaSBi4bqxbmcgKip04bu3IHPhu5EgY2jDqm5oIGzhu4djaCAoT2RkcyBSYXRpbyDigJMgT1IpKio6DQoNClxbDQpPUl9rID0gZV57XGJldGFfa30NClxdDQoNCsOdIG5naMSpYTogS2hpIGJp4bq/biBcKCBYX2sgXCkgdMSDbmcgbeG7mXQgxJHGoW4gduG7iyAodsOgIGPDoWMgYmnhur9uIGtow6FjIGdp4buvIG5ndXnDqm4pLCBvZGRzIGPhu6dhIHZp4buHYyB0w6FpIHBow6F0IGLhu4duaCBz4bq9IHRoYXkgxJHhu5VpIFwoIGVee1xiZXRhX2t9IFwpIGzhuqduLg0KDQotLS0NCg0KIyMjICoqMy4xLjIuIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpNw7QgaMOsbmggUHJvYml0IGzDoCBt4buZdCBs4buxYSBjaOG7jW4gdGhheSB0aOG6vyBjaG8gTG9naXQsIHbhu5tpIGtow6FjIGJp4buHdCBjaMOtbmggbuG6sW0g4bufIGjDoG0gbGnDqm4ga+G6v3QuIFByb2JpdCBz4butIGThu6VuZyAqKmjDoG0gcGjDom4gcGjhu5FpIHTDrWNoIGzFqXkgY2h14bqpbioqIFwoIFxQaGkoWikgXCkgdGhheSB2w6wgaMOgbSBsb2dpc3RpYy4NCg0KTcO0IGjDrG5oIGPDsyBk4bqhbmc6DQoNClxbDQpQX2kgPSBQKFlfaSA9IDEgfCBYX2kpID0gXFBoaShaX2kpID0gXGludF97LVxpbmZ0eX1ee1pfaX0gXGZyYWN7MX17XHNxcnR7MlxwaX19IGVeey10XjIvMn0gZHQNClxdDQoNClRyb25nIMSRw7M6DQoNClxbDQpaX2kgPSBcYmV0YV8wICsgXGJldGFfMSBYX3sxaX0gKyBcZG90cyArIFxiZXRhX2sgWF97a2l9DQpcXQ0KDQpN4bq3YyBkw7kgTG9naXQgdsOgIFByb2JpdCBz4butIGThu6VuZyBjw6FjIHBow6JuIHBo4buRaSBraMOhYyBuaGF1IChsb2dpc3RpYyB2cyBjaHXhuqluKSwgdHJvbmcgdGjhu7FjIHThur8gaGFpIG3DtCBow6xuaCB0aMaw4budbmcgY2hvIGvhur90IHF14bqjIGtow6EgdMawxqFuZyDEkeG7k25nLiBUdXkgbmhpw6puLCBMb2dpdCDEkcaw4bujYyDGsGEgY2h14buZbmcgaMahbiBkbyBraOG6oyBuxINuZyBkaeG7hW4gZ2nhuqNpIMSRxqFuIGdp4bqjbiB0aMO0bmcgcXVhIE9kZHMgUmF0aW8uDQoNCi0tLQ0KDQojIyMgKiozLjEuMy4gTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpNw7QgaMOsbmggQ2xvZ2xvZyBsw6AgbeG7mXQgZOG6oW5nIGPhu6dhIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgdHJvbmcgxJHDsyBow6BtIGxpw6puIGvhur90IGzDoDoNCg0KJCQNClxsb2coLVxsb2coMSAtIHApKSA9IFxldGEgPSBcYmV0YV8wICsgXGJldGFfMSB4XzEgKyBcY2RvdHMgKyBcYmV0YV9rIHhfaw0KJCQNCg0KVOG7qyDEkcOzLCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBsw6A6DQoNCiQkDQpwID0gMSAtIFxleHAoLVxleHAoXGV0YSkpDQokJA0KDQrEkOG7gyDGsOG7m2MgbMaw4bujbmcgY8OhYyB0aGFtIHPhu5EgXCggXGJldGEgXCksIG3DtCBow6xuaCBz4butIGThu6VuZyAqKnBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyBo4bujcCBsw70gdOG7kWkgxJFhIChNTEUpKiosIHRow7RuZyBxdWEgdmnhu4djIGPhu7FjIMSR4bqhaSBow7NhIGjDoG0gbG9nLWxpa2VsaWhvb2Q6DQoNCiQkDQpcZWxsKFxiZXRhKSA9IFxzdW1fe2k9MX1ee259IFxsZWZ0WyB5X2kgXGxvZygxIC0gXGV4cCgtXGV4cChcZXRhX2kpKSkgKyAoMSAtIHlfaSkoIC1cZXhwKFxldGFfaSkpIFxyaWdodF0NCiQkDQoNClBoxrDGoW5nIHBow6FwIG7DoHkgxJHhurdjIGJp4buHdCBwaMO5IGjhu6NwIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBraMO0bmcgxJHhu5FpIHjhu6luZyBob+G6t2Mgc+G7sSBraeG7h24gaGnhur9tLiBIw6BtIGxpw6puIGvhur90IGNsb2dsb2cgZ2nDunAgbcO0IGjDrG5oIHBo4bqjbiDDoW5oIHThu5F0IGjGoW4gc+G7sSB0aGF5IMSR4buVaSBuaGFuaCBjaMOzbmcgduG7gSB4w6FjIHN14bqldCBn4bqnbiBuZ8aw4buhbmcgMS4NCg0KLS0tDQoNCiMjICoqMy4yLiBLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oKioNCg0KxJDhu4MgxJHDoW5oIGdpw6EgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIChsb2dpdCwgcHJvYml0LCBjbG9nbG9nKSwgY8OhYyBjaOG7iSBz4buRIMSRxrDhu6NjIGTDuW5nIMSR4buDIMSRw6FuaCBnacOhIHBo4buVIGJp4bq/biBuaMawOg0KDQojIyMgKiozLjIuMS4gQ2jhu4kgc+G7kSBBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pKioNCg0KLSAqKkPDtG5nIHRo4bupYyoqOg0KDQogICQkDQogIEFJQyA9IC0yIFxjZG90IFxsb2coTCkgKyAyaw0KICAkJA0KICANCiAgVHJvbmcgxJHDszoNCiAgDQogIC0gXCggTCBcKSBsw6AgZ2nDoSB0cuG7iyBow6BtIGjhu6NwIGzDvSB04buRaSDEkWEgKGxpa2VsaWhvb2QpLA0KICANCiAgLSBcKCBrIFwpIGzDoCBz4buRIGzGsOG7o25nIHRoYW0gc+G7kSDGsOG7m2MgbMaw4bujbmcgdHJvbmcgbcO0IGjDrG5oLg0KDQotICoqw50gbmdoxKlhKio6IEFJQyBsw6AgdGjGsOG7m2MgxJFvIGPDom4gYuG6sW5nIGdp4buvYSDEkeG7mSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCB2w6AgxJHhu5kgcGjhu6ljIHThuqFwIGPhu6dhIG7Dsy4gTcO0IGjDrG5oIGPDsyBBSUMgKip0aOG6pXAgaMahbioqIMSRxrDhu6NjIHhlbSBsw6AgKipwaMO5IGjhu6NwIGjGoW4qKiwgdHLDoW5oIMSRxrDhu6NjIGhp4buHbiB0xrDhu6NuZyBvdmVyZml0dGluZy4NCg0KIyMjICoqMy4yLjIuIEjDoG0gbG9nLWxpa2VsaWhvb2QqKg0KDQpEbyBow6BtIExpa2VsaWhvb2QgbMOgIG3hu5l0IHTDrWNoIHBo4bupYyB04bqhcCwgbmfGsOG7nWkgdGEgdGjGsOG7nW5nIHPhu60gZOG7pW5nIGxvZ2FyaXQgY+G7p2EgbsOzIMSR4buDIGThu4UgdMOtbmggdG/DoW46DQoNClxbDQpcbG4gTCA9IFxzdW1fe2k9MX1ee259IFxsZWZ0WyBZX2kgXGxuKFBfaSkgKyAoMSAtIFlfaSkgXGxuKDEgLSBQX2kpIFxyaWdodF0NClxdDQoNClF1w6EgdHLDrG5oIMaw4bubYyBsxrDhu6NuZyBz4bq9IHTDrG0gY8OhYyBnacOhIHRy4buLIFwoIFxoYXR7XGJldGF9XzAsIFxoYXR7XGJldGF9XzEsIFxkb3RzLCBcaGF0e1xiZXRhfV9rIFwpIHNhbyBjaG8gaMOgbSBsb2ctbGlrZWxpaG9vZCDEkeG6oXQgY+G7sWMgxJHhuqFpLiBWaeG7h2MgdOG7kWkgxrB1IGjDs2EgbsOgeSB0aMaw4budbmcgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiBi4bqxbmcgY8OhYyB0aHXhuq10IHRvw6FuIHPhu5EgbmjGsCBOZXd0b24tUmFwaHNvbiwgRmlzaGVyIHNjb3JpbmcsIGhheSBHcmFkaWVudCBhc2NlbnQuDQoNCg0KIyAqKkNIxq/GoE5HIDQ6IFBIw4JOIFTDjUNIIEPDgUMgWeG6vlUgVOG7kCDhuqJOSCBIxq/hu55ORyDEkOG6vk4gS0jhuqIgTsSCTkcgxJDhu5hUIFFV4bu0KioNCg0KIyMgKipQSMOCTiBUw41DSCDEkMagTiBCSeG6vk4qKg0KDQojIyAqKjQuMS4gVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgY+G7p2EgYuG7h25oIG5ow6JuIHTDoWMgxJHhu5luZyDEkeG6v24gQuG7iyDEkeG7mXQgcXXhu7UqKg0KDQojIyMgKio0LjEuMSBC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCBjaG8gYmnhur9uIEjDunQgdGh14buRYyAoU21va2luZ19TdGF0dXMpKioNCg0KYGBge3J9DQp0YWJfc21va2luZyA8LSB0YWJsZShkYXRhJFNtb2tpbmdfU3RhdHVzKQ0KdGFiX3Ntb2tpbmcNCmBgYA0KDQpL4bq/dCBxdeG6oyB0csOqbiBz4bq9IMSRxrDhu6NjIHRy4buxYyBxdWFuIGjDs2EgYuG6sW5nIGJp4buDdSDEkeG7kyBj4buZdCDEkeG7gyBzbyBzw6FuaCBz4buRIGzGsOG7o25nIGdp4buvYSBoYWkgbmjDs20uDQoNCmBgYHtyfQ0KYmFycGxvdCh0YWJfc21va2luZywNCiAgICAgICAgbWFpbiA9ICJCaeG7g3UgxJHhu5MgdOG6p24gc+G7kSB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgIHhsYWIgPSAiVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMiLA0KICAgICAgICB5bGFiID0gIlThuqduIHPhu5EiLA0KICAgICAgICBjb2wgPSBjKCJsaWdodGJsdWUiLCAib3JhbmdlIiksDQogICAgICAgIGJvcmRlciA9ICJ3aGl0ZSIsDQogICAgICAgIHlsaW0gPSBjKDAsIG1heCh0YWJfc21va2luZykgKyA0MCkpIC0+IGJwX3Ntb2tpbmcNCg0KdGV4dCh4ID0gYnBfc21va2luZywgeSA9IHRhYl9zbW9raW5nICsgMTUsIGxhYmVscyA9IHRhYl9zbW9raW5nKQ0KYGBgDQoNClRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EgdsOgIGJp4buDdSDEkeG7kywgdGEgdGjhuqV5IHLhurFuZyB0cm9uZyB04buVbmcgc+G7kSAxOTg1IGLhu4duaCBuaMOibiwgY8OzIDE0MTcgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYyAoTm9uLVNtb2tlciksIGNhbyBn4bqnbiBn4bqlcCAyLDUgbOG6p24gc28gduG7m2kgbmjDs20gaMO6dCB0aHXhu5FjIC4gVHJvbmcga2hpIMSRw7MsIHPhu5EgYuG7h25oIG5ow6JuIGPDsyBow7p0IHRodeG7kWMgKFNtb2tlcikgbMOgIDU2OCBuZ8aw4budaS4gVGnhur9wIHRoZW8sIGNow7puZyB0YSBz4bq9IHTDrW5oIHThu7cgbOG7hyBwaOG6p24gdHLEg20gdsOgIHbhur0gYmnhu4N1IMSR4buTIHRyw7JuIMSR4buDIHRo4buDIGhp4buHbiByw7UgaMahbiBz4buxIGNow6puaCBs4buHY2ggduG7gSBt4bq3dCB0xrDGoW5nIMSR4buRaSBnaeG7r2EgaGFpIG5ow7NtLg0KDQoqKlRy4buxYyBxdWFuIGjDs2EqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZ3JhcGhpY3MpDQoNCiMgVMOtbmggdOG6p24gc3XhuqV0IHThu6tuZyBsb+G6oWkgU21va2luZ19TdGF0dXMNCnNtb2tpbmdfZnJlcSA8LSB0YWJsZShkYXRhJFNtb2tpbmdfU3RhdHVzKQ0KDQojIFTDrW5oIHBo4bqnbiB0csSDbQ0Kc21va2luZ19wZXJjZW50IDwtIHJvdW5kKHNtb2tpbmdfZnJlcSAvIHN1bShzbW9raW5nX2ZyZXEpICogMTAwLCAxKSAgIyBMw6BtIHRyw7JuIDEgY2jhu68gc+G7kQ0KDQojIFThuqFvIG5ow6NuOiAiTm9uLXNtb2tlciAtIDQwJSINCmxhYmVscyA8LSBwYXN0ZShuYW1lcyhzbW9raW5nX2ZyZXEpLCAiLSIsIHNtb2tpbmdfcGVyY2VudCwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIG5ow6NuIHBo4bqnbiB0csSDbQ0KcGllKHNtb2tpbmdfZnJlcSwNCiAgICBsYWJlbHMgPSBsYWJlbHMsDQogICAgbWFpbiA9ICJCaeG7g3UgxJHhu5MgdHLDsm4gdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMiLA0KICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKHNtb2tpbmdfZnJlcSkpDQopDQpgYGANCg0KQmnhu4N1IMSR4buTIHRyw7JuIHRo4buDIGhp4buHbiB04bu3IGzhu4cgcGjhuqduIHRyxINtOiBuaMOzbSBOb24tU21va2VyIGNoaeG6v20gNzEsNCUsIHRyb25nIGtoaSBuaMOzbSBTbW9rZXIgY2hp4bq/bSAyOCw2JS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgcGjhuqduIGzhu5tuIMSR4buRaSB0xrDhu6NuZyB0cm9uZyBuZ2hpw6puIGPhu6l1IGtow7RuZyBow7p0IHRodeG7kWMsIHBo4bqjbiDDoW5oIHh1IGjGsOG7m25nIGjhuqFuIGNo4bq/IGjDoG5oIHZpIGjDunQgdGh14buRYyB0cm9uZyBxdeG6p24gdGjhu4Mga2jhuqNvIHPDoXQuIFPhu7EgY2jDqm5oIGzhu4djaCBs4bubbiBuw6B5IGNobyB0aOG6pXkgdGjDs2kgcXVlbiBow7p0IHRodeG7kWMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhurdjIMSRaeG7g20gcGjhu5UgYmnhur9uIHRyb25nIG5ow7NtIGLhu4duaCBuaMOibiDEkcaw4bujYyBraOG6o28gc8OhdC4gVHV5IG5oacOqbiwgxJFp4buBdSBxdWFuIHRy4buNbmcgbMOgIHBo4bqjaSBwaMOibiB0w61jaCB4ZW0gbGnhu4d1IG5ow7NtIHRoaeG7g3Ugc+G7kSBuw6B5IGPDsyBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gaGF5IGtow7RuZy4NCg0KIyMjICoqNC4xLjIuIFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBoYWkgYmnhur9uIEjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1KioNCg0KQ2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIGhhaSBiaeG6v24gU21va2luZyB2w6AgSGFzX1N0cm9rZSDEkeG7gyB4ZW0geMOpdCBt4buRaSBxdWFuIGjhu4cgc8ahIGLhu5kgZ2nhu69hIGNow7puZy4NCg0KYGBge3J9DQojIMSQ4buVaSB0w6puIGxldmVscyBj4bunYSBiaeG6v24gU21va2luZw0KZGF0YSRTbW9raW5nIDwtIGZhY3RvcihkYXRhJFNtb2tpbmdfU3RhdHVzLCBsZXZlbHMgPSBjKCJOb24tU21va2VyIiwgIlNtb2tlciIpLA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBow7p0IHRodeG7kWMiLCAiSMO6dCB0aHXhu5FjIikpDQoNCiMgVOG6oW8gbOG6oWkgYuG6o25nIHThuqduIHPhu5ENCnRhYmxlX1N0cm9rZV9zbW9raW5nIDwtIHRhYmxlKGRhdGEkU21va2luZywgZGF0YSRIYXNfU3Ryb2tlKQ0KdGFibGVfU3Ryb2tlX3Ntb2tpbmcNCmBgYA0KDQpC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBjaG8gdGjhuqV5Og0KDQpUcm9uZyBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjIChObyk6IGPDsyA3OTMgbmfGsOG7nWkga2jDtG5nIMSR4buZdCBxdeG7tSB2w6AgNjI0IG5nxrDhu51pIMSR4buZdCBxdeG7tS4NClRyb25nIG5ow7NtIGPDsyBow7p0IHRodeG7kWMgKFllcyk6IGPDsyAxNjAgbmfGsOG7nWkga2jDtG5nIMSR4buZdCBxdeG7tSB2w6AgNDA4IG5nxrDhu51pIMSR4buZdCBxdeG7tS4NCg0KTeG7mXQgcXVhbiBzw6F0IGJhbiDEkeG6p3UgxJHDoW5nIGNow7ogw70gbMOgIOG7nyBuaMOzbSBow7p0IHRodeG7kWMsIHPhu5EgY2EgxJHhu5l0IHF14bu1ICg0MDgpIGfhuqduIGNhbyBoxqFuIGfhuqVwIGfhuqduIDMgbOG6p24gc28gduG7m2kgc+G7kSBjYSBraMO0bmcgxJHhu5l0IHF14bu1ICgxNjApLiAuIMSQaeG7gXUgbsOgeSBn4bujaSDDvSBy4bqxbmcgdOG7tyBs4buHIG3huq9jIGLhu4duaCDhu58gbmjDs20gYuG7h25oIG5ow6JuIGjDunQgdGh14buRYyBjw7MgdGjhu4MgY2FvIGjGoW4uDQoNCioqVHLhu7FjIHF1YW4gaMOzYSoqDQoNCsSQ4buDIGzDoG0gcsO1IGjGoW4gbmjhuq1uIMSR4buLbmggdHLDqm4sIGNow7puZyB0YSBz4bq9IHPhu60gZOG7pW5nIGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbS4NCg0KYGBge3J9DQojIENodXnhu4NuIGLhuqNuZyB04bqnbiBz4buRIHRow6BuaCBkYXRhIGZyYW1lIMSRw7puZyBjaGnhu4F1DQpkZl9wbG90X3Ntb2tpbmcgPC0gYXMuZGF0YS5mcmFtZSh0YWJsZV9TdHJva2Vfc21va2luZykNCmNvbG5hbWVzKGRmX3Bsb3Rfc21va2luZykgPC0gYygiU21va2luZ19TdGF0dXMiLCAiSGFzX1N0cm9rZSIsICJDb3VudCIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MNCmxpYnJhcnkoZ2dwbG90MikNCg0KZ2dwbG90KGRmX3Bsb3Rfc21va2luZywgYWVzKHggPSBTbW9raW5nX1N0YXR1cywgeSA9IENvdW50LCBmaWxsID0gSGFzX1N0cm9rZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAiVMOsbmggdHLhuqFuZyDEkeG7mXQgcXXhu7UgdGhlbyB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgeCA9ICJUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgeSA9ICJT4buRIGzGsOG7o25nIGLhu4duaCBuaMOibiIsDQogICAgICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7UiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJsaWdodHBpbmsiLCAiWWVzIiA9ICJsaWdodGdyZWVuIikpDQpgYGANCg0KQmnhu4N1IMSR4buTIGPhu5l0IHRy4buxYyBxdWFuIGjDs2EgbeG7mXQgY8OhY2ggcsO1IHLDoG5nIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6MgbsOqdToNCg0K4bueIG5ow7NtIGtow7RuZyBow7p0IHRodeG7kWM6IEPhu5l0ICJLaMO0bmcgxJHhu5l0IHF14bu1IiAobcOgdSBo4buTbmcpIGNhbyBoxqFuIGPhu5l0ICLEkeG7mXQgcXXhu7UiIChtw6B1IHhhbmgpLg0KDQrhu54gbmjDs20gY8OzIGjDunQgdGh14buRYzogQ+G7mXQgIsSR4buZdCBxdeG7tSIgKG3DoHUgeGFuaCkgY2FvIGjGoW4gcuG6pXQgbmhp4buBdSBzbyB24bubaSBj4buZdCAiS2jDtG5nIMSR4buZdCBxdeG7tSIgKG3DoHUgaOG7k25nKS4NCg0KQmnhu4N1IMSR4buTIGPhu6duZyBj4buRIG3huqFuaCBt4bq9IGdp4bqjIHRodXnhur90IHLhurFuZyB2aeG7h2MgaMO6dCB0aHXhu5FjIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgY2FvIGjGoW4uIELhu4duaCBuaMOibiBow7p0IHRodeG7kWMgZMaw4budbmcgbmjGsCBjw7MgdOG7tyBs4buHIMSR4buZdCBxdeG7tSBjYW8gZ+G6pXAgMjUwJSwgdHJvbmcga2hpIHThu7cgbOG7hyBuw6B5IOG7nyBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLg0KDQojIyMgKio0LjEuMy4gUGjDom4gdMOtY2ggUmVsYXRpdmUgUmlzayBnaeG7r2EgSMO6dCB0aHXhu5FjIHbDoCBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UqKg0KDQpUaeG6v3AgdGhlbywgY2jDum5nIHRhIHTDrW5oIHRvw6FuIE5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSZWxhdGl2ZSBSaXNrIC0gUlIpIMSR4buDIMSR4buLbmggbMaw4bujbmcgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2Egdmnhu4djIGjDunQgdGh14buRYyDEkeG6v24ga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1LiBOaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjIHPhur0gxJHGsOG7o2MgY29pIGzDoCBuaMOzbSBwaMahaSBuaGnhu4VtIGfhu5FjIChiYXNlbGluZSkuDQoNCmBgYHtyfQ0KaW5zdGFsbC5wYWNrYWdlcygiZXBpdG9vbHMiKQ0KbGlicmFyeShlcGl0b29scykNCnJpc2tyYXRpbyh0YWJsZV9TdHJva2Vfc21va2luZykNCmBgYA0KDQpE4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc+G7kSDEkcOjIMSRxrDhu6NjIGdp4bqjaSB0aMOtY2ggcsO1IOG7nyBwaOG6p24gdHLGsOG7m2Mgw6FjIGdp4bqjaSBz4bq9IHTDrW5oIHRvw6FuIFJlbGF0aXZlIFJpc2sgdHJvbmcgxJHDsyBiaeG6v24gxJHhu5ljIGzhuq1wIGzDoCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyB2w6AgcGjhu6UgdGh14buZYyBsw6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1LiBOaMOzbSB0aGFtIGNoaeG6v3UgbMOgIGLhu4duaCBuaMOibiBraMO0bmcgaMO6dCB0aHXhu5FjIHbDoCBraMO0bmcgYuG7iyDEkeG7mXQgcXXhu7UuIFbDoCBuaMOzbSDEkeG7kWkgdMaw4bujbmcgY+G6p24gcXVhbiB0w6JtIGzDoCBi4buHbmggbmjDom4gxJFhbmcgdHJvbmcgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgdsOgIGLhu4sgxJHhu5l0IHF14bu1LiANCg0KKipQaMOibiB0w61jaCBSaXNrIFJhdGlvIChSUikgZ2nhu69hIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIHbDoCBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UqKg0KDQoqKkLhuqNuZyB04bqnbiBz4buRKioNCg0KfCBOaMOzbSBow7p0IHRodeG7kWMgICB8IMSR4buZdCBxdeG7tShZZXMpIHwgS2jDtG5nIMSR4buZdCBxdeG7tShObykgfCBU4buVbmcgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fC0tLS0tOnwNCnwgS2jDtG5nIGjDunQgdGh14buRYyAgfCA2MjQgICAgICAgICAgICAgICB8IDc5MyAgICAgICAgICAgICAgICAgICAgfCAxNDE3IHwNCnwgSMO6dCB0aHXhu5FjICAgICAgICB8IDQwOCAgICAgICAgICAgICAgIHwgMTYwICAgICAgICAgICAgICAgICAgICB8IDU2OCAgfA0KfCAqKlThu5VuZyoqICAgICAgICAgfCAqKjEwMzIqKiAgICAgICAgICB8ICoqOTUzKiogICAgICAgICAgICAgICAgfCAqKjE5ODUqKiB8DQoNCiBDw7RuZyB0aOG7qWMgdMOtbmggbmd1eSBjxqEgKFJpc2spDQoNCiQkDQpcdGV4dHtSaXNrfSA9IFxmcmFje1x0ZXh0e1Phu5EgY2EgbeG6r2MgKFllcyl9fXtcdGV4dHtU4buVbmcgc+G7kSB0cm9uZyBuaMOzbX19DQokJA0KDQokJFx0ZXh0e1Jpc2t9X3tcdGV4dHtLaMO0bmcgaMO6dCB0aHXhu5FjfX0gPSBcZnJhY3s2MjR9ezE0MTd9IFxhcHByb3ggMC40NDAzJCQNCg0KJCRcdGV4dHtSaXNrfV97XHRleHR7SMO6dCB0aHXhu5FjfX0gPSBcZnJhY3s0MDh9ezU2OH0gXGFwcHJveCAwLjcxODMkJA0KDQoqKkPDtG5nIHRo4bupYyB0w61uaCBSaXNrIFJhdGlvIChSUikqKg0KDQokJA0KUlIgPSBcZnJhY3tcdGV4dHtSaXNrfV97XHRleHR7SMO6dCB0aHXhu5FjfX19e1x0ZXh0e1Jpc2t9X3tcdGV4dHtLaMO0bmcgaMO6dCB0aHXhu5FjfX19DQokJA0KDQokJA0KUlIgPSBcZnJhY3swLjcxODN9ezAuNDQwM30gXGFwcHJveCAxLjYzDQokJA0KDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVOG7tyBs4buHIMSR4buZdCBxdeG7tSDhu58gbmjDs20gaMO6dCB0aHXhu5FjIGzDoCA0MDgvNTY4IOKJiCA3MSw4JSwgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20ga2jDtG5nIGjDunQgdGh14buRYyAoNjI0LzE0MTcg4omIIDQ0LDElKS4NCg0KUmlzayBSYXRpbyAoUlIpID0gMSw2MzsgOTUlIENJOiBbMSw1MSDigJMgMSw3Nl07IHAgPCAwLDAwMToNCuKGkiDEkGnhu4F1IG7DoHkgY2jhu6luZyBtaW5oIHLhurFuZyBuaMOzbSBow7p0IHRodeG7kWMgY8OzIG5ndXkgY8ahIMSR4buZdCBxdeG7tSBjYW8gZ+G6pXAga2hv4bqjbmcgMSw2MyBs4bqnbiBzbyB24bubaSBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjLCB2w6Aga+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggKHAgZ+G6p24gYuG6sW5nIDApLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgKENJKSBraMO0bmcgYmFvIGfhu5NtIDEsIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IOG7lW4gxJHhu4tuaCB2w6AgxJHDoW5nIHRpbiBj4bqteS4NCg0KKipL4bq/dCBsdeG6rW4gdOG7qyBjw6FjIGtp4buDbSDEkeG7i25oOioqDQoNCnwgxJHhu5l0IHF14bu1IHwgbWlkcC5leGFjdCAgICAgfCBmaXNoZXIuZXhhY3QgICB8IGNoaS5zcXVhcmUgICAgIHwNCnw6LS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS06fA0KfCBObyAgICAgICB8IE5BICAgICAgICAgICAgIHwgTkEgICAgICAgICAgICAgfCBOQSAgICAgICAgICAgICB8DQp8IFllcyAgICAgIHwgMCAgICAgICAgICAgICAgfCAwIDguMjEyNDg0ZS0zMCB8ICAzLjk3MTE5NGUtMjkgIHwNCg0KQ8OhYyBnacOhIHRy4buLIHAtdmFsdWUgdOG7qyBj4bqjIGJhIHBoxrDGoW5nIHBow6FwIGtp4buDbSDEkeG7i25oIChNaWQtcCBleGFjdCwgRmlzaGVyIGV4YWN0LCB2w6AgQ2hpLXNxdWFyZSkgxJHhu4F1IHLhuqV0IG5o4buPIChwIDwgMC4wMDEpLiDEkGnhu4F1IG7DoHkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgDoga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow7p0IHRodeG7kWMgdsOgIMSR4buZdCBxdeG7tSkgdsOgIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgY8OzIG3hu5l0IG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggbeG6vSBnaeG7r2EgaGFpIGJp4bq/biBuw6B5Lg0KDQoNCiMjIyAqKjQuMS40LiBQaMOibiB0w61jaCBPZGQgUmF0aW8gZ2nhu69hIEjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oKioNCg0KYGBge3J9DQpvZGRzcmF0aW8odGFibGVfU3Ryb2tlX3Ntb2tpbmcsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCioqQ8O0bmcgdGjhu6ljIHTDrW5oIE9kZHMqKg0KDQokJA0KXHRleHR7T2Rkc30gPSBcZnJhY3tcdGV4dHtT4buRIGNhIG3huq9jIChZZXMpfX17XHRleHR7U+G7kSBjYSBraMO0bmcgbeG6r2MgKE5vKX19DQokJA0KIA0KKipDw7RuZyB0aOG7qWMgdMOtbmggT2RkcyBSYXRpbyAoT1IpKioNCg0KJCQNClx0ZXh0e09kZHN9ID0gXGZyYWN7XHRleHR7T2RkcyBIw7p0IHRodeG7kWN9fXtcdGV4dHtPZGRzIGtow7RuZyBIw7p0IHRodeG7kWN9fQ0KJCQNCg0KKipOaOG6rW4geMOpdDoqKg0KDQpL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IFThu7cgc+G7kSBjaMOqbmggKE9SKSBsw6AgMy4yMzcgxJBp4buBdSBuw6B5IGPDsyBuZ2jEqWEgbMOgICJvZGRzIiAodOG7tyBs4buHIGdp4buvYSB4w6FjIHN14bqldCB44bqjeSByYSB2w6Aga2jDtG5nIHjhuqN5IHJhKSBj4bunYSB2aeG7h2MgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBi4buHbmggbmjDom4gaMO6dCB0aHXhu5FjIGNhbyBn4bqlcCAzLjIzNyBs4bqnbiBzbyB24bubaSAib2RkcyIgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBi4buHbmggbmjDom4ga2jDtG5nIGjDunQgdGh14buRYy4gIEvhur90IHF14bqjIG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8gKHAtdmFsdWUgPCAwLjAwMSksIGNobyB0aOG6pXkgaMO6dCB0aHXhu5FjIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIGPDsyBsacOqbiBxdWFuIG3huqFuaCBt4bq9IMSR4bq/biBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1Lg0KDQojIyMgKio0LjEuNS4gVGjhu5FuZyBrw6ogc3V5IGRp4buFbioqDQoNCiMjIyMgKio0LjEuNS4xLiBLaeG7g20gxJHhu4tuaCB0w61uaCDEkeG7mWMgbOG6rXAqKg0KDQpDaMO6bmcgdGEgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIMSR4buDIGtp4buDbSB0cmEgZ2nhuqMgdGh1eeG6v3QgduG7gSB0w61uaCDEkeG7mWMgbOG6rXAgZ2nhu69hIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIHbDoCBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KIC0gSOKCgCAoR2nhuqMgdGh1eeG6v3Qga2jDtG5nKTogVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgdsOgIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tSBsw6AgaGFpIGJp4bq/biDEkeG7mWMgbOG6rXAgKGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hykuDQogLSBI4oKBIChHaeG6oyB0aHV54bq/dCDEkeG7kWkpOiBUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1IGhhaSBiaeG6v24gcGjhu6UgdGh14buZYyAoY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KDQpgYGB7cn0NCiMgS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nDQpjaGlzcS50ZXN0KHRhYmxlX1N0cm9rZV9zbW9raW5nKQ0KYGBgDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIENoaS1zcXVhcmVkIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyB0aOG7kW5nIGvDqiDPh8KyIGzDoCAxMjQsMzggduG7m2kgMSBi4bqtYyB04buxIGRvLCB2w6AgZ2nDoSB0cuG7iyBwIChwLXZhbHVlKSA8IDIuMiDDlyAxMOKBu8K54oG2LiBW4bubaSBt4bupYyDDvSBuZ2jEqWEgdGjDtG5nIHRoxrDhu51uZyDOsSA9IDAuMDUsIGdpw6EgdHLhu4sgcCBy4bqldCBuaOG7jyBuw6B5IGNobyBwaMOpcCBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIChI4oKAKSwgdOG7qWMgbMOgIGdp4bqjIHRodXnhur90IGNobyBy4bqxbmcgaGFpIGJp4bq/biAiU21va2luZ19TdGF0dXMiIHbDoCAiSGFzX1N0cm9rZSIgbMOgIMSR4buZYyBs4bqtcCB24bubaSBuaGF1Lg0KDQrEkGnhu4F1IG7DoHkgY2jhu6luZyB04buPIHThu5NuIHThuqFpIG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgdsOgIGto4bqjIG7Eg25nIGLhu4sgxJHhu5l0IHF14bu1IHRyb25nIHF14bqnbiB0aOG7gyDEkcaw4bujYyBraOG6o28gc8OhdC4gQ+G7pSB0aOG7gywgbmfGsOG7nWkgaMO6dCB0aHXhu5FjIGPDsyB4dSBoxrDhu5tuZyBi4buLIMSR4buZdCBxdeG7tSB24bubaSB04bu3IGzhu4cgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYy4NCg0KUGjDoXQgaGnhu4duIG7DoHkgaG/DoG4gdG/DoG4gcGjDuSBo4bujcCB24bubaSBjw6FjIGLhurFuZyBjaOG7qW5nIHkgaOG7jWMgdHLGsOG7m2MgxJHDonksIHbhu5FuIMSRw6MgY2jhu4kgcmEgcuG6sW5nIGjDoG5oIHZpIGjDunQgdGh14buRYyBsw6BtIGdpYSB0xINuZyBuZ3V5IGPGoSBy4buRaSBsb+G6oW4gY2jhu6ljIG7Eg25nIG7hu5lpIG3DtCBt4bqhY2ggbcOhdSwgdMSDbmcgaHV54bq/dCDDoXAsIHbDoCB4xqEgduG7r2EgxJHhu5luZyBt4bqhY2gg4oCUIG5o4buvbmcgeeG6v3UgdOG7kSBnw7NwIHBo4bqnbiB0cuG7sWMgdGnhur9wIHbDoG8gbmd1eSBjxqEgbeG6r2MgxJHhu5l0IHF14bu1IHbDoCBjw6FjIGLhu4duaCBsw70gdGltIG3huqFjaCBuZ2hpw6ptIHRy4buNbmcga2jDoWMuDQoNCiMjIyMgKio0LjEuNS4yLiBLaeG7g20gxJHhu4tuaCBoaeG7h3UgdOG7tyBs4buHKioNCg0KxJDhu4Mgc28gc8OhbmggdHLhu7FjIHRp4bq/cCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IGdp4buvYSBoYWkgbmjDs20sIGNow7puZyB0YSB0aeG6v24gaMOgbmgga2nhu4NtIMSR4buLbmggaGnhu4d1IGhhaSB04bu3IGzhu4cuDQoNCkfhu41pIHAxIGzDoCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBow7p0IHRodeG7kWMsIHAyIGzDoCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gSOKCgDogcDEgLSBwMiA9IDAgKFThu7cgbOG7hyDEkeG7mXQgcXXhu7Ug4bufIGhhaSBuaMOzbSBsw6AgbmjGsCBuaGF1KS4NCg0KLSBI4oKBOiBwMSAtIHAyID4gMCAoVOG7tyBs4buHIMSR4buZdCBxdeG7tSDhu58gbmjDs20gaMO6dCB0aHXhu5FjIGNhbyBoxqFuIG5ow7NtIGtow7RuZyBow7p0IHRodeG7kWMpLg0KDQpgYGB7cn0NCiMgU+G7kSBjYSDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGjDunQgdGh14buRYyB2w6Aga2jDtG5nIGjDunQgdGh14buRYw0Kc3VjY2Vzc19zbW9raW5nIDwtIGMoNDA4LCA2MjQpDQoNCiMgVOG7lW5nIHPhu5EgYuG7h25oIG5ow6JuIHRyb25nIG3hu5dpIG5ow7NtDQpuX3Ntb2tpbmcgPC0gYyg1NjgsIDE0MTcpDQoNCiMgS2nhu4NtIMSR4buLbmggaGnhu4d1IHThu7cgbOG7hyBt4buZdCBwaMOtYQ0KcHJvcC50ZXN0KHN1Y2Nlc3Nfc21va2luZywgbl9zbW9raW5nLCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29ycmVjdCA9IEZBTFNFKQ0KYGBgDQoNCiAqKk5o4bqtbiB4w6l0IGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGhhaSB04bu3IGzhu4cqKg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBoYWkgdOG7tyBs4buHIMSR4buZYyBs4bqtcCAodHdvLXNhbXBsZSBwcm9wb3J0aW9uIHRlc3QpIGNobyB0aOG6pXk6DQoNCi0gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqjogXChYXjIgPSAxMjUuNDlcKQ0KLSBC4bqtYyB04buxIGRvOiBcKGRmID0gMVwpDQotIFwocFwpLXZhbHVlOiBcKHAgPCAyLjIgXHRpbWVzIDEwXnstMTZ9XCkNCg0KVuG7m2kgXChwXCktdmFsdWUgbmjhu48gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIG3hu6ljIMO9IG5naMSpYSBcKFxhbHBoYSA9IDAuMDVcKSwgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nKiogXCgoSF8wOiBwXzEgLSBwXzIgPSAwKVwpIHbDoCAqKmNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgxJHhu5FpKiogXCgoSF8xOiBwXzEgLSBwXzIgPiAwKVwpLg0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSAqKnThu7cgbOG7hyDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGjDunQgdGh14buRYyoqIFwoKHBfMSA9IDcxLjgzXCUpXCkgKipjYW8gaMahbiBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiogc28gduG7m2kgbmjDs20ga2jDtG5nIGjDunQgdGh14buRYyBcKChwXzIgPSA0NC4wNFwlKVwpLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBoaeG7h3UgdOG7tyBs4buHIFwoKHBfMSAtIHBfMilcKSBu4bqxbSB0cm9uZyBraG/huqNuZyBcKFswLjI0MDsgMS4wMDBdXCksIHjDoWMgbmjhuq1uIHLhurFuZyBz4buxIGNow6puaCBs4buHY2ggbsOgeSBsw6AgZMawxqFuZyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KKipL4bq/dCBsdeG6rW46KiogSMOgbmggdmkgaMO6dCB0aHXhu5FjIGPDsyBsacOqbiBxdWFuIGNo4bq3dCBjaOG6vSDEkeG6v24gdmnhu4djIGdpYSB0xINuZyBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UuDQoNCiMjICoqNC4yIFRp4buBbiBz4butIGdpYSDEkcOsbmggYuG7iyDEkeG7mXQgcXXhu7UgdMOhYyDEkeG7mW5nIMSR4bq/biBC4buLIMSR4buZdCBxdeG7tSoqDQoNClRyb25nIHBo4bqnbiBuw6B5LCBjaMO6bmcgdGEgc+G6vSBwaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSDEkeG6t2MgxJFp4buDbSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buZdCBxdeG7tSBj4bunYSBi4buHbmggbmjDom4gdsOgIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tS4gQmnhur9uIMSR4buZYyBs4bqtcCBsw6AgRmFtaWx5X0hpc3RvcnkgdsOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBIYXNfU3Ryb2tlLg0KDQojIyMgKio0LjIuMSBC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCBjaG8gYmnhur9uIEZhbWlseV9IaXN0b3J5KioNCg0KxJDhuqd1IHRpw6puLCBjaMO6bmcgdGEgc+G6vSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBjaG8gYmnhur9uIEZhbWlseV9IaXN0b3J5IMSR4buDIGhp4buDdSByw7Ugc+G7sSBwaMOibiBi4buRIGPhu6dhIG5ow7NtIGLhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIMSR4buZdCBxdeG7tSB0cm9uZyB04bqtcCBk4buvIGxp4buHdS4NCg0KYGBge3J9DQp0YWJfRmFtaWx5X0hpc3RvcnkgPC0gdGFibGUoZGF0YSRGYW1pbHlfSGlzdG9yeSkNCnRhYl9GYW1pbHlfSGlzdG9yeQ0KYGBgDQoNCkvhur90IHF14bqjIHPhur0gxJHGsOG7o2MgdHLhu7FjIHF1YW4gaMOzYSBi4bqxbmcgYmnhu4N1IMSR4buTIGPhu5l0IMSR4buDIGThu4UgZMOgbmcgc28gc8Ohbmggc+G7kSBsxrDhu6NuZyBnaeG7r2EgaGFpIG5ow7NtLg0KDQpgYGB7cn0NCmJhcnBsb3QodGFiX0ZhbWlseV9IaXN0b3J5LA0KICAgICAgICBtYWluID0gIkJp4buDdSDEkeG7kyB04bqnbiBz4buRIG5ow7NtIGLhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIMSR4buZdCBxdeG7tSIsDQogICAgICAgIHhsYWIgPSAiVGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIMSR4buZdCBxdeG7tSIsDQogICAgICAgIHlsYWIgPSAiVOG6p24gc+G7kSIsDQogICAgICAgIGNvbCA9IGMoImxpZ2h0eWVsbG93IiwgImxpZ2h0Z3JlZW4iKSwNCiAgICAgICAgYm9yZGVyID0gIndoaXRlIiwNCiAgICAgICAgeWxpbSA9IGMoMCwgbWF4KHRhYl9GYW1pbHlfSGlzdG9yeSkgKyA0MCkpIC0+IGJwX0ZhbWlseV9IaXN0b3J5DQoNCnRleHQoeCA9IGJwX0ZhbWlseV9IaXN0b3J5LCB5ID0gdGFiX0ZhbWlseV9IaXN0b3J5ICsgMTUsIGxhYmVscyA9IHRhYl9GYW1pbHlfSGlzdG9yeSkNCmBgYA0KDQpUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRIHbDoCBiaeG7g3UgxJHhu5MsIHRhIHRo4bqleSBy4bqxbmcgdHJvbmcgdOG7lW5nIHPhu5EgMTk4NSBi4buHbmggbmjDom4sIGPDsyA5ODUgbmfGsOG7nWkgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggxJHhu5l0IHF14bu1IChZZXMpLiBUcm9uZyBraGkgxJHDsywgc+G7kSBi4buHbmggbmjDom4ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgKE5vKSBsw6AgMTAwMCBuZ8aw4budaS4NCg0KVGnhur9wIHRoZW8sIGNow7puZyB0YSBz4bq9IHTDrW5oIHThu7cgbOG7hyBwaOG6p24gdHLEg20gdsOgIHbhur0gYmnhu4N1IMSR4buTIHRyw7JuIMSR4buDIHRo4buDIGhp4buHbiByw7UgaMahbiBz4buxIGNow6puaCBs4buHY2ggduG7gSBt4bq3dCB0xrDGoW5nIMSR4buRaSBnaeG7r2EgaGFpIG5ow7NtLg0KDQpgYGB7cn0NCiMgVGhheSDEkeG7lWkgbmjDo24gdOG7qyBZZXMvTm8gc2FuZyBDw7MvS2jDtG5nDQpkYXRhJEZhbWlseV9IaXN0b3J5IDwtIGlmZWxzZShkYXRhJEZhbWlseV9IaXN0b3J5ID09ICJZZXMiLCAiQ8OzIiwgIktow7RuZyIpDQoNCiMgxJDhuqNtIGLhuqNvIGzDoCBmYWN0b3IgdsOgIMSRw7puZyB0aOG7qSB04buxDQpkYXRhJEZhbWlseV9IaXN0b3J5IDwtIGZhY3RvcihkYXRhJEZhbWlseV9IaXN0b3J5LCBsZXZlbHMgPSBjKCJLaMO0bmciLCAiQ8OzIikpDQoNCiMgVMOtbmggdOG6p24gc3XhuqV0IHbDoCBwaOG6p24gdHLEg20NCmZhbWlseV9mcmVxIDwtIHRhYmxlKGRhdGEkRmFtaWx5X0hpc3RvcnkpDQpmYW1pbHlfcGVyY2VudCA8LSByb3VuZChmYW1pbHlfZnJlcSAvIHN1bShmYW1pbHlfZnJlcSkgKiAxMDAsIDEpDQoNCiMgVOG6oW8gbmjDo246ICJDw7MgLSA1OC4yJSINCmxhYmVscyA8LSBwYXN0ZShuYW1lcyhmYW1pbHlfZnJlcSksICItIiwgZmFtaWx5X3BlcmNlbnQsICIlIikNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyB0csOybiBjw7MgcGjhuqduIHRyxINtDQpwaWUoZmFtaWx5X2ZyZXEsDQogICAgbGFiZWxzID0gbGFiZWxzLA0KICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHRyw7JuOiBUaeG7gW4gc+G7rSBnaWEgxJHDrG5oIChGYW1pbHkgSGlzdG9yeSkiLA0KICAgIGNvbCA9IHJhaW5ib3cobGVuZ3RoKGZhbWlseV9mcmVxKSkNCikNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDsm4gY2hvIHRo4bqleSBt4buZdCBjw6FjaCB0cuG7sWMgcXVhbiBy4bqxbmcgbmjDs20gYuG7h25oIG5ow6JuIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buZdCBxdeG7tSBjaGnhur9tIMSR4bq/biA0OS42JSB0cm9uZyBt4bqrdSBuZ2hpw6puIGPhu6l1LCB0cm9uZyBraGkgbmjDs20ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgIGNoaeG6v20gNTAuNCUuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHRp4buBbiBz4butIGdpYSDEkcOsbmggIMSR4buZdCBxdeG7tSBsw6AgdHLGsOG7nW5nIGjhu6NwIMOtdCBwaOG7lSBiaeG6v24gaMahbi4gUGjDom4gdMOtY2ggdGnhur9wIHRoZW8gc+G6vSBsw6BtIHLDtSBsaeG7h3UgxJHhurdjIMSRaeG7g20gbsOgeSBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIG5ndXkgY8ahICDEkeG7mXQgcXXhu7UgaGF5IGtow7RuZy4NCg0KIyMjICoqNC4yLjIuIFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBoYWkgYmnhur9uIEZhbWlseV9IaXN0b3J5IHbDoCBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UqKg0KDQpDaMO6bmcgdGEgc+G6vSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgaGFpIGJp4bq/biBGYW1pbHlfSGlzdG9yeSB2w6AgSGFzX1N0cm9rZSDEkeG7gyB4ZW0geMOpdCBt4buRaSBxdWFuIGjhu4cgc8ahIGLhu5kgZ2nhu69hIGNow7puZy4NCg0KYGBge3J9DQp0YWJsZV9TdHJva2VfRmFtaWx5X0hpc3RvcnkgPC0gdGFibGUoZGF0YSRGYW1pbHlfSGlzdG9yeSwgZGF0YSRIYXNfU3Ryb2tlKQ0KdGFibGVfU3Ryb2tlX0ZhbWlseV9IaXN0b3J5DQpgYGANCg0KQuG6o25nIHThuqduIHPhu5EgY2jDqW8gY2hvIHRo4bqleToNCg0KICAtIFRyb25nIG5ow7NtIHRp4buBbiBz4butIGdpYSDEkcOsbmggxJHhu5l0IHF14bu1IChjw7MpOiBjw7MgMzMzIG5nxrDhu51pIGtow7RuZyDEkeG7mXQgcXXhu7UgdsOgIDY1MiBuZ8aw4budaSDEkeG7mXQgcXXhu7UuDQogIC0gVHJvbmcgbmjDs20gdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBraMO0bmcgxJHhu5l0IHF14bu1ICAoa2jDtG5nKTogY8OzIDYyMCBuZ8aw4budaSBraMO0bmcgxJHhu5l0IHF14bu1IHbDoCAzODAgbmfGsOG7nWkgxJHhu5l0IHF14bu1Lg0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB0w6xuaCB0cuG6oW5nIHRp4buBbiBz4butIGdpYSDEkcOsbmggIMSR4buZdCBxdeG7tSAgY8OzIHRo4buDIGxpw6puIHF1YW4gxJHhur9uIG5ndXkgY8ahICDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gc28gduG7m2kgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCAgxJHhu5l0IHF14bu1IC4gVHV5IG5oacOqbiwgY+G6p24gdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiDEkeG7gyB4w6FjIMSR4buLbmggbeG7qWMgxJHhu5kgw70gbmdoxKlhIGPhu6dhIG3hu5FpIGxpw6puIGjhu4cgbsOgeS4NCg0KxJDhu4MgbMOgbSByw7UgaMahbiBuaOG6rW4gxJHhu4tuaCB0csOqbiwgY2jDum5nIHRhIHPhur0gc+G7rSBk4bulbmcgYmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtLg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCnRhYmxlX1N0cm9rZV9GYW1pbHlfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEZhbWlseV9IaXN0b3J5LCBkYXRhJEhhc19TdHJva2UpDQoNCiMgQ2h1eeG7g24gYuG6o25nIGNow6lvIHRow6BuaCBkYXRhIGZyYW1lDQpkZl9wbG90X0ZhbWlseV9IaXN0b3J5IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfU3Ryb2tlX0ZhbWlseV9IaXN0b3J5KQ0KY29sbmFtZXMoZGZfcGxvdF9GYW1pbHlfSGlzdG9yeSkgPC0gYygiRmFtaWx5X0hpc3RvcnkiLCAiSGFzX1N0cm9rZSIsICJDb3VudCIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MNCmdncGxvdChkZl9wbG90X0ZhbWlseV9IaXN0b3J5LCBhZXMoeCA9IEZhbWlseV9IaXN0b3J5LCB5ID0gQ291bnQsIGZpbGwgPSBIYXNfU3Ryb2tlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicyh0aXRsZSA9ICJUw6xuaCB0cuG6oW5nIMSR4buZdCBxdeG7tSB0aGVvIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgxJHhu5l0IHF14bu1IiwNCiAgICAgICB4ID0gIlRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgxJHhu5l0IHF14bu1IChGYW1pbHlfSGlzdG9yeSkiLA0KICAgICAgIHkgPSAiU+G7kSBsxrDhu6NuZyBi4buHbmggbmjDom4iLA0KICAgICAgIGZpbGwgPSAiIMSR4buZdCBxdeG7tSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiTm8iID0gInB1cnBsZSIsICJZZXMiID0gImdyZWVuIikpDQpgYGANCg0KLSBCaeG7g3UgxJHhu5MgY+G7mXQgdHLhu7FjIHF1YW4gaMOzYSBt4buZdCBjw6FjaCByw7UgcsOgbmcgc+G7sSBraMOhYyBiaeG7h3QgxJHDoyBuw6p1Og0KICAtIOG7niBuaMOzbSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGtow7RuZyAgxJHhu5l0IHF14bu1ICAoS2jDtG5nKTogQ+G7mXQgIktow7RuZyDEkeG7mXQgcXXhu7UiIGNhbyBoxqFuIGjhurNuIGPhu5l0ICAixJHhu5l0IHF14bu1Ii4NCiAgLSDhu54gbmjDs20gdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCAgxJHhu5l0IHF14bu1IChDw7MpOiBD4buZdCAixJHhu5l0IHF14bu1IiBs4bqhaSBjYW8gaMahbiBn4bqlcCDEkcO0aSBj4buZdCAiS2jDtG5nIMSR4buZdCBxdeG7tSIuDQogIA0KLSBCaeG7g3UgxJHhu5MgY+G7p25nIGPhu5EgbeG6oW5oIG3hur0gZ2nhuqMgdGh1eeG6v3QgcuG6sW5nIHZp4buHYyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCAgxJHhu5l0IHF14bu1IGPDsyB0w61uaCBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgY2FvIGjGoW4uIELhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyDEkeG7mXQgcXXhu7UgZMaw4budbmcgbmjGsCBjw7MgdOG7tyBs4buHIMSR4buZdCBxdeG7tSBjYW8gaMahbiA1MCUsIHRyb25nIGtoaSB04bu3IGzhu4cgbsOgeSDhu58gbmfGsOG7nWkga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buZdCBxdeG7tSB0aOG6pXAgaMahbiDEkcOhbmcga+G7gy4NCg0KIyMjICoqNC4yLjMuIFBow6JuIHTDrWNoIFJlbGF0aXZlIFJpc2sgZ2nhu69hIEZhbWlseV9IaXN0b3J5IHbDoCBraOG6oyBuxINuZyAgxJHhu5l0IHF14bu1KioNCg0KVGnhur9wIHRoZW8sIGNow7puZyB0YSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzayAtIFJSKSDEkeG7gyDEkeG7i25oIGzGsOG7o25nIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHTDrW5oICDEkeG6v24ga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1LiBOaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggIMSR4buZdCBxdeG7tSBz4bq9IMSRxrDhu6NjIGNvaSBsw6AgbmjDs20gdGhhbSBjaGnhur91Lg0KDQpgYGB7cn0NCnJpc2tyYXRpbyh0YWJsZV9TdHJva2VfRmFtaWx5X0hpc3RvcnkpDQpgYGANCg0KKipOaOG6rW4geMOpdDoqKg0KDQoqKjEuIEPDoWNoIHTDrW5oIFJpc2sgUmF0aW8gKFJSKSoqDQoNClJSIMSRxrDhu6NjIHTDrW5oIGLhurFuZyBjw7RuZyB0aOG7qWM6DQoNClxbDQpSUiA9IFxmcmFje1x0ZXh0e1Thu7cgbOG7hyAgYuG7h25oIOG7nyBuaMOzbSBjw7MgdGnhu4FuIHPhu619fXtcdGV4dHtU4bu3IGzhu4cgIGLhu4duaCDhu58gbmjDs20ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rX19DQpcXQ0KDQotICoqTmjDs20gQ8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKjoNCg0KXFsNCnBfe1x0ZXh0e0PDs319ID0gXGZyYWN7NjUyfXs5ODV9IFxhcHByb3ggMC42NjINClxdDQoNCi0gKipOaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKjoNCg0KXFsNCnBfe1x0ZXh0e0tow7RuZ319ID0gXGZyYWN7MzgwfXsxMDAwfSA9IDAuMzgwDQpcXQ0KDQrih5IgKipSUioqOg0KDQpcWw0KUlIgPSBcZnJhY3swLjY2Mn17MC4zODB9IFxhcHByb3ggMS43NDINClxdDQoNCi0tLQ0KDQoqKk5o4bqtbiB4w6l0IGvhur90IHF14bqjKioNCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleToNCg0KLSAqKlJSID0gMS43NDIgKDk1JSBDSTogMS41OTEg4oCTIDEuOTA4KSwgcCA8IDAuMDAxKiouICANCg0KLSBOaOG7r25nIG5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGLhu4sgxJHhu5l0IHF14bu1IGPDsyBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UgKipjYW8gaMahbiBraG/huqNuZyAxLjc0IGzhuqduKiogc28gduG7m2kgbmjhu69uZyBuZ8aw4budaSBraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmguICANCg0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxIHbDoCBwLXZhbHVlIHLhuqV0IG5o4buPICg8IDAuMDUpLCBjaOG7qW5nIHThu48gc+G7sSBraMOhYyBiaeG7h3QgKipjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG3huqFuaCoqLiAgDQoNCi0gWeG6v3UgdOG7kSAqKkZhbWlseSBIaXN0b3J5KiogbMOgIG3hu5l0IHnhur91IHThu5Egbmd1eSBjxqEgcXVhbiB0cuG7jW5nLCBjw7MgbGnDqm4gcXVhbiBjaOG6t3QgY2jhur0gxJHhur9uIGto4bqjIG7Eg25nICDEkeG7mXQgcXXhu7UuDQoNCiANCioqS+G6v3QgbHXhuq1uIHThu6sgY8OhYyBraeG7g20gxJHhu4tuaDoqKg0KDQp8IEZhbWlseV9IaXN0b3J5ICAgICAgfCBtaWRwLmV4YWN0ICAgIHwgZmlzaGVyLmV4YWN0ICB8IGNoaS5zcXVhcmUgICB8DQp8Oi0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLTp8DQp8IGtow7RuZyAgIHwgTkEgICAgICAgICAgICB8IE5BICAgICAgICAgICAgfCBOQSAgICAgICAgICAgfA0KfCBjw7MgICAgfCAwICAgICAgfCAxLjY1MjI4ZS0zNiAgICAgIHwgMy4wNjg3MWUtMzYgICAgIHwNCg0KROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggZ2nhu69hIHTDrW5oIGNo4bqldCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgKEZhbWlseV9IaXN0b3J5KSB2w6Aga2jhuqMgbsSDbmcgIMSR4buZdCBxdeG7tSwgdGEgdGjhuqV5IHLhurFuZyDhu58gbmjDs20gKip0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buZdCBxdeG7tSAoY8OzKSoqLCBjw6FjIGdpw6EgdHLhu4sgcCB04burIGPhuqMgYmEgcGjGsMahbmcgcGjDoXAga2nhu4NtIMSR4buLbmggbWlkLXAgZXhhY3QsIEZpc2hlciBleGFjdCB2w6AgQ2hpLXNxdWFyZSDEkeG7gXUgcuG6pXQgbmjhu48sIG5o4buPIGjGoW4gbmhp4buBdSBzbyB24bubaSBuZ8aw4buhbmcgw70gbmdoxKlhIDAuMDUuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrW5oIGNo4bqldCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgdsOgIGto4bqjIG7Eg25nICDEkeG7mXQgcXXhu7UgIGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBOw7NpIGPDoWNoIGtow6FjLCAqKnTDrW5oIGNo4bqldCBj4bunYSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgY8OzIHRo4buDIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIGzDoG0gdMSDbmcga2jhuqMgbsSDbmcgIMSR4buZdCBxdeG7tSoqLg0KDQojIyMgKio0LjIuNC4gUGjDom4gdMOtY2ggT2RkIFJhdGlvIGdp4buvYSBGYW1pbHlfSGlzdG9yeSB2w6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1KioNCg0KVMawxqFuZyB04buxLCBjaMO6bmcgdGEgc+G6vSB0w61uaCBU4bu3IHPhu5EgY2jDqm5oIChPZGRzIFJhdGlvIC0gT1IpLg0KDQpgYGB7cn0NCm9kZHNyYXRpbyh0YWJsZV9TdHJva2VfRmFtaWx5X0hpc3RvcnksIGNvbmYubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCk9SIMSRxrDhu6NjIHTDrW5oIGLhurFuZyBjw7RuZyB0aOG7qWM6DQoNClxbDQpPUiA9IFxmcmFje1xkZnJhY3thfXtifX17XGRmcmFje2N9e2R9fSA9IFxmcmFje2EgXHRpbWVzIGR9e2IgXHRpbWVzIGN9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoYVwpOiBz4buRIG5nxrDhu51pICoqQ8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiB2w6AgKipi4buLIMSR4buZdCBxdeG7tSoqID0gNjUyICANCi0gXChiXCk6IHPhu5EgbmfGsOG7nWkgKipDw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCoqIG5oxrBuZyAqKmtow7RuZyBi4buLIMSR4buZdCBxdeG7tSoqID0gMzMzICANCi0gXChjXCk6IHPhu5EgbmfGsOG7nWkgKipLaMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiB2w6AgKipi4buLIMSR4buZdCBxdeG7tSoqID0gMzgwICANCi0gXChkXCk6IHPhu5EgbmfGsOG7nWkgKipLaMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiB2w6AgKipraMO0bmcgYuG7iyDEkeG7mXQgcXXhu7UqKiA9IDYyMCAgDQoNCktoaSDEkcOzOg0KDQpcWw0KT1IgPSBcZnJhY3s2NTIgXHRpbWVzIDYyMH17MzMzIFx0aW1lcyAzODB9IFxhcHByb3ggMy4xOQ0KXF0NCg0KLSAqKk9SID0gMy4xOSAoOTUlIENJOiAyLjY2IOKAkyAzLjg0KSwgcCA8IDAuMDAxKiouICANCi0gTmjhu69uZyBuZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIMSR4buZdCBxdeG7tSBjw7MgKipvZGRzICDEkeG7mXQgcXXhu7UgY2FvIGfhuqVwIGtob+G6o25nIDMuMTkgbOG6p24qKiBzbyB24bubaSBuaOG7r25nIG5nxrDhu51pIGtow7RuZyBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaC4gIA0KLSBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxIHbDoCBwLXZhbHVlIHLhuqV0IG5o4buPLCBjaOG7qW5nIHThu48gc+G7sSBraMOhYyBiaeG7h3QgbsOgeSAqKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oKiouICANCi0gKipOaMOzbSB0aGFtIGNoaeG6v3UqKiB0cm9uZyBwaMOibiB0w61jaCBsw6AgKirigJxLaMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmjigJ0qKi4gIA0KLSDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB54bq/dSB04buRIGRpIHRydXnhu4FuIChmYW1pbHkgaGlzdG9yeSkgbMOgIG3hu5l0ICoqeeG6v3UgdOG7kSBuZ3V5IGPGoSBxdWFuIHRy4buNbmcqKiwgY+G6p24gxJHGsOG7o2MgeGVtIHjDqXQgdHJvbmcgY8OhYyBtw7QgaMOsbmggZOG7sSDEkW/DoW4gdsOgIHRyb25nIGPDtG5nIHTDoWMgcGjDsm5nIG5n4burYSDEkeG7mXQgcXXhu7UuDQoNCiMjIyAqKjQuMi41LiBUaOG7kW5nIGvDqiBzdXkgZGnhu4VuKioNCg0KQ2jDum5nIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkeG7gyBraeG7g20gdHJhIGdp4bqjIHRodXnhur90IHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGdp4buvYSB0w61uaCBjaOG6pXQgVGnhu4FuIHPhu60gZ2lhIMSRw6xuaCB2w6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1Lg0KDQojIyMjICoqNC4yLjUuMSBLaeG7g20gxJHhu4tuaCBjaGkgYsOsbmggcGjGsMahbmcqKg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gSOKCgCAoR2nhuqMgdGh1eeG6v3Qga2jDtG5nKTogVMOtbmggY2jhuqV0IFRp4buBbiBz4butIGdpYSDEkcOsbmggYuG7iyDEkeG7mXQgcXXhu7UgIHbDoCBraOG6oyBuxINuZyBi4buLIMSR4buZdCBxdeG7tSBsw6AgaGFpIGJp4bq/biDEkeG7mWMgbOG6rXAgKGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gaOG7hykuDQotIEjigoEgKEdp4bqjIHRodXnhur90IMSR4buRaSk6IFTDrW5oIGNo4bqldCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGLhu4sgxJHhu5l0IHF14bu1IHbDoCBraOG6oyBuxINuZyBi4buLIMSR4buZdCBxdeG7tSBsw6AgaGFpIGJp4bq/biBwaOG7pSB0aHXhu5ljIChjw7MgbeG7kWkgbGnDqm4gaOG7hykuDQoNCmBgYHtyfQ0KIyBLaeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcNCmNoaXNxLnRlc3QodGFibGVfU3Ryb2tlX0ZhbWlseV9IaXN0b3J5KQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcgUGVhcnNvbiB24bubaSBoaeG7h3UgY2jhu4luaCBsacOqbiB04bulYyBj4bunYSBZYXRlcyBjaG8gZ2nDoSB0cuG7iyB0aOG7kW5nIGvDqiBYLXNxdWFyZWQgbMOgIDE1Ni44OSwgduG7m2kgYuG6rWMgdOG7sSBkbyBsw6AgMS4gR2nDoSB0cuG7iyBwLXZhbHVlIHTGsMahbmcg4bupbmcgbMOgIDIuMmUtMTYsIG3hu5l0IGdpw6EgdHLhu4sgY+G7sWMga+G7syBuaOG7jy4NCg0KRG8gcC12YWx1ZSBuaOG7jyBoxqFuIHLhuqV0IG5oaeG7gXUgc28gduG7m2kgbeG7qWMgw70gbmdoxKlhIHRow7RuZyB0aMaw4budbmcgKM6xID0gMC4wNSksIGNow7puZyB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIChI4oKAKS4gxJBp4buBdSBuw6B5IGN1bmcgY+G6pXAgYuG6sW5nIGNo4bupbmcgdGjhu5FuZyBrw6ogbeG6oW5oIG3hur0gxJHhu4Mga+G6v3QgbHXhuq1uIHLhurFuZyBjw7MgbeG7mXQgbeG7kWkgbGnDqm4gaOG7hyBwaOG7pSB0aHXhu5ljIHLhuqV0IHLDtSByw6BuZyBnaeG7r2Egdmnhu4djIHRp4buBbiBz4butIGdpYSDEkcOsbmggYuG7iyDEkeG7mXQgcXXhu7UgdsOgIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tSAuDQoNCsSQ4buDIHNvIHPDoW5oIHRy4buxYyB0aeG6v3AgdOG7tyBs4buHIMSR4buZdCBxdeG7tSBnaeG7r2EgaGFpIG5ow7NtLCBjaMO6bmcgdGEgdGnhur9uIGjDoG5oIGtp4buDbSDEkeG7i25oIGhp4buHdSBoYWkgdOG7tyBs4buHLiANCkfhu41pIHAxIGzDoCB04bu3IGzhu4cgIMSR4buZdCBxdeG7tSDhu58gbmjDs20gY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggIGLhu4duaCAsIHAyIGzDoCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggYuG7iyDEkeG7mXQgcXXhu7UuDQoNCiMjIyMgKio0LjIuNS4yIEtp4buDbSDEkeG7i25oIGhp4buHdSB04bu3IGzhu4c6KioNCg0KLSBI4oKAOiBwMSAtIHAyID0gMCAoVOG7tyBs4buHICDEkeG7mXQgcXXhu7Ug4bufIGhhaSBuaMOzbSBsw6AgbmjGsCBuaGF1KS4NCi0gSOKCgTogcDEgLSBwMiA+IDAgKFThu7cgbOG7hyAgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buHbmggY2FvIGjGoW4gbmjDs20gY8OybiBs4bqhaSApLg0KDQpgYGB7cn0NCiMgU+G7kSBjYSAgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSAgdsOgIA0Kc3VjY2Vzc19GYW1pbHlfSGlzdG9yeSA8LSBjKDY1MiwgMzgwKQ0KDQojIFThu5VuZyBz4buRIGLhu4duaCBuaMOibiB0cm9uZyBt4buXaSBuaMOzbQ0Kbl9GYW1pbHlfSGlzdG9yeSA8LSBjKDk4NSwgMTAwMCkNCg0KIyBLaeG7g20gxJHhu4tuaCBoaeG7h3UgdOG7tyBs4buHIG3hu5l0IHBow61hDQpwcm9wLnRlc3Qoc3VjY2Vzc19GYW1pbHlfSGlzdG9yeSwgbl9GYW1pbHlfSGlzdG9yeSwgYWx0ZXJuYXRpdmUgPSAiZ3JlYXRlciIsIGNvcnJlY3QgPSBGQUxTRSkNCmBgYA0KDQotIEvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGhhaSB04bu3IGzhu4cgY2hvIHRo4bqleSAqKnThu7cgbOG7hyAgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBi4buHbmggbmjDom4gY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggIMSR4buZdCBxdeG7tSAgKHDigoEgPSA2Ni4yJSkgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIGtob25nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICDEkeG7mXQgcXXhu7UgIChw4oKCID0gMzglKSoqLiBHacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKFwocCA9IDIuMiBcdGltZXMgMTBeey0xNn1cKSkgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KLSAgKipCw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgXCggSF8wIFwpKiosIGvhur90IGx14bqtbiBy4bqxbmcgdOG7tyBs4buHICDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oICoqY2FvIGjGoW4gbeG7mXQgY8OhY2ggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7MgdGnhu4FuIHPhu60uDQoNCg0KIyMgKio0LjMuIFRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHTDoWMgxJHhu5luZyDEkeG6v24gQuG7iyDEkeG7mXQgcXXhu7UqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgY2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY+G7p2EgYuG7h25oIG5ow6JuICB2w6Aga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1LiBCaeG6v24gxJHhu5ljIGzhuq1wIGzDoCBCUF9IaXN0b3J5ICh24bubaSAzIG3hu6ljIMSR4buZOiAiTm9ybWFsIjogQsOsbmggdGjGsOG7nW5nICwiSHlwZXJ0ZW5zaW9uIjogaHV54bq/dCDDoXAgY2FvLCAiUHJlSHlwZXJ0ZW5zaW9uIjogdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwKSB2w6AgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIEhhc19TdHJva2UgKGPDsyBob+G6t2Mga2jDtG5nIMSR4buZdCBxdeG7tSkuDQoNCiMjIyAqKjQuMy4xIELhuqNuZyB04bqnbiBz4buRIC0gdOG6p24gc3XhuqV0IGNobyBiaeG6v24gQlBfSGlzdG9yeSoqDQoNCsSQ4bqndSB0acOqbiwgY2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2hvIGJp4bq/biBCUF9IaXN0b3J5IMSR4buDIGhp4buDdSByw7Ugc+G7sSBwaMOibiBi4buRIGPhu6dhIGPDoWMgbmjDs20gYuG7h25oIG5ow6JuIHRoZW8gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iy4NCg0KYGBge3J9DQp0YWJfQlBfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEJQX0hpc3RvcnkpDQp0YWJfQlBfSGlzdG9yeQ0KYGBgDQoNCkvhur90IHF14bqjIHRyw6puIHPhur0gxJHGsOG7o2MgdHLhu7FjIHF1YW4gaMOzYSBi4bqxbmcgYmnhu4N1IMSR4buTIGPhu5l0IMSR4buDIHNvIHPDoW5oIHPhu5EgbMaw4bujbmcgZ2nhu69hIGPDoWMgbmjDs20uDQoNCmBgYHtyfQ0KYmFycGxvdCh0YWJfQlBfSGlzdG9yeSwNCiAgICAgICAgbWFpbiA9ICJCaeG7g3UgxJHhu5MgdOG6p24gc+G7kSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCAiLA0KICAgICAgICB4bGFiID0gInRp4buBbiBz4butIGh1eeG6v3Qgw6FwIiwNCiAgICAgICAgeWxhYiA9ICJU4bqnbiBz4buRIiwNCiAgICAgICAgY29sID0gYygic2t5Ymx1ZSIsICJsaWdodGdyZWVuIiwgImxpZ2h0Y29yYWwiLCAicGx1bSIpLA0KICAgICAgICBib3JkZXIgPSAid2hpdGUiLA0KICAgICAgICB5bGltID0gYygwLCBtYXgodGFiX0JQX0hpc3RvcnkpICsgNDApKSAtPiBicF9CUF9IaXN0b3J5DQoNCnRleHQoeCA9IGJwX0JQX0hpc3RvcnksIHkgPSB0YWJfQlBfSGlzdG9yeSArIDE1LCBsYWJlbHMgPSB0YWJfQlBfSGlzdG9yeSkNCmBgYA0KDQoqKkLhuqNuZyBk4buLY2ggdGh14bqtdCoqDQoNCnwgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgKHRp4bq/bmcgQW5oKSAgICAgfCBUaeG6v25nIFZp4buHdCB0xrDGoW5nIOG7qW5nICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgSHlwZXJ0ZW5zaW9uICAgICAgICAgICAgICAgICAgICAgfCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBjYW8gICAgICAgIHwNCnwgTm9ybWFsICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICBCw6xuaCB0aMaw4budbmcgICAgICAgICAgICAgIHwNCnwgUHJlaHlwZXJ0ZW5zaW9uICAgICAgICAgICAgICAgICAgfCB0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgICAgICAgICAgfA0KDQpgYGB7cn0NCiMgVMOtbmggdOG6p24gc3XhuqV0DQpicF9mcmVxIDwtIHRhYmxlKGRhdGEkQlBfSGlzdG9yeSkNCg0KIyBUw61uaCBwaOG6p24gdHLEg20gdsOgIGzDoG0gdHLDsm4NCmJwX3BlcmNlbnQgPC0gcm91bmQoYnBfZnJlcSAvIHN1bShicF9mcmVxKSAqIDEwMCwgMSkNCg0KIyBU4bqhbyBuaMOjbiBoaeG7g24gdGjhu4s6ICJQcmVoeXBlcnRlbnNpb24gLSAyOC4zJSINCmxhYmVscyA8LSBwYXN0ZShuYW1lcyhicF9mcmVxKSwgIi0iLCBicF9wZXJjZW50LCAiJSIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgdHLDsm4NCnBpZShicF9mcmVxLA0KICAgIGxhYmVscyA9IGxhYmVscywNCiAgICBtYWluID0gIlBow6JuIGxv4bqhaSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCIsDQogICAgY29sID0gcmFpbmJvdyhsZW5ndGgoYnBfZnJlcSkpDQopDQpgYGANCg0KKipOaOG6rW4geMOpdCoqDQoNCi0gVGjDtG5nIHF1YSBi4bqjbmcgdOG6p24gc+G7kSB2w6AgYmnhu4N1IMSR4buTLCB0YSB0aOG6pXkgcuG6sW5nIHRyb25nIHThu5VuZyBz4buRIDE5ODUgYuG7h25oIG5ow6JuOg0KDQpL4bq/dCBxdeG6oyBwaMOibiBi4buRIHTDrG5oIHRy4bqhbmcgaHV54bq/dCDDoXAgY2hvIHRo4bqleSB0cm9uZyB04buVbmcgc+G7kSBt4bqrdSBraOG6o28gc8OhdCwgNDAsMSUgxJHhu5FpIHTGsOG7o25nIGPDsyBodXnhur90IMOhcCBiw6xuaCB0aMaw4budbmcgKDU2OSBuZ8aw4budaSksIHRyb25nIGtoaSAzMSwyJSByxqFpIHbDoG8gbmjDs20gdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwICg2MjAgbmfGsOG7nWkpIHbDoCAyOCw3JSAoNTY5IG5nxrDhu51pKSDEkcOjIG3huq9jIHTEg25nIGh1eeG6v3Qgw6FwLiBU4bu3IGzhu4cgdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIGtow6EgY2FvLCBwaOG6o24gw6FuaCBt4buZdCBi4buZIHBo4bqtbiDEkcOhbmcga+G7gyBkw6JuIHPhu5EgxJFhbmcg4bufIGdpYWkgxJFv4bqhbiBuZ3V5IGPGoSwgY8OzIGto4bqjIG7Eg25nIHRp4bq/biB0cmnhu4NuIHRow6BuaCDEkeG7mXQgcXXhu7UgdGjhu7FjIHPhu7EgbuG6v3Uga2jDtG5nIGPDsyBjw6FjIGJp4buHbiBwaMOhcCBjYW4gdGhp4buHcCBr4buLcCB0aOG7nWkgduG7gSBs4buRaSBz4buRbmcgdsOgIGRpbmggZMaw4buhbmcuIFPhu5EgbmfGsOG7nWkgxJHDoyBi4buLIHTEg25nIGh1eeG6v3Qgw6FwIChn4bqnbiAxLzMgbeG6q3UgbmdoacOqbiBj4bupdSkgY8WpbmcgbMOgIG3hu5l0IGNvbiBz4buRIMSRw6FuZyBsxrB1IMO9LCBjaG8gdGjhuqV5IHbhuqVuIMSR4buBIG7DoHkgbMOgIG3hu5l0IHRow6FjaCB0aOG7qWMgc+G7qWMga2jhu49lIGPhu5luZyDEkeG7k25nLg0KICANClRp4bq/cCB0aGVvLCBjaMO6bmcgdGEgc+G6vSB0w61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtIHbDoCB24bq9IGJp4buDdSDEkeG7kyB0csOybiDEkeG7gyB0aOG7gyBoaeG7h24gcsO1IGjGoW4gc+G7sSBwaMOibiBi4buRIHTGsMahbmcgxJHhu5FpIGdp4buvYSBjw6FjIG5ow7NtLg0KDQoNCiMjIyAqKjQuMy4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gaGFpIGJp4bq/biBCUF9IaXN0b3J5IHbDoCBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UqKg0KDQpDaMO6bmcgdGEgc+G6vSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgaGFpIGJp4bq/biBCUF9IaXN0b3J5IHbDoCBIYXNfU3Ryb2tlIMSR4buDIHhlbSB4w6l0IG3hu5FpIHF1YW4gaOG7hyBzxqEgYuG7mSBnaeG7r2EgY2jDum5nLg0KDQpgYGB7cn0NCiMgQuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCDEkeG7mXQgcXXhu7UNCnRhYmxlX2Nhb2h1eWV0YXBfQlBfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEJQX0hpc3RvcnksIGRhdGEkSGFzX1N0cm9rZSkNCg0KIyBUaMOqbSBow6BuZyB2w6AgY+G7mXQgdOG7lW5nDQphZGRtYXJnaW5zKHRhYmxlX2Nhb2h1eWV0YXBfQlBfSGlzdG9yeSkNCmBgYA0KDQotIEh5cGVydGVuc2lvbiAodGnhu4FuIHPhu60gY2FvIGh1eeG6v3Qgw6FwKSA6IDU2OSBi4buHbmggbmjDom4sIGPDsyDEkeG6v24gNTI4IGNhIMSR4buZdCBxdeG7tSDihpIgbmd1eSBjxqEgcuG6pXQgY2FvLg0KDQotIE5vcm1hbDogNzk2IGLhu4duaCBuaMOibiwgMjg2IGNhIMSR4buZdCBxdeG7tSDihpIgbmd1eSBjxqEgdHJ1bmcgYsOsbmguDQoNCi0gUHJlSHlwZXJ0ZW5zaW9uOiA2MjAgYuG7h25oIG5ow6JuLCAyMTggY2EgxJHhu5l0IHF14bu1IOKGkiBuZ3V5IGPGoSB0cnVuZyBiw6xuaC4NCg0KKipL4bq/dCBsdeG6rW46KiogdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iyBsacOqbiBxdWFuIHLDtSBy4buHdCDEkeG6v24ga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1Lg0KDQoNCsSQ4buDIGzDoG0gcsO1IGjGoW4gbmjhuq1uIMSR4buLbmggdHLDqm4sIGNow7puZyB0YSBz4bq9IHPhu60gZOG7pW5nIGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbS4NCg0KYGBge3J9DQojIENodXnhu4NuIGLhuqNuZyBjaMOpbyB0aMOgbmggZGF0YSBmcmFtZQ0KZGZfcGxvdF9CUF9IaXN0b3J5IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KY29sbmFtZXMoZGZfcGxvdF9CUF9IaXN0b3J5KSA8LSBjKCJCUF9IaXN0b3J5IiwgIkhhc19TdHJva2UiLCAiQ291bnQiKQ0KDQojIMSQ4bqjbSBi4bqjbyB0aOG7qSB04buxIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHRoZW8gbMOibSBzw6BuZw0KZGZfcGxvdF9CUF9IaXN0b3J5JEJQX0hpc3RvcnkgPC0gZmFjdG9yKGRmX3Bsb3RfQlBfSGlzdG9yeSRCUF9IaXN0b3J5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiSHlwZXJ0ZW5zaW9uIiwgIk5vcm1hbCINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCJQcmVIeXBlcnRlbnNpb24iKSkNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCB04bu3IGzhu4cNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkZl9wbG90X0JQX0hpc3RvcnksIGFlcyh4ID0gQlBfSGlzdG9yeSwgeSA9IENvdW50LCBmaWxsID0gSGFzX1N0cm9rZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIpICsgICMgdOG7tyBs4buHIHBo4bqnbiB0csSDbSB0aGVvIGPhu5l0DQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KCkpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiTm8iID0gImxpZ2h0Ymx1ZSIsICJZZXMiID0gInBpbmsiKSwNCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2jDtG5nIGNhbyBodXnhur90IMOhcCIsICJjYW8gaHV54bq/dCDDoXAiKSkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyDEkeG7mXQgcXXhu7UgdGhlbyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLIiwNCiAgICAgICB4ID0gInRp4buBbiBz4butIGh1eeG6v3Qgw6FwIMSRaeG7gXUgdHLhu4siLA0KICAgICAgIHkgPSAiVOG7tyBs4buHICglKSIsDQogICAgICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIGNhbyBodXnhur90IMOhcCIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMykgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDI1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCi0gQmnhu4N1IMSR4buTIGNobyB0aOG6pXkgdOG7tyBs4buHIMSR4buZdCBxdeG7tSB0xINuZyBk4bqnbiB0aGVvIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIMSRaeG7gXUgdHLhu4suIEPhu6UgdGjhu4M6DQoNCiAgLSBOaMOzbSBIeXBlcnRlbnNpb24gKCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBjYW8pIGfhuqduIG5oxrAgc+G6vSBt4bqvYyBi4buHbmggxJHhu5l0IHF14bu1IA0KICAtIE5ow7NtIE5vcm1hbCBjw7MgdOG7tyBs4buHIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7Uga2hv4bqjbmcgMzUlLg0KICAtIE5ow7NtIFByZUh5cGVydGVuc2lvbiAodGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwKSBjw7MgdOG7tyBs4buHIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7Uga2hv4bqjbmcgMzUlLg0KDQotIMSQw6FuZyBjaMO6IMO9LCBuaMOzbSBIeXBlcnRlbnNpb24gY8OzIHThu7cgbOG7hyDEkeG7mXQgcXXhu7UgZ+G6p24gbmjGsCB0dXnhu4d0IMSR4buRaS4NCg0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgIGPDsyBsacOqbiBxdWFuIHLDtSBy4buHdCDEkeG6v24gbmd1eSBjxqEgbeG6r2MgYuG7h25oIMSR4buZdCBxdeG7tSwgdHJvbmcgxJHDsyB0aeG7gW4gc+G7rSB0xINuZyBodXnhur90IMOhcCBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoSBjYW8gbmjhuqV0Lg0KDQoNCiMjIyAqKjQuMy4zLiBQaMOibiB0w61jaCBSZWxhdGl2ZSBSaXNrIGdp4buvYSBCUF9IaXN0b3J5IHbDoCBraOG6oyBuxINuZyBt4bqvYyBi4buHbmgqKg0KDQozw6FuIE5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSUiksIGzhuqV5IG5ow7NtIEh5cGVydGVuc2lvbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KYGBge3J9DQpyaXNrcmF0aW8odGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KYGBgDQoNClRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwgbmjDs20gSHlwZXJ0ZW5zaW9uIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSDEkeG7gyDEkcOhbmggZ2nDoSBuZ3V5IGPGoSDEkeG7mXQgcXXhu7Ug4bufIGPDoWMgbmjDs20gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAuIFZp4buHYyBwaMOibiB0w61jaCB04buJIHPhu5Egbmd1eSBjxqEgKFJlbGF0aXZlIFJpc2sg4oCTIFJSKSBjaG8gcGjDqXAgc28gc8Ohbmgga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1IGdp4buvYSBjw6FjIG5ow7NtIG3hu5l0IGPDoWNoIHRy4buxYyBxdWFuIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQoqKk5ow7NtIEh5cGVydGVuc2lvbiAodMSDbmcgaHV54bq/dCDDoXApKioNCg0KxJDGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IHbhu5tpIFJSID0gMS4wMC4NCg0KxJDDonkgbMOgIG5ow7NtIGPDsyB04bu3IGzhu4cgYmnhur9uIHBo4bulIHRodeG7mWMgKFllcykgY2FvIG5o4bqldCAoNTI4LzU2OSDiiYggOTIsOCUpLg0KDQoqKk5ow7NtIE5vcm1hbCAoaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nKSoqDQoNCkPDsyBSUiA9IDAuMzg3ICg5NSUgQ0k6IDAuMzUyIOKAkyAwLjQyNiksIG5naMSpYSBsw6Agbmd1eSBjxqEgbeG6r2MgYuG7h25oIMSR4buZdCBxdeG7tSDhu58gbmjDs20gbsOgeSBjaOG7iSBi4bqxbmcga2hv4bqjbmcgMzgsNyUgc28gduG7m2kgbmjDs20gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvLg0KDQpHacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKHAgPCAyLjJlLTE2KSwgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGNhby4NCg0KKipOaMOzbSBQcmVIeXBlcnRlbnNpb24gKHRp4buBbiB0xINuZyBodXnhur90IMOhcCkqKg0KDQpDw7MgUlIgPSAwLjM3OSAoOTUlIENJOiAwLjM0MCDigJMgMC40MjMpLCB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIG5ndXkgY8ahIG3huq9jIGLhu4duaCBjaOG7iSBi4bqxbmcgMzcsOSUgc28gduG7m2kgbmjDs20gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvLg0KDQpQLXZhbHVlIGPFqW5nIGPhu7FjIGvhu7Mgbmjhu48gKHAgPCAyLjJlLTE2KSwgY2jhu6luZyB04buPIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oIG3hur0uDQoNClThu5VuZyB0aOG7gywgS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBuaMOzbSB0xINuZyBodXnhur90IMOhcCBjw7MgeMOhYyBzdeG6pXQgeOG6o3kgcmEgYmnhur9uIHBo4bulIHRodeG7mWMgY2FvIHbGsOG7o3QgdHLhu5lpIHNvIHbhu5tpIGhhaSBuaMOzbSBjw7JuIGzhuqFpLiBD4bqjIG5ow7NtIGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZyB2w6AgdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIMSR4buBdSBjw7Mgbmd1eSBjxqEgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MsIHbhu5tpIG3hu6ljIGdp4bqjbSBraG/huqNuZyA2MiUgc28gduG7m2kgbmjDs20gdMSDbmcgaHV54bq/dCDDoXAuIFPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gKHAtdmFsdWUgY+G7sWMgbmjhu48pLCBjaOG7qW5nIHThu48gdHLhuqFuZyB0aMOhaSBodXnhur90IMOhcCBsw6AgbeG7mXQgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcg4bqjbmggaMaw4bufbmcgxJHhur9uIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQoNCiMjIyAqKjQuMy40LiBQaMOibiB0w61jaCBPZGQgUmF0aW8gZ2nhu69hIEJQX0hpc3RvcnkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCoqDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKHRhYmxlX2Nhb2h1eWV0YXBfQlBfSGlzdG9yeSkNCmBgYA0KDQpQaMOibiB0w61jaCBPZGRzIFJhdGlvIChPUikgbmjhurFtIHNvIHPDoW5oIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tSBnaeG7r2EgY8OhYyBuaMOzbSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLLCB24bubaSBuaMOzbSBIeXBlcnRlbnNpb24gxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91Lg0KDQoqKkh5cGVydGVuc2lvbiAodGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvKSoqOiBMw6AgbmjDs20gdGhhbSBjaGnhur91IChPUiA9IDEuMDApLg0KDQoqKk5vcm1hbCAoaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nKSoqOiBPUiA9IDAuMDQzOCAoOTUlIENJOiAwLjAzMDXigJMwLjA2MTQpLCBwIDwgMi4yZS0xNi4gTmjDs20gbsOgeSBjw7Mga2jhuqMgbsSDbmcgYuG7iyDEkeG7mXQgcXXhu7UgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MsIGNo4buJIGtob+G6o25nIDQsNCUgc28gduG7m2kgbmjDs20gdMSDbmcgaHV54bq/dCDDoXAuDQoNCioqUHJlSHlwZXJ0ZW5zaW9uICh0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXApKio6IE9SID0gMC4wNDI0ICg5NSUgQ0k6IDAuMDI5M+KAkzAuMDYwMCksIHAgPCAyLjJlLTE2LiBOaMOzbSB0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgY8WpbmcgY8OzIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCB0aOG6pXAgaMahbiBuaGnhu4F1LCBjaOG7iSBi4bqxbmcga2hv4bqjbmcgNCwyJSBzbyB24bubaSBuaMOzbSB0xINuZyBodXnhur90IMOhcC4NCg0KS+G6v3QgbHXhuq1uIHThu5VuZyB0aOG7gzoNCg0KTmjhu69uZyBuZ8aw4budaSBoaeG7h24gxJFhbmcg4bufIHTDrG5oIHRy4bqhbmcgdMSDbmcgaHV54bq/dCDDoXAgY8OzIHjDoWMgc3XhuqV0IG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7Ugdsaw4bujdCB0cuG7mWkgc28gduG7m2kgaGFpIG5ow7NtIGPDsm4gbOG6oWkuIEhhaSBuaMOzbSDigJxiw6xuaCB0aMaw4budbmfigJ0gdsOgIOKAnHRp4buBbiB0xINuZyBodXnhur90IMOhcOKAnSBjw7Mgbmd1eSBjxqEgdGjhuqVwIGjGoW4gcuG6pXQgbmhp4buBdSAoY2jhu4kga2hv4bqjbmcgNCUgc28gduG7m2kgbmjDs20gdMSDbmcgaHV54bq/dCDDoXApLiBT4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oIChwIDwgMC4wMDEpLg0KDQojIyMgKio0LjMuNS4gVGjhu5FuZyBrw6ogc3V5IGRp4buFbioqDQoNCkNow7puZyB0YSBz4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGkgYsOsbmggcGjGsMahbmcgxJHhu4Mga2nhu4NtIHRyYSBnaeG6oyB0aHV54bq/dCB24buBIHTDrW5oIMSR4buZYyBs4bqtcCBnaeG7r2EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tS4NCg0KIyMjIyAqKjQuMy41LjEuIEtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyoqDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KSOKCgCAoR2nhuqMgdGh1eeG6v3Qga2jDtG5nKTogdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7UgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KSOKCgSAoR2nhuqMgdGh1eeG6v3QgxJHhu5FpKTogdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7UgbMOgIGhhaSBiaeG6v24gcGjhu6UgdGh14buZYy4NCg0KYGBge3J9DQojIEtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZw0KY2hpc3EudGVzdCh0YWJsZV9jYW9odXlldGFwX0JQX0hpc3RvcnkpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCoqDQoNClxbDQpcY2hpXjIgPSA1MzIuMTYsXHF1YWQgZGYgPSAyLFxxdWFkIHBcdGV4dHstdmFsdWV9IDwgMi4yIFx0aW1lcyAxMF57LTE2fQ0KXF0NCg0KKipEaeG7hW4gZ2nhuqNpKioNCg0KR2nDoSB0cuG7iyBwIHLhuqV0IG5o4buPIChn4bqnbiBi4bqxbmcgMCksIGNobyB0aOG6pXkgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IFwoIEhfMCBcKSoqIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JS4gxJBp4buBdSBuw6B5IGNo4bupbmcgdOG7jyBy4bqxbmcgKip0aeG7gW4gc+G7rSBodXnhur90IMOhcCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu5tpIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCDEkeG7mXQgcXXhu7UqKi4NCg0KTsOzaSBjw6FjaCBraMOhYywgKipraOG6oyBuxINuZyBt4bqvYyBi4buHbmggxJHhu5l0IHF14bu1IHBo4bulIHRodeG7mWMgxJHDoW5nIGvhu4MgdsOgbyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCoqLCB04burIMSRw7MgY+G7p25nIGPhu5EgdmFpIHRyw7IgY+G7p2Egdmnhu4djIHRoZW8gZMO1aSBzw6F0IHbDoCBwaMOibiB04bqnbmcgbmd1eSBjxqEgZOG7sWEgdHLDqm4gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAuDQoNCiMjIyMgKio0LjMuNS4yLiBLaeG7g20gxJHhu4tuaCBoaeG7h3UgdOG7tyBs4buHKioNCg0KxJDhu4Mgc28gc8OhbmggdHLhu7FjIHRp4bq/cCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IGdp4buvYSBoYWkgbmjDs20sIGNow7puZyB0YSB0aeG6v24gaMOgbmgga2nhu4NtIMSR4buLbmggaGnhu4d1IGhhaSB04bu3IGzhu4cuDQoNCkfhu41pIHAxIGzDoCB04bu3IGzhu4cgxJHhu5l0IHF14bu1IOG7nyBuaMOzbSBjw7MgaHV54bq/dCDDoXAgY2FvLCBwMiBsw6AgdOG7tyBs4buHIMSR4buZdCBxdeG7tSDhu58gbmjDs20gY8OzIGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZywgcDMgbMOgIHThu7cgbOG7hyDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGPDsyB0aeG7gW4gaHV54bq/dCDDoXAuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmgqKg0KDQotIEjigoA6IHAxID0gcDIgPSBwMyAoVOG7tyBs4buHICDEkeG7mXQgcXXhu7Ug4bufIGJhIG5ow7NtIGzDoCBuaMawIG5oYXUpLg0KLSBI4oKBOiAgKFThu5NuIHThuqFpIMOtdCBuaOG6pXQgbeG7mXQgY+G6t3AgdOG7tyBs4buHIGtow6FjIG5oYXUgKS4NCg0KDQpgYGB7cn0NCiMgU+G7kSBjYSAgxJHhu5l0IHF14bu1IOG7nyBuaMOzbQ0Kc3VjY2Vzc19CUF9IaXN0b3J5IDwtIGMoNTI4LCAyODYsIDIxOCkNCg0KIyBU4buVbmcgc+G7kSBi4buHbmggbmjDom4gdHJvbmcgbeG7l2kgbmjDs20NCm5fQlBfSGlzdG9yeSA8LSBjKDU2OSwgNzk2LCA2MjApDQoNCiMgS2nhu4NtIMSR4buLbmggaGnhu4d1IHThu7cgbOG7hyBt4buZdCBwaMOtYQ0KcHJvcC50ZXN0KHN1Y2Nlc3NfQlBfSGlzdG9yeSwgbl9CUF9IaXN0b3J5LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29ycmVjdCA9IEZBTFNFKQ0KYGBgDQoNCi0gS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggaGFpIHThu7cgbOG7hyBjaG8gdGjhuqV5ICoqdOG7tyBs4buHICDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGLhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvICAocOKCgSA9IDkyLjc5JSkgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZyB2w6AgbmjDs20gdGnhu4FuIGh1eeG6v3Qgw6FwIGNhbyAgKHDigoIgPSAzNS45MiUgdsOgIHAzID0gMzUuMTYlKSoqLiBHacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKFwocCA9IDIuMiBcdGltZXMgMTBeey0xNn1cKSkgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIMO9IG5naMSpYSA1JS4NCg0KLSAgKipCw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgXCggSF8wIFwpKiosIGvhur90IGx14bqtbiBy4bqxbmcgdOG7tyBs4buHICDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIGPDsyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBjYW8gICoqY2FvIGjGoW4gbeG7mXQgY8OhY2ggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqIHNvIHbhu5tpIGhhaSBuaMOzbSBjw7JuIGzhuqFpLg0KDQojIyAqKjQuNCBUaOG7gyBUcuG6oW5nIHTDoWMgxJHhu5luZyDEkeG6v24gQuG7iyDEkeG7mXQgcXXhu7UqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmBgYA0KDQojIyMgKio0LjQuMSBC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCBjaG8gYmnhur9uIEJNSSoqDQoNCmBgYHtyfQ0KYWZmZWN0X2ZyZXEgPC0gdGFibGUoZGF0YSRCTUkpDQphZmZlY3RfcGVyY2VudCA8LSBwcm9wLnRhYmxlKGFmZmVjdF9mcmVxKSAqIDEwMA0KZGF0YS5mcmFtZShBZmZlY3RzID0gbmFtZXMoYWZmZWN0X2ZyZXEpLA0KICAgICAgICAgICBGcmVxdWVuY3kgPSBhcy5udW1lcmljKGFmZmVjdF9mcmVxKSwNCiAgICAgICAgICAgUGVyY2VudGFnZSA9IHJvdW5kKGFzLm51bWVyaWMoYWZmZWN0X3BlcmNlbnQpLCAxKSkNCmBgYA0KDQoNCioqVHLhu7FjIHF1YW4gaMOzYSoqDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShkcGx5cikNCg0KIyBOaOG6rXAgZOG7ryBsaeG7h3UNCmRhdGExIDwtIGRhdGEuZnJhbWUoDQogIEFmZmVjdHMgPSBjKCJOb3JtYWwiLCAiT3ZlcndlaWdodCIsICJVbmRlcndlaWdodCIpLA0KICBGcmVxdWVuY3kgPSBjKDcwMywgMTE4MiwgMTAwKSwNCiAgUGVyY2VudGFnZSA9IGMoMzUuNCwgNTkuNSwgNS4wKQ0KKQ0KDQojIFThuqFvIG5ow6NuIHBo4bqnbiB0csSDbQ0KZGF0YTEgPC0gZGF0YTEgJT4lDQogIG11dGF0ZShsYWJlbCA9IHBhc3RlMChQZXJjZW50YWdlLCAiJSIpKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuIHbhu5tpIG3DoHUgxJHhurlwDQpnZ3Bsb3QoZGF0YTEsIGFlcyh4ID0gIiIsIHkgPSBGcmVxdWVuY3ksIGZpbGwgPSBBZmZlY3RzKSkgKw0KICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5Iiwgd2lkdGggPSAxKSArDQogIGNvb3JkX3BvbGFyKCJ5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCANCiAgICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgc2l6ZSA9IDUpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygNCiAgICAiTm9ybWFsIiA9ICIjNjZjMmE1IiwgICAgICAgICMgeGFuaCBuZ+G7jWMNCiAgICAiT3ZlcndlaWdodCIgPSAiI2ZjOGQ2MiIsICAgICMgY2FtDQogICAgIlVuZGVyd2VpZ2h0IiA9ICIjOGRhMGNiIiAgICAjIHhhbmggZMawxqFuZyBuaOG6oXQNCiAgKSkgKw0KICBsYWJzKHRpdGxlID0gIkJp4buDdSDEkeG7kyB0csOybjogUGjDom4gYuG7kSB0aOG7gyB0cuG6oW5nIEJNSSIpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgc2l6ZSA9IDE2LCBmYWNlID0gImJvbGQiKSkNCg0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpCaeG7g3UgxJHhu5MgbcO0IHThuqMgcGjDom4gYuG7kSB0aOG7gyB0cuG6oW5nIChCTUkpIGPhu6dhIGPDoWMgYuG7h25oIG5ow6JuIMSR4bq/biBraMOhbSBjaG8gdGjhuqV5LCA1OS41JSBi4buHbmggbmjDom4gY8OzIGNo4buJIHPhu5EgQk1JIG7hurFtIHRyb25nIG5nxrDhu6FuZyBiw6xuaCB0aMaw4budbmcsIHRyb25nIGtoaSAzNSw0JSB0aHXhu5ljIG5ow7NtIHRo4burYSBjw6JuIChvdmVyd2VpZ2h0KSB2w6AgNSUgdGhp4bq/dSBjw6JuICh1bmRlcndlaWdodCkuDQoNCi0gTmdvw6BpIHJhIGNow7puZyB0YSBz4bq9IHRo4buxYyBoaeG7h24gdMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbSBjaG8gdOG7q25nIG5ow7NtIHbDoCB24bq9IGJp4buDdSDEkeG7kyB0csOybiB0aOG7gyBoaeG7h24gdOG7tyBs4buHIHBo4bqnbiB0csSDbSDhu58gY+G6oyAyIG5ow7NtIMSR4buRaSB0xrDhu6NuZyB0aGFtIGdpYSBraOG6o28gc8OhdCDEkeG7gyBzbyBzw6FuaCB0aGVvIHPhu5EgbMaw4bujbmcgdMawxqFuZyDEkeG7kWkuDQoNCg0KIyMjICoqNC40LjIuIFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBoYWkgYmnhur9uIFRo4buDIHRy4bqhbmcgdsOgIGto4bqjIG7Eg25nIGLhu4sgxJHhu5l0IHF14bu1KioNCg0KIyMjIyAqKjQuNC4yLjEuIELhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQpUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSB0YSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBnaeG7r2EgaGFpIGJp4bq/biBUaOG7gyBUcuG6oW5nIHbDoCBi4buLIMSR4buZdCBxdeG7tSBj4bunYSBi4buHbmggbmjDom4gdGhhbSBnaWEga2jhuqNvIHPDoXQgLiBC4bqjbmcgdOG6p24gc+G7kSBnacO6cCBjaMO6bmcgdGEgaGnhu4N1IHLDtSBoxqFuIHPhu7Ega2jDoWMgbmhhdSB0aGVvIDIgbmjDs20uDQoNCmBgYHtyfQ0KdGFibGVfZG90cXV5X2JtaSA8LSB0YWJsZShkYXRhJEhhc19TdHJva2UsIGRhdGEkQk1JKQ0KdGFibGVfZG90cXV5X2JtaQ0KYGBgDQogIA0KIyMjIyAqKjQuNC4yLjIuIFRy4buxYyBxdWFuIGjDs2EqKg0KDQpgYGB7cn0NCiMgQuG6o25nIGNow6lvDQoNCiMgQ2h1eeG7g24gdGjDoG5oIGRhdGEgZnJhbWUgxJHhu4MgZMO5bmcgduG7m2kgZ2dwbG90DQpkZl9wbG90IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfZG90cXV5X2JtaSkNCmNvbG5hbWVzKGRmX3Bsb3QpIDwtIGMoIkhhc19TdHJva2UiLCAiQk1JIiwgIkNvdW50IikNCg0KIyBCaeG7g3UgxJHhu5MNCmdncGxvdChkZl9wbG90LCBhZXMoeCA9IEJNSSwgeSA9IENvdW50LCBmaWxsID0gSGFzX1N0cm9rZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGxhYnModGl0bGUgPSAiVMOsbmggdHLhuqFuZyBi4buLIMSR4buZdCBxdeG7tSB0aGVvIHRo4buDIHRy4bqhbmciLA0KICAgICAgIHggPSAiVGjhu4MgVHLhuqFuZyAoQk1JKSIsDQogICAgICAgeSA9ICJT4buRIGzGsOG7o25nIGLhu4sgxJHhu5l0IHF14bu1IiwNCiAgICAgICBmaWxsID0gIsSR4buZdCBxdeG7tSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGAgDQoNCkJp4buDdSDEkeG7kyB0csOqbiBtaW5oIGjhu41hIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBjaOG7iSBz4buRIGto4buRaSBjxqEgdGjhu4MgKEJNSSkgdsOgIG5ndXkgY8ahIMSR4buZdCBxdeG7tSB0cm9uZyBt4bqrdSBk4buvIGxp4buHdSBiYW8gZ+G7k20gY8OhYyBi4buHbmggbmjDom4gdOG7qyAxOCDEkeG6v24gODQgdHXhu5VpLiBL4bq/dCBxdeG6oyB0aOG7gyBoaeG7h24gbmjGsCBzYXU6DQoNCi0gTmjDs20gT3ZlcndlaWdodCAodGjhu6thIGPDom4pIGNoaeG6v20gdOG7tyB0cuG7jW5nIGzhu5tuIG5o4bqldCB0cm9uZyB0b8OgbiBi4buZIG3huqt1IHbDoCBjw7Mgc+G7kSBsxrDhu6NuZyBuZ8aw4budaSBi4buLIMSR4buZdCBxdeG7tSBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuaMOzbSBraMO0bmcgYuG7iyAoa2hv4bqjbmcgNjUwIHNvIHbhu5tpIDUzMiB0csaw4budbmcgaOG7o3ApLiBQaMOhdCBoaeG7h24gbsOgeSBn4bujaSDDvSBy4bqxbmcgdMOsbmggdHLhuqFuZyB0aOG7q2EgY8OibiBjw7MgdGjhu4MgbMOgIG3hu5l0IHnhur91IHThu5EgbGnDqm4gcXVhbiBjaOG6t3QgY2jhur0gxJHhur9uIG5ndXkgY8ahIMSR4buZdCBxdeG7tS4NCg0KLSDhu54gbmjDs20gTm9ybWFsIEJNSSAoY8OibiBu4bq3bmcgYsOsbmggdGjGsOG7nW5nKSwgc+G7kSBsxrDhu6NuZyBuZ8aw4budaSBraMO0bmcgYuG7iyDEkeG7mXQgcXXhu7UgKDM2OCkgY2jhu4kgbmjhu4luaCBoxqFuIG5ow7NtIGLhu4sgxJHhu5l0IHF14bu1ICgzMzUpIG3hu5l0IGPDoWNoIGtow7RuZyDEkcOhbmcga+G7gy4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmdheSBj4bqjIHRyb25nIG5ow7NtIGPDsyB0aOG7gyB0cuG6oW5nIGLDrG5oIHRoxrDhu51uZywgbmd1eSBjxqEgxJHhu5l0IHF14bu1IHbhuqtuIHThu5NuIHThuqFpIHbDoCBraMO0bmcgdGjhu4MgeGVtIG5o4bq5Lg0KDQotIE5ow7NtIFVuZGVyd2VpZ2h0ICh0aGnhur91IGPDom4pIGPDsyBxdXkgbcO0IG3huqt1IG5o4buPIG5o4bqldCB0cm9uZyBiYSBuaMOzbSwgduG7m2kgc+G7kSBsxrDhu6NuZyBi4buLIMSR4buZdCBxdeG7tSAoNDcpIHbDoCBraMO0bmcgYuG7iyAoNTMpIGfhuqduIG5oxrAgdMawxqFuZyDEkcawxqFuZy4gVHV5IG5oacOqbiwgZG8gc+G7kSBxdWFuIHPDoXQgdGjhuqVwLCBraOG6oyBuxINuZyBraMOhaSBxdcOhdCBow7NhIGvhur90IHF14bqjIHThu6sgbmjDs20gbsOgeSBsw6AgaOG6oW4gY2jhur8gdsOgIGPhuqduIMSRxrDhu6NjIHRo4bqtbiB0cuG7jW5nIGtoaSDEkcawYSByYSBuaOG6rW4gxJHhu4tuaC4NCg0KVOG7lW5nIHRo4buDLCBiaeG7g3UgxJHhu5MgY2hvIHRo4bqleSB4dSBoxrDhu5tuZyByw7UgcuG7h3QgcuG6sW5nIHTDrG5oIHRy4bqhbmcgdGjhu6thIGPDom4gY8OzIGxpw6puIHF1YW4gxJHhur9uIHThu7cgbOG7hyDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gdHJvbmcgcXXhuqduIHRo4buDIG5naGnDqm4gY+G7qXUuIFRyb25nIGtoaSDEkcOzLCBk4buvIGxp4buHdSB04burIG5ow7NtIHRoaeG6v3UgY8OibiBxdcOhIGjhuqFuIGNo4bq/IMSR4buDIMSRxrBhIHJhIGvhur90IGx14bqtbiDEkcOhbmcgdGluIGPhuq15IHbhu4EgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdGhp4bq/dSBjw6JuIHbDoCBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UuDQoNCiMjIyAqKjQuNC4zLiBQaMOibiB0w61jaCBSZWxhdGl2ZSBSaXNrIGdp4buvYSBUaOG7gyBUcuG6oW5nIHbDoCBraOG6oyBuxINuZyBC4buLIMSR4buZdCBxdeG7tSoqDQoNCmBgYHtyfQ0KbGlicmFyeShlcGl0b29scykNCmBgYA0KDQogVHJvbmcgcGjhuqduIG7DoHksIHTDoWMgZ2nhuqMgc+G6vSB0aOG7sWMgaGnhu4duIHTDrW5oIFJlbGF0aXZlIFJpc2sgbmjhurFtIHBow6JuIHTDrWNoIHPhu7Eg4bqjbmggaMaw4bufbmcgY+G7p2EgMyAgbmjDs20gdGjhu4MgdHLhuqFuZyBsw6puIGto4bqjIG7Eg25nICAgxJHhu5l0IHF14bu1IGPhu6dhIGPDoWMgYuG7h25oIG5ow6JuIHRoYW0gZ2lhIGto4bqjbyBzw6F0LiBDaMO6bmcgdGEgc+G6vSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUlIpLCBs4bqleSBuaMOzbSBOb3JtYWwgKELDrG5oIFRoxrDhu51uZykgbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5ENCnRhYiA8LSBtYXRyaXgoYygzMzUsMzY4LCAgICMgTm9ybWFsOiBZZXMsIE5vDQogICAgICAgICAgICAgICAgNjUwLDUzMiwgICAjIE92ZXJ3ZWlnaHQ6IFllcywgTm8NCiAgICAgICAgICAgICAgICA0Nyw1MyksICAgICMgVW5kZXJ3ZWlnaHQ6IFllcywgTm8NCiAgICAgICAgICAgICAgbnJvdz0zLCBieXJvdz1UUlVFKQ0KDQojIMSQ4bq3dCB0w6puIGjDoG5nIHbDoCBj4buZdA0Kcm93bmFtZXModGFiKSA8LSBjKCJOb3JtYWwiLCAiT3ZlcndlaWdodCIsICJVbmRlcndlaWdodCIpDQpjb2xuYW1lcyh0YWIpIDwtIGMoIlllcyIsICJObyIpDQoNCiMgVMOtbmggUmlzayBSYXRpbw0KcnJfcmVzdWx0IDwtIHJpc2tyYXRpbyh0YWIsIHJldj0iY29sdW1ucyIpDQoNCiMgWGVtIGvhur90IHF14bqjDQpwcmludChycl9yZXN1bHQpDQpgYGANCg0KDQpQaMOibiB0w61jaCBSaXNrIFJhdGlvIChSUikga2jhurNuZyDEkeG7i25oIHF1YW4gc8OhdCB0csOqbiBraGkgbmjDs20gdGjhu6thIGPDom4gY8OzIFJSID0gMSwxNTQgKDk1JSBDSTogMSwwNTEg4oCTIDEsMjY3OyBwIOKJiCAwLDAwMyksIG5naMSpYSBsw6Agbmd1eSBjxqEgYuG7iyDEkeG7mXQgcXXhu7Ug4bufIG5ow7NtIG7DoHkgY2FvIGjGoW4ga2hv4bqjbmcgMTUsNCUgc28gduG7m2kgbmjDs20gYsOsbmggdGjGsOG7nW5nIHbDoCBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSB0aGnhur91IGPDom4gY8OzIFJSID0gMCw5ODYgKDk1JSBDSTogMCw3ODkg4oCTIDEsMjMyOyBwIOKJiCAwLDkyOCksIHRo4buDIGhp4buHbiBuZ3V5IGPGoSBi4buLIHTGsMahbmcgxJHGsMahbmcgbmjDs20gYsOsbmggdGjGsOG7nW5nIHbDoCBraMO0bmcgxJHhuqF0IMSRxrDhu6NjIG3hu6ljIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KS+G6v3QgcXXhuqMgdHLDqm4gY+G7p25nIGPhu5EgZ2nhuqMgdGh1eeG6v3QgcuG6sW5nIHRo4burYSBjw6JuIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIHF1YW4gdHLhu41uZyDEkeG7kWkgduG7m2kgc+G7sSB4deG6pXQgaGnhu4duIMSR4buZdCBxdeG7tS4gVHJvbmcga2hpIMSRw7MsIHRoaeG6v3UgY8OibiBkxrDhu51uZyBuaMawIGtow7RuZyBsw6BtIHRoYXkgxJHhu5VpIMSRw6FuZyBr4buDIG5ndXkgY8ahIGLhu4sgYuG7h25oLiBOaOG7r25nIHBow6F0IGhp4buHbiBuw6B5IHBow7kgaOG7o3AgduG7m2kgbmhp4buBdSBuZ2hpw6puIGPhu6l1IGThu4tjaCB04buFIGjhu41jIHRyxrDhu5tjIMSRw6J5LCB24buRbiDEkcOjIGNo4buJIHJhIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHTDrG5oIHRy4bqhbmcgdGjhu6thIGPDom4sIGLDqW8gcGjDrCB2w6Agc+G7sSBnaWEgdMSDbmcgdOG7tyBs4buHICBjw6FjIGLhu4duaCBsw70gdGltIG3huqFjaCwgxJHhurdjIGJp4buHdCBsw6AgxJHhu5l0IHF14bu1Lg0KDQoNCiMjIyAqKjQuNC40LiBQaMOibiB0w61jaCBPZGQgUmF0aW8gZ2nhu69hIEJNSSB2w6AgYuG7iyDEkeG7mXQgcXXhu7UqKg0KDQpgYGB7cn0NCm9yX3Jlc3VsdCA8LSBvZGRzcmF0aW8odGFiLCByZXY9ImNvbHVtbnMiKQ0KIyBYZW0ga+G6v3QgcXXhuqMNCnByaW50KG9yX3Jlc3VsdCkNCmBgYA0KDQpQaMOibiB0w61jaCBPZGRzIFJhdGlvIChPUikgbmjhurFtIHNvIHPDoW5oIGto4bqjIG7Eg25nIGLhu4sgxJHhu5l0IHF14bu1IGdp4buvYSBjw6FjIG5ow7NtIFRo4buDIFRy4bqhbmcsIHbhu5tpIG5ow7NtIE5vcm1hbCDEkcaw4bujYyBjaOG7jW4gbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBPZGRzIFJhdGlvIChPUikgY2jhu4kgcmEgcuG6sW5nIG5ow7NtIHRo4burYSBjw6JuIGPDsyBraOG6oyBuxINuZyBi4buLIMSR4buZdCBxdeG7tSBjYW8gaMahbiBuaMOzbSBiw6xuaCB0aMaw4budbmcgduG7m2kgT1IgPSAxLDM0MSAoOTUlIENJOiAxLDExMyDigJMgMSw2MTk7IHAg4omIIDAsMDAzKS4gxJBp4buBdSBuw6B5IMSR4buTbmcgbmdoxKlhIHbhu5tpIHZp4buHYyBuaOG7r25nIG5nxrDhu51pIHRodeG7mWMgbmjDs20gdGjhu6thIGPDom4gY8OzIG9kZHMgYuG7iyDEkeG7mXQgcXXhu7UgbOG7m24gaMahbiBraG/huqNuZyAzNCwxJSBzbyB24bubaSBuaMOzbSBiw6xuaCB0aMaw4budbmcsIHbDoCBz4buxIGtow6FjIGJp4buHdCBuw6B5IG1hbmcgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQpOZ8aw4bujYyBs4bqhaSwgbmjDs20gdGhp4bq/dSBjw6JuIGPDsyBPUiA9IDAsOTc1ICg5NSUgQ0k6IDAsNjM5IOKAkyAxLDQ4NDsgcCDiiYggMCw5MjgpLCB0aOG7gyBoaeG7h24gcuG6sW5nIG9kZHMgIMSR4buZdCBxdeG7tSDhu58gbmjDs20gbsOgeSB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIG5ow7NtIGLDrG5oIHRoxrDhu51uZyB2w6Aga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQpL4bq/dCBxdeG6oyBuw6B5IGPhu6duZyBj4buRIG5o4bqtbiDEkeG7i25oIHLhurFuZyB0aOG7q2EgY8OibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBsacOqbiBxdWFuIG3huqFuaCDEkeG6v24gc+G7sSBnaWEgdMSDbmcga2jhuqMgbsSDbmcgIMSR4buZdCBxdeG7tSwgdHJvbmcga2hpIHTDrG5oIHRy4bqhbmcgdGhp4bq/dSBjw6JuIGtow7RuZyBjaG8gdGjhuqV5IOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDLiBYdSBoxrDhu5tuZyBuw6B5IHBow7kgaOG7o3AgduG7m2kgbmhp4buBdSBuZ2hpw6puIGPhu6l1IGThu4tjaCB04buFIGjhu41jIHRyxrDhu5tjIMSRw6J5LCB24buRbiDEkcOjIGNo4buJIHJhIHLhurFuZyB0w61jaCBsxal5IG3hu6EgY8ahIHRo4buDLCDEkeG6t2MgYmnhu4d0IGzDoCBt4buhIG7hu5lpIHThuqFuZywgY8OzIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyB2aeG7h2MgbMOgbSB0xINuZyBuZ3V5IGPGoSBi4buLIMSR4buZdCBxdeG7tSB0aMO0bmcgcXVhIGPDoWMgY8ahIGNo4bq/IGxpw6puIHF1YW4gxJHhur9uIHLhu5FpIGxv4bqhbiBjaHV54buDbiBow7NhIHbDoCDEkWnhu4F1IGjDsmEgbeG6oWNoIG3DoXUuDQoNCiMjICoqUEjDgk4gVMONQ0ggxJBBIEJJ4bq+TioqDQoNClNhdSBraGkgxJHDoyB0aOG7sWMgaGnhu4duIGPDoWMgcGjDom4gdMOtY2ggxJHGoW4gYmnhur9uIHbDoCBuaOG6rW4gdGjhuqV5IHLhurFuZyBjw6FjIHnhur91IHThu5EgQk1JLCBTbW9raW5nX1N0YXR1cywgRmFtaWx5X0hpc3RvcnkgdsOgIEJQX0hpc3RvcnkgxJHhu4F1IGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIGto4bqjIG7Eg25nIGLhu4sgxJHhu5l0IHF14bu1IChIYXNTdHJva2UpLCBixrDhu5tjIHRp4bq/cCB0aGVvIGzDoCB4w6J5IGThu7FuZyBt4buZdCBtw7QgaMOsbmggaOG7k2kgcXV5IMSRYSBiaeG6v24uDQoNCiMjIyAqKjQuNSBN4bulYyB0acOqdToqKg0KDQotIE3hu6VjIHRpw6p1IGPhu6dhIHBow6JuIHTDrWNoIMSRYSBiaeG6v24gbMOgIMSR4buDIMSRw6FuaCBnacOhIHTDoWMgxJHhu5luZyDEkeG7k25nIHRo4budaSBj4bunYSBuaGnhu4F1IGJp4bq/biDEkeG7mWMgbOG6rXAgbMOqbiBt4buZdCBiaeG6v24gcGjhu6UgdGh14buZYy4gxJBp4buBdSBuw6B5IGNobyBwaMOpcCBjaMO6bmcgdGE6DQoNCiAgLSBYw6FjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGThu7EgYsOhbyBt4bqhbmggbmjhuqV0IGNobyBraOG6oyBuxINuZyBt4bqvYyBi4buHbmguDQogIC0gxJDDoW5oIGdpw6Eg4bqjbmggaMaw4bufbmcgY+G7p2EgbeG7mXQgYmnhur9uIHNhdSBraGkgxJHDoyAia2nhu4NtIHNvw6F0IiBob+G6t2MgIsSRaeG7gXUgY2jhu4luaCIgY2hvIGPDoWMgYmnhur9uIGtow6FjIHRyb25nIG3DtCBow6xuaC4gxJBp4buBdSBuw6B5IGdpw7pwIGxv4bqhaSBi4buPIGPDoWMgeeG6v3UgdOG7kSBnw6J5IG5oaeG7hXUgKGNvbmZvdW5kZXJzKS4NCiAgLSBYw6J5IGThu7FuZyBt4buZdCBtw7QgaMOsbmggZOG7sSBiw6FvIHRvw6BuIGRp4buHbiBoxqFuLg0KDQojIyMjICoqNC41LjEgTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggxJHhu5FpIHbhu5tpIGThu68gbGnhu4d1IG5o4buLIHBow6JuKioNCg0KYGBge3J9DQojIExpbmVhciBQcm9iYWJpbGl0eSBNb2RlbA0KZGF0YSRTdHJva2VfYmluIDwtIGlmZWxzZShkYXRhJEhhc19TdHJva2UgPT0gIlllcyIsIDEsIDApDQptb2RlbF9scG0gPC0gbG0oU3Ryb2tlX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIEZhbWlseV9IaXN0b3J5LCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfbHBtKQ0KYGBgDQoNCiQkDQpcaGF0e1xwaX0gPSAwLjY2NDINCisgMC4wNjg0NCBcY2RvdCBcdGV4dHtCTUl9X1x0ZXh0e092ZXJ3ZWlnaHR9IA0KKyAwLjAzNjcwIFxjZG90IFx0ZXh0e0JNSX1fXHRleHR7VW5kZXJ3ZWlnaHR9IA0KKyAwLjI3NTgxIFxjZG90IFx0ZXh0e1Ntb2tpbmdfU3RhdHVzfV9cdGV4dHtTbW9rZXJ9IA0KLSAwLjU3MTE0IFxjZG90IFx0ZXh0e0JQX0hpc3Rvcnl9X1x0ZXh0e05vcm1hbH0gXFwNCi0gMC41NzEwNSBcY2RvdCBcdGV4dHtCUF9IaXN0b3J5fV9cdGV4dHtQcmVoeXBlcnRlbnNpb259IA0KKyAwLjI4NTI4IFxjZG90IFx0ZXh0e0ZhbWlseV9IaXN0b3J5fV9cdGV4dHtZZXN9IA0KJCQNCg0KIyMjIyMgKio0LjUuMS4xIMSQw6FuaCBnacOhIHThu5VuZyBxdWFuIG3DtCBow6xuaCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgYuG7iyDEkeG7mXQgcXXhu7UgIFwoIFxoYXR7XHBpfSBcKSBj4bunYSBi4buHbmggbmjDom4gZOG7sWEgdHLDqm4gY8OhYyB54bq/dSB04buROiB0aOG7gyB0cuG6oW5nLCBow7p0IHRodeG7kWMsIHRp4buBbiBz4butIGdpYSDEkcOsbmgsIHbDoCB0aeG7gW4gc+G7rSBodXnhur90IMOhcC4NCg0KLSBCaeG6v24gcGjhu6UgdGh14buZYzogYFN0cm9rZV9iaW5gIChiaeG6v24gbmjhu4sgcGjDom46IGPDsy9raMO0bmcgYuG7iykuDQoNCi0gQmnhur9uIMSR4buZYyBs4bqtcDogYEJNSWAsIGBTbW9raW5nX1N0YXR1c2AsIGBCUF9IaXN0b3J5YCwgYEZhbWlseV9IaXN0b3J5YC4NCg0KIyMjIyMgKio0LjUuMS4yLiBDaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oKioNCg0KLSBI4buHIHPhu5EgeMOhYyDEkeG7i25oOiBcKCBSXjIgPSAwLjQxNTQgXCkNCi0gSOG7hyBz4buRIHjDoWMgxJHhu4tuaCBoaeG7h3UgY2jhu4luaDogXCggUl4yX3thZGp9ID0gMC40MTM3IFwpDQotIFNhaSBz4buRIGNodeG6qW4gcGjhuqduIGTGsDogMC4zODI3DQotIFRo4buRbmcga8OqIEY6IFwoIEYgPSAyMzQuMyBcKSwgduG7m2kgXCggcCA8IDIuMiBcdGltZXMgMTBeey0xNn0gXCkNCg0KbcO0IGjDrG5oIGdp4bqjaSB0aMOtY2ggxJHGsOG7o2Mga2hv4bqjbmcgNDEuNSUgYmnhur9uIHRoacOqbiBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYyAoU3Ryb2tlX2JpbikuIEtp4buDbSDEkeG7i25oIEYgQ0hPIFRI4bqkWSBtw7QgaMOsbmggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0b8OgbiBj4bulYywgdOG7qWMgw610IG5o4bqldCBt4buZdCBiaeG6v24gxJHhu5ljIGzhuq1wIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24ga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1Lg0KDQojIyMjIyAqKjQuNS4xLjMuIMOdIG5naMSpYSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAqKg0KDQotIEJNSU92ZXJ3ZWlnaHQ6IEjhu4cgc+G7kSBkxrDGoW5nICgwLjkzMDcsIHAgPCAwLjAwMSkg4oaSIHRo4burYSBjw6JuIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgxJHhu5l0IHF14bu1IGtob+G6o25nIDkuMyDEkWnhu4NtICUgc28gduG7m2kgQk1JIGLDrG5oIHRoxrDhu51uZy4NCg0KLSBCTUlVbmRlcndlaWdodDogS2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAgPSAwLjM3KS4NCg0KLSBTbW9raW5nX1N0YXR1czogSOG7hyBz4buRIDAuMjc1ODEgKHAgPCAwLjAwMSkg4oaSIGjDunQgdGh14buRYyBjw7MgeMOhYyBzdeG6pXQgxJHhu5l0IHF14bu1IGNhbyBoxqFuIDI3LjYlLg0KDQotIEJQX0hpc3Rvcnk6DQoNCiAgLSBOb3JtYWw6IEjhu4cgc+G7kSAtMC41NzExNCAocCA8IDAuMDAxKSDihpIgbmjDs20gaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nIGPDsyB4w6FjIHN14bqldCDEkeG7mXQgcXXhu7UgdGjhuqVwIGjGoW4gc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91KS4NCg0KICAtIFByZWh5cGVydGVuc2lvbjogVMawxqFuZyB04buxLCBo4buHIHPhu5EgLTAuNTcxMDUgKHAgPCAwLjAwMSkg4oaSIG5ow7NtIHRp4buBbiB0xINuZyBodXnhur90IMOhcCBjxaluZyBjw7MgeMOhYyBzdeG6pXQgdMawxqFuZyB04buxLg0KDQotIEZhbWlseV9IaXN0b3J5WWVzOiBI4buHIHPhu5EgMC4yODUyOCAocCA8IDAuMDAxKSDihpIgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIMSR4buZdCBxdeG7tSBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IMSR4buZdCBxdeG7tS4NCg0KIyMjIyMgKio0LjUuMS40LiBL4bq/dCBsdeG6rW4qKg0KDQotIE3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCAoTFBNKSBjaG8gdGjhuqV5IGPDoWMgeeG6v3UgdOG7kSB0aOG7q2EgY8OibiwgaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCwgdsOgIHRp4buBbiBz4butIGdpYSDEkcOsbmggxJHhu4F1IGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24geMOhYyBzdeG6pXQgxJHhu5l0IHF14bu1Lg0KDQotIFR1eSBuaGnDqm4sIGRvIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBuaOG7iyBwaMOibiwgTFBNIGtow7RuZyBwaOG6o2kgbMOgIG3DtCBow6xuaCB04buRaSDGsHU6IG7DsyBjw7MgdGjhu4MgZOG7sSBiw6FvIHjDoWMgc3XhuqV0IG5nb8OgaSBraG/huqNuZyBbMCwxXSB2w6AgdmkgcGjhuqFtIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4gY+G7p2Egc2FpIHPhu5ENCg0KLSBD4bqnbiB0aeG6v3AgdOG7pWMgc28gc8OhbmggduG7m2kgY8OhYyBtw7QgaMOsbmggbmjhu4sgcGjDom4gbmjGsCAqKmxvZ2l0KiosICoqcHJvYml0KiosIHbDoCAqKmNsb2dsb2cqKiDEkeG7gyB4w6FjIMSR4buLbmggbcO0IGjDrG5oIHBow7kgaOG7o3AgaMahbi4NCg0KIyMjIyAqKjQuNS4yIE3DtCBow6xuaCBMb2dpdCoqDQoNCmBgYHtyfQ0KIyBMb2dpdA0KbW9kZWxfbG9naXQgPC0gZ2xtKFN0cm9rZV9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyBGYW1pbHlfSGlzdG9yeSwNCiAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbF9sb2dpdCkNCmBgYA0KDQojIyMjIyAqKjQuNS4yLjEuIMSQw6FuaCBnacOhIHThu5VuZyBxdWFuIG3DtCBow6xuaCBsb2dpdCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgKGxvZ2l0KSDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgdMOhaSBwaMOhdCBcKCBccGkgXCkgY+G7p2EgYuG7h25oIG5ow6JuIHR1eeG6v24gZ2nDoXAgYmnhu4d0IGjDs2EsIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuIGBTdHJva2VfYmluYCAoMDoga2jDtG5nIGPDsyBraOG6oyBuxINuZywgMTogY8OzIGto4bqjIG7Eg25nKS4NCg0KQ8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIMSRxrDhu6NjIMSRxrBhIHbDoG8gbcO0IGjDrG5oIGfhu5NtOiANCg0KLSBgQk1JYCAoVGjhu4MgVHLhuqFuZyksDQotIGBTbW9raW5nX1N0YXR1c2AgKGjDunQgdGh14buRYyBoYXkga2jDtG5nKSwNCi0gYEJQX0hpc3RvcnlgICh0aeG7gW4gc+G7rSBodXnhur90IMOhcCksDQotIGBGYW1pbHlfSGlzdG9yeWAgKGdpYSDEkcOsbmggY8OzIG3huq9jIGLhu4duaCBraMO0bmcpLA0KDQojIyMjIyAqKjQuNS4yLjEgQ2jhuqV0IGzGsOG7o25nIG3DtCBow6xuaCoqDQoNCi0gU2FpIHPhu5EgY2h14bqpbiAoRGlzcGVyc2lvbik6IDEgIA0KLSDEkOG7mSBs4buHY2ggZMawIChSZXNpZHVhbCBkZXZpYW5jZSk6IDE2OTguNCB0csOqbiAxOTc4IGLhuq1jIHThu7EgZG8gIA0KLSDEkOG7mSBs4buHY2ggZ+G7kWMgKE51bGwgZGV2aWFuY2UpOiAyNzQ4LjYgdHLDqm4gMTk4NCBi4bqtYyB04buxIGRvICANCi0gQ2jDqm5oIGzhu4djaCBkZXZpYW5jZTogXCggXERlbHRhIEQgPSAyNzQ4LjYgLSAxNjk4LjQgPSAxMDUwLjIgXCkgduG7m2kgXCgxOTg0IC0gMTk3OCA9IDZcKSBi4bqtYyB04buxIGRvICANCi0gQUlDID0gMTcxMi40ICANCg0K4oaSICoqTcO0IGjDrG5oIGxvZ2l0IGPhuqNpIHRoaeG7h24gxJHDoW5nIGvhu4Mgc28gduG7m2kgbcO0IGjDrG5oIHLhu5duZyoqLCB0aOG7gyBoaeG7h24gcXVhIGRldmlhbmNlIGdp4bqjbSBt4bqhbmguIEFJQyB0aOG6pXAgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIHTGsMahbmcgxJHhu5FpIHThu5F0IHbhu5tpIGThu68gbGnhu4d1IG5o4buLIHBow6JuLg0KDQotLS0NCg0KIyMjIyMgKio0LjUuMi4zLiBQaMawxqFuZyB0csOsbmggbcO0IGjDrG5oKioNCg0KTcO0IGjDrG5oIGxvZ2l0IGPDsyBk4bqhbmcgdOG7lW5nIHF1w6F0Og0KDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpID0gXGJldGFfMCArIFxiZXRhXzEgXGNkb3QgXHRleHR7Qk1JfSArIFxiZXRhXzIgXGNkb3QgXHRleHR7U21va2luZ1xfU3RhdHVzfSArIFxiZXRhXzMgXGNkb3QgXHRleHR7QlBcX0hpc3Rvcnl9ICsgXGJldGFfNCBcY2RvdCBcdGV4dHtGYW1pbHlcX0hpc3Rvcnl9DQpcXQ0KDQpUaGF5IGPDoWMgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZzoNCg0KXFsNClxsb2dcbGVmdChcZnJhY3tccGl9ezEgLSBccGl9XHJpZ2h0KSA9IDEuMzYzMSANCisgMC40Njc2IFxjZG90IFx0ZXh0e0JNSX1fe092ZXJ3ZWlnaHR9DQorIDAuMjQ4MyBcY2RvdCBcdGV4dHtCTUl9X3tVbmRlcndlaWdodH0NCisgMS44NzgxIFxjZG90IFx0ZXh0e1Ntb2tpbmdcX1N0YXR1c31fe1Ntb2tlcn0NCi0gMy45NjE0IFxjZG90IFx0ZXh0e0JQXF9IaXN0b3J5fV97Tm9ybWFsfQ0KLSAzLjk1NTMgXGNkb3QgXHRleHR7QlBcX0hpc3Rvcnl9X3tQcmVoeXBlcnRlbnNpb259DQorIDEuOTc5NSBcY2RvdCBcdGV4dHtGYW1pbHlcX0hpc3Rvcnl9X3tZZXN9DQpcXQ0KDQotLS0NCg0KIyMjIyMgKio0LjUuMi40LiBOaOG6rW4geMOpdCBjaGkgdGnhur90KioNCg0KKipU4bu3IHPhu5EgT2RkcyAoT2RkcyBSYXRpbyk6KioNCg0KYGBge3J9DQpleHAoY29lZihtb2RlbF9sb2dpdCkpDQpgYGANCg0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICAgICAgfCBI4buHIHPhu5EgXCggXGJldGEgXCkgfCBPUiAob2RkcyByYXRpbykgfCBHacOhIHRy4buLIHAgICAgfCDDnSBuZ2jEqWEgdGjhu5FuZyBrw6ogfCBEaeG7hW4gZ2nhuqNpIMO9IG5naMSpYSB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IEJNSU92ZXJ3ZWlnaHQgICAgICAgICAgfCAwLjQ2NzYgICAgICAgICAgIHwgMS41OTYgICAgICAgICAgfCAwLjAwMDI5OCAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmfGsOG7nWkgdGjhu6thIGPDom4gY8OzIG9kZHMgxJHhu5l0IHF14bu1IGNhbyBoxqFuIH41Ljk2IGzhuqduIHNvIHbhu5tpIG5ow7NtIEJNSSBiw6xuaCB0aMaw4budbmcuIHwNCnwgQk1JVW5kZXJ3ZWlnaHQgICAgICAgICB8IDAuMjQ4MyAgICAgICAgICAgfCAxLjI4MiAgICAgICAgICB8IDAuMzg2ICAgICAgICB8IEtow7RuZyAgICAgICAgICAgfCDhuqJuaCBoxrDhu59uZyBraMO0bmcgxJHDoW5nIGvhu4MuIHwNCnwgU21va2luZ19TdGF0dXMgIHwgMS44NzgxICAgICAgICAgICB8IDYuNTM5ICAgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5nxrDhu51pIGjDunQgdGh14buRYyBjw7Mgb2RkcyBraOG6oyBuxINuZyDEkeG7mXQgcXXhu7UgY2FvIGfhuqVwIH4gNi41IGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBow7p0LiB8DQp8IEJQX0hpc3RvcnlfTm9ybWFsICAgICAgIHwgLTMuOTYxNCAgICAgICAgICB8IDAuMDE5ICAgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBiw6xuaCB0aMaw4budbmcgY8OzIG9kZHMga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1IGtow7RuZyDEkcOhbmcga+G7gyBzbyAgduG7m2kgbmjDs20gdGhhbSBjaGnhur91LiB8DQp8IEJQX0hpc3RvcnlQcmVoeXBlcnRlbnNpb24gfCAtMy45NTUzICAgICAgfCAwLjAxOSAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBOZ8aw4budaSB0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgY8WpbmcgY8OzIG9kZHMgIGto4bqjIG7Eg25nIMSR4buZdCBxdeG7tSBraMO0bmcgxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91LiB8DQp8IEZhbWlseV9IaXN0b3J5WWVzICAgICAgfCAxLjk3OTUgICAgICAgICAgIHwgNy4yMzcgICAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgQ8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgYuG7h25oIGzDoG0gdMSDbmcgb2RkcyDEkeG7mXQgcXXhu7UgfjcuMiBs4bqnbi4gfA0KDQoqR2hpIGNow7o6KiAgDQotIFwoIFx0ZXh0e09SfSA9IGVee1xiZXRhfSBcKSAgDQotIEdpw6EgdHLhu4sgcCA8IDAuMDUg4oaSICoqQ8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqICANCg0KLS0tDQoNCiMjIyMjICoqNC41LjIuNS4gS+G6v3QgbHXhuq1uKioNCg0KLSBNw7QgaMOsbmggbG9naXQgKipwaMO5IGjhu6NwKiogxJHhu4MgZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgxJHhu5l0IHF14bu1LiAgDQotIEPDoWMgYmnhur9uICoqU21va2luZ19TdGF0dXMqKiwgKipCUF9IaXN0b3J5KiosIHbDoCAqKkZhbWlseV9IaXN0b3J5KiogbMOgIG5o4buvbmcgeeG6v3UgdOG7kSBk4buxIGLDoW8gbeG6oW5oIG3hur0gbmjhuqV0LiAgDQotIEJNSSB0aOG7q2EgY8OibiBjw7MgdMOhYyDEkeG7mW5nIMSRw6FuZyBr4buDLCB0cm9uZyBraGkgQk1JIHRoaeG6v3UgY8OibiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gIA0KLSBL4bq/dCBxdeG6oyBuw6B5IGfhu6NpIMO9IHLhurFuZyB2aeG7h2MgKipraeG7g20gc2/DoXQgaMO6dCB0aHXhu5FjLCB0aGVvIGTDtWkgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIHnhur91IHThu5EgZGkgdHJ1eeG7gW4qKiBjw7MgdGjhu4MgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyBwaMOybmcgbmfhu6thIMSR4buZdCBxdeG7tS4NCg0KIyMjIyAqKjQuNS4zIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpgYGB7cn0NCiMgUHJvYml0DQptb2RlbF9wcm9iaXQgPC0gZ2xtKFN0cm9rZV9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyBGYW1pbHlfSGlzdG9yeSwNCiAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsX3Byb2JpdCkNCmBgYA0KDQojIyMjIyAqKjQuNS4zLjEuIFBoxrDGoW5nIHRyw6xuaCBtw7QgaMOsbmg6KioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgY8OzIGThuqFuZzoNCg0KXFsNClxQaGleey0xfShccGkpID0NCjAuODA4MzENCisgMC4yNzI4OSBcY2RvdCBcdGV4dHtCTUl9X3tPdmVyd2VpZ2h0fQ0KKyAwLjEwNjk1IFxjZG90IFx0ZXh0e0JNSX1fe1VuZGVyd2VpZ2h0fQ0KKyAxLjA5NTI5IFxjZG90IFx0ZXh0e1Ntb2tpbmdcX1N0YXR1c31fe1Ntb2tlcn0NCi0gMi4zMTQ2NCBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe05vcm1hbH0NCi0gMi4zMjA5NiBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe1ByZWh5cGVydGVuc2lvbn0NCisgMS4xNDYzMiBcY2RvdCBcdGV4dHtGYW1pbHlcX0hpc3Rvcnl9X3tZZXN9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KLSBcKCBcUGhpXnstMX0oXHBpKSBcKSBsw6AgaMOgbSBuZ2jhu4tjaCDEkeG6o28gY+G7p2EgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5LCDEkeG6t2MgdHLGsG5nIGNobyBtw7QgaMOsbmggKipQcm9iaXQqKi4NCi0gXCggXHBpIFwpIGzDoCB4w6FjIHN14bqldCDEkeG7mXQgcXXhu7UuDQoNCi0tLQ0KDQojIyMjIyAqKjQuNS4zLjIgxJDDoW5oIGdpw6EgbcO0IGjDrG5oKioNCg0KLSAqKk51bGwgZGV2aWFuY2UqKjogMjc0OC42IChkZiA9IDE5ODQpICANCi0gKipSZXNpZHVhbCBkZXZpYW5jZSoqOiAxNjkxLjYgKGRmID0gMTk3OCkgIA0KLSAqKkNow6puaCBs4buHY2ggZGV2aWFuY2UqKjogXCggXERlbHRhIEQgPSAyNzQ4LjYgLSAxNjkxLjYgPSAxMDU3LjAgXCkgduG7m2kgNiBi4bqtYyB04buxIGRvIOKGkiBj4bqjaSB0aGnhu4duIG3DtCBow6xuaCByw7UgcuG7h3QuICANCi0gKipBSUMgPSAxNzA1LjYqKiwgdGjhuqVwIGjGoW4gc28gduG7m2kgbcO0IGjDrG5oIGxvZ2l0IHRyxrDhu5tjIMSRw7MgKDE3MTIuNCkg4oaSIG3DtCBow6xuaCBQcm9iaXQgbcO0IHThuqMgZOG7ryBsaeG7h3UgdOG7kXQgaMahbiBt4buZdCBjaMO6dC4NCg0KLS0tDQoNCiMjIyMjICoqNC41LjMuMyBC4bqjbmcga+G6v3QgcXXhuqMgY2hpIHRp4bq/dCoqDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICAgICB8IEjhu4cgc+G7kSBcKCBcYmV0YSBcKSB8IEdpw6EgdHLhu4sgcCAgICB8IMOdIG5naMSpYSB0aOG7kW5nIGvDqiB8IERp4buFbiBnaeG6o2kgw70gbmdoxKlhIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IEJNSU92ZXJ3ZWlnaHQgICAgICAgICAgfCAwLjI3Mjg5ICAgICAgICAgIHwgMC4wMDAyNTcgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5nxrDhu51pIHRo4burYSBjw6JuIGPDsyB4w6FjIHN14bqldCDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gbmjDs20gQk1JIGLDrG5oIHRoxrDhu51uZy4gfA0KfCBCTUlVbmRlcndlaWdodCAgICAgICAgIHwgMC4xMDY5NSAgICAgICAgICB8IDAuNTE4ICAgICAgICB8IEtow7RuZyAgICAgICAgICAgfCDhuqJuaCBoxrDhu59uZyBraMO0bmcgxJHDoW5nIGvhu4MuIHwNCnwgU21va2luZ19TdGF0dXNTbW9rZXIgICB8IDEuMDk1MjkgICAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmfGsOG7nWkgaMO6dCB0aHXhu5FjIGPDsyB4w6FjIHN14bqldCDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIHwNCnwgQlBfSGlzdG9yeV9IeXBlcnRlbnNpb25Ob3JtYWwgICAgICAgfCAtMi4zMTQ2NCAgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5ow7NtIGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZyBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgdGjhuqVwIGjGoW4gbmhp4buBdSBzbyB24bubaSBuaMOzbSB0xINuZyBodXnhur90IMOhcC4gfA0KfCBCUF9IaXN0b3J5UHJlaHlwZXJ0ZW5zaW9uIHwgLSAyLjMyMDk2ICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmjDs20gdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIGPFqW5nIGPDsyB4w6FjIHN14bqldCB0aOG6pXAgaMahbiDEkcOhbmcga+G7gy4gfA0KfCBGYW1pbHlfSGlzdG9yeVllcyAgICAgIHwgMS4xNDYzMiAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBDw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IMSR4buZdCBxdeG7tS4gfA0KDQotLS0NCg0KIyMjIyMgKio0LjUuMy40IEvhur90IGx14bqtbioqDQoNCi0gTcO0IGjDrG5oIFByb2JpdCBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1IHbDoCBj4bqjaSB0aGnhu4duIHLDtSBy4buHdCBzbyB24bubaSBtw7QgaMOsbmggcuG7l25nLiAgDQotIEPDoWMgeeG6v3UgdOG7kSAqKmjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHRp4buBbiBz4butIGdpYSDEkcOsbmgsIEJNSSB0aOG7q2EgY8OibioqIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIMSR4bq/biBuZ3V5IGPGoSDEkeG7mXQgcXXhu7UuICANCi0gS+G6v3QgcXXhuqMgdMawxqFuZyDEkeG7k25nIHbhu5tpIG3DtCBow6xuaCBMb2dpdCwgbmjGsG5nIFByb2JpdCBjw7MgQUlDIHRo4bqlcCBoxqFuLCBn4bujaSDDvSBraOG6oyBuxINuZyBtw7QgcGjhu49uZyB04buRdCBoxqFuIG3hu5l0IGNow7p0LiAgDQoNCi0tLQ0KDQojIyMjICoqNC41LjQgTcO0IGjDrG5oIENsb2dsb2cqKg0KDQpgYGB7cn0NCiMgQ2xvZ2xvZw0KbW9kZWxfY2xvZ2xvZyA8LSBnbG0oU3Ryb2tlX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIEZhbWlseV9IaXN0b3J5LA0KICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbF9jbG9nbG9nKQ0KYGBgDQoNCiMjIyMjICoqNC41LjQuMSBQaMawxqFuZyB0csOsbmggbcO0IGjDrG5oKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBDbG9nbG9nIGPDsyBk4bqhbmc6DQoNClxbDQpcbG9nXGxlZnQoLVxsb2coMSAtIFxwaSlccmlnaHQpID0NCjAuMzE3ODcNCisgMC4yOTQ5NyBcY2RvdCBcdGV4dHtCTUl9X3tPdmVyd2VpZ2h0fQ0KKyAwLjExOTg0IFxjZG90IFx0ZXh0e0JNSX1fe1VuZGVyd2VpZ2h0fQ0KKyAxLjI2NDEyIFxjZG90IFx0ZXh0e1Ntb2tpbmdcX1N0YXR1c31fe1Ntb2tlcn0NCi0gMi41Njg1NSBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe05vcm1hbH0NCi0gMi42MDU1OSBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe1ByZWh5cGVydGVuc2lvbn0NCisgMS40MTAyMCBcY2RvdCBcdGV4dHtGYW1pbHlcX0hpc3Rvcnl9X3tZZXN9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KLSBcKCBccGkgXCkgbMOgIHjDoWMgc3XhuqV0IMSR4buZdCBxdeG7tS4NCi0gSMOgbSBsacOqbiBr4bq/dCBsw6AgXCggZyhccGkpID0gXGxvZygtXGxvZygxIC0gXHBpKSkgXCkuDQoNCi0tLQ0KDQojIyMjIyAqKjQuNS40LjIuIMSQw6FuaCBnacOhIG3DtCBow6xuaCoqDQoNCi0gKipOdWxsIGRldmlhbmNlKio6IDI3NDguNiAoZGYgPSAxOTg0KSAgDQotICoqUmVzaWR1YWwgZGV2aWFuY2UqKjogMTY4NS4xIChkZiA9IDE5NzgpICANCi0gKipDaMOqbmggbOG7h2NoIGRldmlhbmNlKio6IFwoIFxEZWx0YSBEID0gMjc0OC42IC0gMTY4NS4xID0gMTA2My41IFwpIHbhu5tpIDYgYuG6rWMgdOG7sSBkbyDihpIgY+G6o2kgdGhp4buHbiBtw7QgaMOsbmggcuG6pXQgcsO1IHLhu4d0LiAgDQotICoqQUlDID0gMTY5OS4xKiosIHRo4bqlcCBoxqFuIExvZ2l0ICgxNzEyLjQpIHbDoCBQcm9iaXQgKDE3MDUuNikg4oaSIENsb2dsb2cgbcO0IHBo4buPbmcgZOG7ryBsaeG7h3UgdOG7kXQgbmjhuqV0IHRyb25nIGJhIG3DtCBow6xuaC4NCg0KLS0tDQoNCiMjIyMjICoqNC41LjQuMy4gQuG6o25nIGvhur90IHF14bqjIGNoaSB0aeG6v3QqKg0KDQp8IEJp4bq/biAgICAgICAgICAgICAgICAgICAgIHwgSOG7hyBz4buRIFwoIFxiZXRhIFwpIHwgR2nDoSB0cuG7iyBwICAgIHwgw50gbmdoxKlhIHRo4buRbmcga8OqIHwgRGnhu4VuIGdp4bqjaSDDvSBuZ2jEqWEgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IEJNSU92ZXJ3ZWlnaHQgICAgICAgICAgICB8IDAuMjk0OTcgICAgICAgICB8IDAuMDAwNzcgICAgICB8ICoqQ8OzKiogICAgICAgICB8IE5nxrDhu51pIHRo4burYSBjw6JuIGPDsyB4w6FjIHN14bqldCDEkeG7mXQgcXXhu7UgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIHwNCnwgQk1JVW5kZXJ3ZWlnaHQgICAgICAgICAgIHwgMC4xMTk4NCAgICAgICAgIHwgMC41NDEgICAgICAgIHwgS2jDtG5nICAgICAgICAgIHwg4bqibmggaMaw4bufbmcga2jDtG5nIMSRw6FuZyBr4buDLiB8DQp8IFNtb2tpbmdfU3RhdHVzU21va2VyICAgICB8IDEuMjY0MTIgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICB8IE5nxrDhu51pIGjDunQgdGh14buRYyBjw7Mgbmd1eSBjxqEgbeG6r2MgYuG7h25oIGNhbyBoxqFuIG5oaeG7gXUuIHwNCnwgQlBfSGlzdG9yeV9IeXBlcnRlbnNpb25Ob3JtYWwgICAgICAgICB8IC0yLjU2ODU1ICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICB8IEh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZyBjw7Mgbmd1eSBjxqEgxJHhu5l0IHF14bu1IHRo4bqlcC4gfA0KfCBCUF9IaXN0b3J5UHJlaHlwZXJ0ZW5zaW9ufCAtMi42MDU1OSAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgfCBUaeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgY8OzIHjDoWMgc3XhuqV0IOG6o25oIGjGsOG7n25nIHRo4bqlcC4gfA0KfCBGYW1pbHlfSGlzdG9yeVllcyAgICAgICAgfCAxLjQxMDIwICAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgfCBDw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggbMOgbSB0xINuZyBt4bqhbmggbmd1eSBjxqEgxJHhu5l0IHF14bu1LiB8DQoNCi0tLQ0KDQojIyMjIyAqKjQuNS40LjQgS+G6v3QgbHXhuq1uKioNCg0KLSBNw7QgaMOsbmggQ2xvZ2xvZyBjaG8gdGjhuqV5IHPhu7EgKipwaMO5IGjhu6NwIHThu5F0IG5o4bqldCoqIChBSUMgdGjhuqVwIG5o4bqldCkuICANCi0gQ8OhYyB54bq/dSB04buRIHF1YW4gdHLhu41uZzogKipCTUkgdGjhu6thIGPDom4sIGjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiDEkeG7gXUgY8OzIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gbmd1eSBjxqEgxJHhu5l0IHF14bu1LiAgDQotIFNvIHbhu5tpIExvZ2l0IHbDoCBQcm9iaXQsIENsb2dsb2cgdGjDrWNoIGjhu6NwIGjGoW4ga2hpIGThu68gbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgKips4buHY2ggduG7gSBwaMOtYSB0aOG6pXAqKiAobmhp4buBdSBuZ8aw4budaSBraMO0bmcgbeG6r2MsIMOtdCBuZ8aw4budaSBt4bqvYykuICANCg0KIyMjIyAqKjQuNS41IFNvIHPDoW5oIHbDoCDEkcOhbmggZ2nDoSBjw6FjIG3DtCBow6xuaCoqDQoNCmBgYHtyfQ0KIyBTbyBzw6FuaCBBSUMNCmFpY192YWx1ZXMgPC0gZGF0YS5mcmFtZSgNCiAgTcO0X2jDrG5oID0gYygiTFBNIiwgIkxvZ2l0IiwgIlByb2JpdCIsICJDbG9nbG9nIiksDQogIEFJQyA9IGMoQUlDKG1vZGVsX2xwbSksIEFJQyhtb2RlbF9sb2dpdCksIEFJQyhtb2RlbF9wcm9iaXQpLCBBSUMobW9kZWxfY2xvZ2xvZykpDQopDQpwcmludChhaWNfdmFsdWVzKQ0KYGBgDQoNCioqQuG6o25nIEFJQyBj4bunYSBjw6FjIG3DtCBow6xuaCoqDQoNCnwgTcO0IGjDrG5oICAgfCBBSUMgICAgICAgIHwgTmjhuq1uIHjDqXQgduG7gSDEkeG7mSBwaMO5IGjhu6NwIHwNCnwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBMUE0gICAgICAgfCAxODI4LjUxMCAgICB8UGjDuSBo4bujcCB0xrDGoW5nIMSR4buRaSB8DQp8IExvZ2l0ICAgICB8IDE3MTIuMzc3ICAgICB8IFBow7kgaOG7o3AgdMawxqFuZyDEkeG7kWkgfA0KfCBQcm9iaXQgICAgfCAxNzA1LjU2MCAgICAgfCBQaMO5IGjhu6NwIHTGsMahbmcgdOG7sSBMb2dpdCB8DQp8IENsb2dsb2cgICB8ICoqMTY5OS4xMzAqKiB8IOKchSBU4buRdCBuaOG6pXQgKEFJQyB0aOG6pXAgbmjhuqV0IHRyb25nIGPDoWMgbcO0IGjDrG5oIG5o4buLIHBow6JuKSB8DQoNCiAqKkzGsHUgw70qKjogTcO0IGjDrG5oIExQTSAoTGluZWFyIFByb2JhYmlsaXR5IE1vZGVsKSBsw6AgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oLCBraMO0bmcgdGh14buZYyBo4buNIHBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWMgbsOqbiBBSUMgY8OzIHRo4buDIMOibSB2w6Aga2jDtG5nIHRy4buxYyB0aeG6v3Agc28gc8OhbmggxJHGsOG7o2MgduG7m2kgY8OhYyBtw7QgaMOsbmggbG9naXQsIHByb2JpdCwgY2xvZ2xvZy4NCg0KLS0tDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gKipUcm9uZyBiYSBtw7QgaMOsbmggbmjhu4sgcGjDom4gKExvZ2l0LCBQcm9iaXQsIENsb2dsb2cpOioqDQogIC0gKipDbG9nbG9nIGPDsyBBSUMgdGjhuqVwIG5o4bqldCAoMTY5OS4xMzApKiog4oaSIG3DtCBow6xuaCBjw7MgxJHhu5kgcGjDuSBo4bujcCB04buRdCBuaOG6pXQuDQogIC0gTG9naXQgdsOgIFByb2JpdCBjw7MgQUlDIHjhuqVwIHjhu4kgbmhhdSDihpIgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nLi4NCiAgLSBW4bubaSBiaeG6v24gcGjhu6UgdGh14buZYyBk4bqhbmcgbmjhu4sgcGjDom4sICoqQ2xvZ2xvZyBsw6AgbOG7sWEgY2jhu41uIMawdSB0acOqbioqIG7hur91IG3hu6VjIHRpw6p1IGzDoCBwaMOibiB0w61jaCBjaMOtbmggeMOhYyB4w6FjIHN14bqldCBt4bqvYyBi4buHbmggxJHhu5l0IHF14bu1Lg0KDQojIyMgKio0LjYuIEvhur90IHF14bqjIGjhu5NpIHF1eSB2w6AgZOG7sSBiw6FvIHjDoWMgc3XhuqV0KioNCg0KYGBge3J9DQojIEPDoGkgxJHhurd0IGfDs2kNCmlmICghcmVxdWlyZShwUk9DKSkgaW5zdGFsbC5wYWNrYWdlcygicFJPQyIsIGRlcGVuZGVuY2llcyA9IFRSVUUpDQpsaWJyYXJ5KHBST0MpDQoNCiMgSHXhuqVuIGx1eeG7h24gbcO0IGjDrG5oIGNsb2dsb2cNCm1vZGVsX2Nsb2dsb2cgPC0gZ2xtKA0KICBmb3JtdWxhID0gU3Ryb2tlX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIA0KICAgIEZhbWlseV9IaXN0b3J5LCANCiAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIiksIA0KICBkYXRhID0gZGF0YQ0KKQ0KDQojIFTDrW5oIHjDoWMgc3XhuqV0IGThu7EgxJFvw6FuIHThu6sgbcO0IGjDrG5oIGNsb2dsb2cNCnByZWRpY3RlZF9wcm9ic19jbG9nbG9nIDwtIHByZWRpY3QobW9kZWxfY2xvZ2xvZywgdHlwZSA9ICJyZXNwb25zZSIpDQoNCiMgVuG6vSDEkcaw4budbmcgY29uZyBST0MgdsOgIHTDrW5oIEFVQywgbG/huqFpIGLhu48gY+G6o25oIGLDoW8NCnN1cHByZXNzV2FybmluZ3Moew0KICByb2NfY2xvZ2xvZyA8LSByb2MoDQogICAgcmVzcG9uc2UgPSBkYXRhJEhhc19TdHJva2UsDQogICAgcHJlZGljdG9yID0gcHJlZGljdGVkX3Byb2JzX2Nsb2dsb2csDQogICAgbGV2ZWxzID0gYygiTm8iLCAiWWVzIiksDQogICAgZGlyZWN0aW9uID0gIjwiDQogICkNCn0pDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgUk9DDQpwbG90KHJvY19jbG9nbG9nLCBjb2wgPSAiZGFya2dyZWVuIiwgbHdkID0gMiwgbWFpbiA9ICJST0MgQ3VydmUgLSBDbG9nbG9nIE1vZGVsIikNCg0KIyBIaeG7g24gdGjhu4sgQVVDDQphdWNfY2xvZ2xvZyA8LSBhdWMocm9jX2Nsb2dsb2cpDQpwcmludChwYXN0ZSgiQVVDOiIsIHJvdW5kKGF1Y19jbG9nbG9nLCA0KSkpDQpgYGANCg0KDQoNCmBgYHtyfQ0KbW9kZWxfbG9naXQgPC0gZ2xtKFN0cm9rZV9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyANCiAgICAgICAgICAgICAgICAgICAgIEZhbWlseV9IaXN0b3J5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IiksIGRhdGEgPSBkYXRhKQ0KDQptb2RlbF9wcm9iaXQgPC0gZ2xtKFN0cm9rZV9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyANCiAgICAgICAgICAgICAgICAgICAgICBGYW1pbHlfSGlzdG9yeSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSwgZGF0YSA9IGRhdGEpDQoNCm1vZGVsX2Nsb2dsb2cgPC0gZ2xtKFN0cm9rZV9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyANCiAgICAgICAgICAgICAgICAgICAgICAgRmFtaWx5X0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCg0KIyBE4buxIMSRb8OhbiB4w6FjIHN14bqldA0KcHJlZF9sb2dpdCA8LSBwcmVkaWN0KG1vZGVsX2xvZ2l0LCB0eXBlID0gInJlc3BvbnNlIikNCnByZWRfcHJvYml0IDwtIHByZWRpY3QobW9kZWxfcHJvYml0LCB0eXBlID0gInJlc3BvbnNlIikNCnByZWRfY2xvZ2xvZyA8LSBwcmVkaWN0KG1vZGVsX2Nsb2dsb2csIHR5cGUgPSAicmVzcG9uc2UiKQ0KDQojIFThuqFvIFJPQyBjaG8gdOG7q25nIG3DtCBow6xuaCB2w6AgbG/huqFpIGLhu48gY+G6o25oIGLDoW8NCnN1cHByZXNzV2FybmluZ3Moew0KICByb2NfbG9naXQgPC0gcm9jKHJlc3BvbnNlID0gZGF0YSRIYXNfU3Ryb2tlLCBwcmVkaWN0b3IgPSBwcmVkX2xvZ2l0LCBsZXZlbHMgPSBjKCJObyIsICJZZXMiKSwgZGlyZWN0aW9uID0gIjwiKQ0KICByb2NfcHJvYml0IDwtIHJvYyhyZXNwb25zZSA9IGRhdGEkSGFzX1N0cm9rZSwgcHJlZGljdG9yID0gcHJlZF9wcm9iaXQsIGxldmVscyA9IGMoIk5vIiwgIlllcyIpLCBkaXJlY3Rpb24gPSAiPCIpDQogIHJvY19jbG9nbG9nIDwtIHJvYyhyZXNwb25zZSA9IGRhdGEkSGFzX1N0cm9rZSwgcHJlZGljdG9yID0gcHJlZF9jbG9nbG9nLCBsZXZlbHMgPSBjKCJObyIsICJZZXMiKSwgZGlyZWN0aW9uID0gIjwiKQ0KfSkNCg0KIyBW4bq9IFJPQyDEkeG6p3UgdGnDqm4NCnBsb3Qocm9jX2xvZ2l0LCBjb2wgPSAiIzFiOWU3NyIsIGx3ZCA9IDIsIG1haW4gPSAiU28gc8OhbmggUk9DOiBMb2dpdCAtIFByb2JpdCAtIENsb2dsb2ciLCBsZWdhY3kuYXhlcyA9IFRSVUUpDQoNCiMgVuG6vSBjw6FjIFJPQyB0aeG6v3AgdGhlbw0KbGluZXMocm9jX3Byb2JpdCwgY29sID0gIiM3NTcwYjMiLCBsd2QgPSAyKQ0KbGluZXMocm9jX2Nsb2dsb2csIGNvbCA9ICIjZmM4ZDYyIiwgbHdkID0gMikNCg0KIyBUaMOqbSBjaMO6IHRow61jaCAobGVnZW5kKQ0KbGVnZW5kKCJib3R0b21yaWdodCIsIGxlZ2VuZCA9IGMoDQogIHBhc3RlKCJMb2dpdCAoQVVDID0iLCByb3VuZChhdWMocm9jX2xvZ2l0KSwgMyksICIpIiksDQogIHBhc3RlKCJQcm9iaXQgKEFVQyA9Iiwgcm91bmQoYXVjKHJvY19wcm9iaXQpLCAzKSwgIikiKSwNCiAgcGFzdGUoIkNsb2dsb2cgKEFVQyA9Iiwgcm91bmQoYXVjKHJvY19jbG9nbG9nKSwgMyksICIpIikNCiksDQpjb2wgPSBjKCIjMWI5ZTc3IiwgIiM3NTcwYjMiLCAiI2ZjOGQ2MiIpLA0KbHdkID0gMiwgY2V4ID0gMC44LCBib3gubHdkID0gMA0KKQ0KYGBgDQoNCioqxJDDoW5oIGdpw6EgaGnhu4d1IHN14bqldCBtw7QgaMOsbmggYuG6sW5nIFJPQyB2w6AgQVVDKioNCg0KLSBCYSBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIChMb2dpdCwgUHJvYml0LCBDbG9nbG9nKSDEkcaw4bujYyB4w6J5IGThu7FuZyDEkeG7gyBk4buxIMSRb8OhbiBraOG6oyBuxINuZyAqKsSR4buZdCBxdeG7tSoqIGThu7FhIHRyw6puIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcDogKipCTUksIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCwgdsOgIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKi4NCg0KLSAqKkJp4buDdSDEkeG7kyBST0MqKiBjaG8gdGjhuqV5IGPhuqMgYmEgbcO0IGjDrG5oIMSR4buBdSBjw7MgKipBVUMgPSAwLjg3MyoqLCBjaOG7qW5nIHThu48ga2jhuqMgbsSDbmcgcGjDom4gbG/huqFpICoqdMawxqFuZyDEkcawxqFuZyoqIHbDoCAqKm3hu6ljIMSR4buZIGThu7EgxJFvw6FuIHLhuqV0IHThu5F0KiouDQoNCi0gQ8OhYyDEkcaw4budbmcgUk9DIGfhuqduIG5oxrAgKip0csO5bmcga2jDrXQqKiwgY2hvIHRo4bqleSB2aeG7h2MgbOG7sWEgY2jhu41uIExvZ2l0LCBQcm9iaXQgaGF5IENsb2dsb2cgKipraMO0bmcgdOG6oW8gcmEgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7gSBoaeG7h3Ugc3XhuqV0IHBow6JuIGxv4bqhaSoqLg0KDQotIE3hurdjIGTDuSBQcm9iaXQgdsOgIENsb2dsb2cgxJHhuqF0IEFJQyB0aOG6pXAgaMahbiBMb2dpdCwgbmjGsG5nIHRyb25nIHRo4buxYyB0aeG7hW46DQogIC0gKipMb2dpdCoqIHbhuqtuIGzDoCBs4buxYSBjaOG7jW4gcGjhu5UgYmnhur9uIGjGoW4gbmjhu50gKipk4buFIGRp4buFbiBnaeG6o2kqKiwgY8OzIHRo4buDIHF1eSDEkeG7lWkgdHLhu7FjIHRp4bq/cCBzYW5nICoqT2RkcyBSYXRpbyAoT1IpKiouDQogIC0gUHJvYml0IHbDoCBDbG9nbG9nIHnDqnUgY+G6p3UgbmfGsOG7nWkgc+G7rSBk4bulbmcgKipoaeG7g3Ugc8OidSB24buBIHBow6JuIHBo4buRaSBjaHXhuqluIHTDrWNoIGzFqXkqKiBob+G6t2MgaMOgbSBsb2ctbG9nLCDDrXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgY8OhYyBiw6FvIGPDoW8gbMOibSBzw6BuZy4NCg0KKipL4bq/dCBsdeG6rW46KioNCi0gQ+G6oyBiYSBtw7QgaMOsbmggxJHhu4F1IMSR4bqhdCBBVUMgY2FvICgwLjg3MyksIHRo4buDIGhp4buHbiBraOG6oyBuxINuZyBk4buxIMSRb8OhbiBt4bqhbmguDQotICoqTG9naXQqKiDEkcaw4bujYyBraHV54bq/biBuZ2jhu4sgc+G7rSBk4bulbmcgdsOsOg0KICAtIEThu4UgZGnhu4VuIGdp4bqjaS4NCiAgLSBQaMO5IGjhu6NwIHbhu5tpIGNodeG6qW4gYsOhbyBjw6FvIHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSB5IGjhu41jLg0KICAtIMSQZW0gbOG6oWkgaGnhu4d1IHN14bqldCBwaMOibiBsb+G6oWkgdMawxqFuZyDEkcawxqFuZyB24bubaSBQcm9iaXQgdsOgIENsb2dsb2cuDQoNCiMgQ0jGr8agTkcgNTogS+G6vlQgTFXhuqxOLCBI4bqgTiBDSOG6viBWw4AgxJDhu4AgWFXhuqRUDQoNCiMjICoqNS4xIEvhur90IGx14bqtbioqDQoNCk5naGnDqm4gY+G7qXUg4oCcUGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyDEkeG7mXQgcXXhu7XigJ0gc+G7rSBk4bulbmcgZOG7ryBsaeG7h3UgdGjhu7FjIHThur8gbmjhurFtIHjDoWMgxJHhu4tuaCBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgY2jDrW5oIGfDs3AgcGjhuqduIHbDoG8ga2jhuqMgbsSDbmcgeOG6o3kgcmEgxJHhu5l0IHF14bu1LiBQaMOibiB0w61jaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gxJHGsOG7o2MgdGjhu7FjIGhp4buHbiB0aMO0bmcgcXVhIGJhIG3DtCBow6xuaCBwaOG7lSBiaeG6v246IExvZ2l0LCBQcm9iaXQgdsOgIENvbXBsZW1lbnRhcnkgTG9nLWxvZyAoQ2xvZ2xvZykuIEPDoWMgYmnhur9uIMSRxrDhu6NjIMSRxrBhIHbDoG8gbcO0IGjDrG5oIGJhbyBn4buTbTogY2jhu4kgc+G7kSBraOG7kWkgY8ahIHRo4buDIChCTUkpLCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHbDoCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGPDsyBuZ8aw4budaSBt4bqvYyDEkeG7mXQgcXXhu7UuDQoNCkvhur90IHF14bqjIGNobyB0aOG6pXkgY8OzIGhhaSB54bq/dSB04buRIG5ndXkgY8ahIG7hu5VpIGLhuq10IHbDoCBuaOG6pXQgcXXDoW4gdHJvbmcgY+G6oyBiYSBtw7QgaMOsbmg6IHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oLiBD4bulIHRo4buDLCBuZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY8OzIG5ndXkgY8ahIMSR4buZdCBxdeG7tSBjYW8gaMahbiBn4bqnbiAzIGzhuqduIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBjw7MgdGnhu4FuIHPhu60gbsOgeS4gVMawxqFuZyB04buxLCBuZ8aw4budaSBjw7MgbmfGsOG7nWkgdGjDom4gdOG7q25nIG3huq9jIMSR4buZdCBxdeG7tSBjxaluZyBjw7Mgbmd1eSBjxqEgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIEPDoWMgeeG6v3UgdOG7kSBuw6B5IMSR4buBdSDEkeG6oXQgbeG7qWMgw70gbmdoxKlhIHRo4buRbmcga8OqIHbDoCBwaMO5IGjhu6NwIHbhu5tpIGPDoWMgbmdoacOqbiBj4bupdSB0csaw4bubYyDEkcOzIHRyb25nIGzEqW5oIHbhu7FjIHkgaOG7jWMgZOG7sSBwaMOybmcgdsOgIGThu4tjaCB04buFIGjhu41jLg0KDQpUcm9uZyBraGkgxJHDsywgY8OhYyB54bq/dSB04buRIG5oxrAgQk1JIHbDoCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyBraMO0bmcgY2hvIHRo4bqleSDhuqNuaCBoxrDhu59uZyB0aOG7kW5nIGvDqiByw7UgcuG7h3QgdHJvbmcgbcO0IGjDrG5oIHBow6JuIHTDrWNoIMSRYSBiaeG6v24sIG3hurdjIGTDuSBjaMO6bmcgduG6q24gxJHGsOG7o2MgeGVtIGzDoCB54bq/dSB04buRIG5ndXkgY8ahIHRp4buBbSBuxINuZyB0cm9uZyB0aOG7sWMgaMOgbmggbMOibSBzw6BuZy4NCg0KxJDDoW5oIGdpw6EgaGnhu4d1IHN14bqldCBtw7QgaMOsbmggcXVhIMSRxrDhu51uZyBjb25nIFJPQyB2w6AgY2jhu4kgc+G7kSBBVUMgY2hvIHRo4bqleSBj4bqjIGJhIG3DtCBow6xuaCDEkeG7gXUgxJHhuqF0IGhp4buHdSBuxINuZyBwaMOibiBsb+G6oWkgdMawxqFuZyDEkcawxqFuZyBuaGF1LCB24bubaSBBVUMgPSAwLjg3My4gxJBp4buBdSBuw6B5IHBo4bqjbiDDoW5oIGto4bqjIG7Eg25nIHBow6JuIGJp4buHdCB0xrDGoW5nIMSR4buRaSB04buRdCBnaeG7r2EgbmjDs20gY8OzIG5ndXkgY8ahIHbDoCBraMO0bmcgY8OzIG5ndXkgY8ahIMSR4buZdCBxdeG7tS4gxJDGsOG7nW5nIFJPQyBn4bqnbiBuaMawIHRyw7luZyBraMOtdCBnaeG7r2EgYmEgbcO0IGjDrG5oIGPDoG5nIGPhu6duZyBj4buRIHRow6ptIHTDrW5oIOG7lW4gxJHhu4tuaCB0cm9uZyBoaeG7h3UgbsSDbmcgcGjDom4gbG/huqFpLg0KDQpN4bq3YyBkw7kgUHJvYml0IHbDoCBDbG9nbG9nIGPDsyBBSUMgdGjhuqVwIGjGoW4sIG3DtCBow6xuaCBMb2dpdCB24bqrbiDEkcaw4bujYyBs4buxYSBjaOG7jW4gbMOgIHBoxrDGoW5nIMOhbiB04buRaSDGsHUgbmjhu50gdMOtbmggZOG7hSBkaeG7hW4gZ2nhuqNpIChxdWEgdOG7tyBz4buRIG9kZHMg4oCTIG9kZHMgcmF0aW8pIHbDoCBwaOG7lSBiaeG6v24gcuG7mW5nIHLDo2kgdHJvbmcgbmdoacOqbiBj4bupdSB5IGjhu41jIGzDom0gc8OgbmcuIFZp4buHYyBz4butIGThu6VuZyBtw7QgaMOsbmggTG9naXQgZ2nDunAgaOG7lyB0cuG7oyB04buRdCBoxqFuIHRyb25nIGPDtG5nIHTDoWMgdGnDqm4gbMaw4bujbmcgbmd1eSBjxqEgxJHhu5l0IHF14bu1LCB04burIMSRw7MgcGjhu6VjIHbhu6UgY8O0bmcgdMOhYyBzw6BuZyBs4buNYywgdMawIHbhuqVuIHbDoCBjYW4gdGhp4buHcCBz4bubbSBjaG8gbmjDs20gxJHhu5FpIHTGsOG7o25nIG5ndXkgY8ahIGNhbyB0cm9uZyBj4buZbmcgxJHhu5NuZy4NCg0KIyMgKio1LjIgSOG6oW4gY2jhur8qKg0KDQpUcm9uZyBxdcOhIHRyw6xuaCB0aOG7sWMgaGnhu4duIG5naGnDqm4gY+G7qXUsIHTDoWMgZ2nhuqMgbmjhuq1uIHRo4bqleSB24bqrbiBjw7JuIHThu5NuIHThuqFpIG3hu5l0IHPhu5EgaOG6oW4gY2jhur8gbmjhuqV0IMSR4buLbmguDQoNClRo4bupIG5o4bqldCwga8OtY2ggdGjGsOG7m2MgbeG6q3Ugc+G7rSBk4bulbmcgdHJvbmcgcGjDom4gdMOtY2ggY2jGsGEgdGjhuq10IHPhu7EgbOG7m24sIMSRaeG7gXUgbsOgeSBjw7MgdGjhu4Mg4bqjbmggaMaw4bufbmcgxJHhur9uIMSR4buZIGNow61uaCB4w6FjIGPhu6dhIGPDoWMga+G6v3QgcXXhuqMgxrDhu5tjIGzGsOG7o25nIHbDoCB0w61uaCBraMOhaSBxdcOhdCBraGkgw6FwIGThu6VuZyBjaG8gY+G7mW5nIMSR4buTbmcgcuG7mW5nIGjGoW4uDQoNClRo4bupIGhhaSwgZOG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCBjaOG7pyB54bq/dSB04burIG5ndeG7k24gdGjhu6kgY+G6pXAgaG/hurdjIGRvIG5nxrDhu51pIHRoYW0gZ2lhIHThu7Ega2hhaSBiw6FvLCBuw6puIGtow7RuZyB0csOhbmgga2jhu49pIHNhaSBs4buHY2gsIMSR4bq3YyBiaeG7h3QgduG7m2kgY8OhYyB0aMO0bmcgdGluIG5oxrAgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgaGF5IHRp4buBbiBz4butIGLhu4duaCBsw70uDQoNClRo4bupIGJhLCBtw7QgaMOsbmggY2jGsGEgxJHGsGEgdsOgbyBjw6FjIGJp4bq/biBz4buRIGzDom0gc8OgbmcgcXVhbiB0cuG7jW5nIGtow6FjLCBuaMawIGh1eeG6v3Qgw6FwIHRo4buxYyB04bq/LCBt4bupYyBt4buhIG3DoXUsIGNo4buJIHPhu5EgxJHGsOG7nW5nIGh1eeG6v3QgaGF5IHR14buVaSDigJMgduG7kW4gbMOgIG5o4buvbmcgeeG6v3UgdOG7kSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjaOG6t3QgY2jhur0gduG7m2kgbmd1eSBjxqEgxJHhu5l0IHF14bu1IHRyb25nIHRo4buxYyB04bq/Lg0KDQpDdeG7kWkgY8O5bmcsIGRvIG5naGnDqm4gY+G7qXUgbWFuZyB0w61uaCBtw7QgdOG6oyBj4bqvdCBuZ2FuZywgbsOqbiBjaOG7iSBwaOG6o24gw6FuaCDEkcaw4bujYyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBjw6FjIHnhur91IHThu5EsIGNo4bupIGNoxrBhIMSR4bunIGPGoSBz4bufIMSR4buDIGto4bqzbmcgxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgbmjDom4g4oCTIHF14bqjLg0KDQojIyAqKjUuMyDEkOG7gSB4deG6pXQqKg0KDQpU4burIG5o4buvbmcgaOG6oW4gY2jhur8gbsOqdSB0csOqbiwgdMOhYyBnaeG6oyB4aW4gxJHGsGEgcmEgbeG7mXQgc+G7kSBraeG6v24gbmdo4buLIG5o4bqxbSBj4bqjaSB0aGnhu4duIGNo4bqldCBsxrDhu6NuZyBuZ2hpw6puIGPhu6l1IHRyb25nIHTGsMahbmcgbGFpLg0KDQpUcsaw4bubYyBo4bq/dCwgY+G6p24gbeG7nyBy4buZbmcgY+G7oSBt4bqrdSB2w6AgcGjhuqFtIHZpIGto4bqjbyBzw6F0LCBiYW8gZ+G7k20gbmhp4buBdSBuaMOzbSB0deG7lWksIG5naOG7gSBuZ2hp4buHcCwga2h1IHbhu7FjIHNpbmggc+G7kW5nIGtow6FjIG5oYXUgxJHhu4MgdMSDbmcgdMOtbmggxJHhuqFpIGRp4buHbiB2w6AgxJHhu5kgdGluIGPhuq15IGNobyBr4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1Lg0KDQpUaOG7qSBoYWksIG7Dqm4gYuG7lSBzdW5nIHRow6ptIGPDoWMgY2jhu4kgc+G7kSB5IGtob2EgY+G7pSB0aOG7gyBoxqFuLCBuaMawIGh1eeG6v3Qgw6FwIMSRbyB0cuG7sWMgdGnhur9wLCBjaOG7iSBz4buRIGxpcGlkLCBnbHVjb3NlIG3DoXUgaGF5IMSR4buZIHR14buVaSwgxJHhu4MgZ2nDunAgbcO0IGjDrG5oIGThu7EgxJFvw6FuIGNow61uaCB4w6FjIHbDoCDEkeG6p3kgxJHhu6cgaMahbi4NCg0KQsOqbiBj4bqhbmggxJHDsywgbmjDs20ga2h1eeG6v24ga2jDrWNoIG7Dqm4gdGjhu7FjIGhp4buHbiBuaOG7r25nIG5naGnDqm4gY+G7qXUgdGhlbyB0aOG7nWkgZ2lhbiAoY29ob3J0IHN0dWR5KSDEkeG7gyBjw7MgdGjhu4MgxJHDoW5oIGdpw6EgcsO1IHLDoG5nIGjGoW4gduG7gSBt4buRaSBxdWFuIGjhu4cgbmjDom4g4oCTIHF14bqjIGdp4buvYSBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgdsOgIG5ndXkgY8ahIG3huq9jIMSR4buZdCBxdeG7tS4NCg0KQ3Xhu5FpIGPDuW5nLCBu4bq/dSBjw7MgxJFp4buBdSBraeG7h24sIG7Dqm4gcGjDoXQgdHJp4buDbiBjw6FjIGPDtG5nIGPhu6UgxJHDoW5oIGdpw6Egbmd1eSBjxqEgxJHhu5l0IHF14bu1IMSRxqFuIGdp4bqjbiB2w6AgZOG7hSBz4butIGThu6VuZywg4bupbmcgZOG7pW5nIHbDoG8gY8OhYyBjxqEgc+G7nyB5IHThur8gaG/hurdjIGPhu5luZyDEkeG7k25nLCBuaOG6sW0gZ2nDunAgcGjDoXQgaGnhu4duIHPhu5ttIG5ow7NtIMSR4buRaSB0xrDhu6NuZyBuZ3V5IGPGoSBjYW8gdsOgIGPDsyBiaeG7h24gcGjDoXAgY2FuIHRoaeG7h3Aga+G7i3AgdGjhu51pLg==