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

LỜI CAM ĐOAN

Em xin cam đoan rằng đề tài tiểu luận môn Phân tích dữ liệu định tính với đề tài “Phân tích các yếu tố ảnh hưởng đến bệnh cao huyết áp” là kết quả nghiên cứu nghiêm túc của em, được thực hiện dưới sự hướng dẫn khoa học và tận tình của Thầy/ThS. Trần Mạnh Tường.

Toàn bộ nội dung trong bài tiểu luận được xây dựng dựa trên quá trình thu thập, xử lý và phân tích dữ liệu một cách khách quan, trung thực, có dẫn nguồn rõ ràng đối với các tài liệu tham khảo và bám sát nội dung bài giảng. Các số liệu được sử dụng trong bài có xuất xứ cụ thể, đảm bảo tính minh bạch và chính xác. Kết quả nghiên cứu được trình bày hoàn toàn là công trình do tác giả trực tiếp thực hiện, không sao chép từ bất kỳ nguồn nào khác.

Em xin hoàn toàn chịu trách nhiệm trước nhà trường và giảng viên hướng dẫn về tính trung thực, khách quan và bản quyền nội dung của bài tiểu luận này. Nếu có bất kỳ vi phạm nào liên quan đến lời cam đoan trên, em xin hoàn toàn chịu trách nhiệm trước quy định của nhà trường..

LỜI CẢM ƠN

Trước hết, em xin bày tỏ lòng biết ơn sâu sắc đến Thầy Th.S Trần Mạnh Tường đã tận tình hướng dẫn, định hướng và đưa ra những góp ý quý báu trong suốt quá trình học tập và thực hiện đề tài tiểu luận. Nhờ sự chỉ dẫn tận tâm của Thầy, em đã có cơ hội vận dụng những kiến thức lý thuyết vào thực tiễn một cách hiệu quả và bài bản.

Em cũng xin chân thành cảm ơn quý Thầy, Cô khoa Khoa Học Dữ Liệu, trường Đại học Tài chính – Marketing, đã giảng dạy nhiệt huyết và truyền đạt những kiến thức chuyên môn quý báu về kinh tế, tài chính. Chính những nền tảng kiến thức này đã giúp em có cơ sở vững chắc để triển khai và hoàn thiện bài tiểu luận.

Môn học Phân tích dữ liệu định tính là một môn học bổ ích, giàu tính thực tiễn và mang lại cho em một góc nhìn rộng hơn về cách tiếp cận, phân tích và xử lý các dữ liệu kinh tế – xã hội trong và ngoài nước. Tuy nhiên, với vốn hiểu biết còn hạn chế và kinh nghiệm thực tế chưa nhiều, chắc chắn bài làm không tránh khỏi những thiếu sót. Kính mong quý Thầy, Cô thông cảm và đóng góp ý kiến để em có thể hoàn thiện bài tiểu luận một cách tốt nhất.

CHƯƠNG 1: TỔNG QUAN NGHIÊN CỨU VÀ DỮ LIỆU NGHIÊN CỨU

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

Trong bối cảnh hiện nay, khi tốc độ đô thị hóa và nhịp sống hiện đại ngày càng gia tăng, các bệnh lý không lây – đặc biệt là bệnh cao huyết áp – đang trở thành một trong những mối đe dọa nghiêm trọng đối với sức khỏe cộng đồng. Theo Tổ chức Y tế Thế giới (WHO), cao huyết áp là “kẻ giết người thầm lặng” do diễn tiến âm thầm nhưng để lại hậu quả nghiêm trọng, làm gia tăng nguy cơ đột quỵ, suy tim, bệnh thận và tử vong sớm. Tại Việt Nam, tỷ lệ người mắc bệnh cao huyết áp ngày càng tăng, đặc biệt ở nhóm người trẻ tuổi, do lối sống thiếu khoa học, căng thẳng tâm lý và các yếu tố môi trường.

Xuất phát từ mối quan tâm sâu sắc đến sức khỏe con người và tính cấp thiết trong việc nâng cao nhận thức cộng đồng, tác giả quyết định lựa chọn đề tài “Phân tích các yếu tố ảnh hưởng đến bệnh cao huyết áp” nhằm tìm hiểu rõ hơn về các nguyên nhân chủ yếu tác động đến căn bệnh này, từ đó góp phần cung cấp thêm góc nhìn khoa học phục vụ công tác phòng ngừa và kiểm soát bệnh.

Thông qua việc ứng dụng các phương pháp phân tích dữ liệu định tính, tác giả mong muốn không chỉ làm rõ mối quan hệ giữa các yếu tố như chỉ số BMI, thói quen hút thuốc, tiền sử bệnh lý, hay thói quen vận động… với nguy cơ mắc bệnh cao huyết áp, mà còn nâng cao khả năng vận dụng kiến thức vào thực tiễn nghiên cứu trong lĩnh vực y tế – xã hội.

1.2 Mục tiêu và câu hỏi nghiên cứu

1.2.1 Mục tiêu nghiên cứu

Mục tiêu chính của đề tài là xác định và phân tích các yếu tố có thể tác động đến nguy cơ mắc bệnh cao huyết áp ở người trưởng thành. Cụ thể, nhóm nghiên cứu tập trung làm rõ mối quan hệ giữa các biến số như chỉ số khối cơ thể (BMI), thói quen hút thuốc, tiền sử huyết áp trong gia đình, mức độ căng thẳng tinh thần, chế độ ăn uống và lối sống sinh hoạt với xác suất mắc bệnh. Thông qua việc ứng dụng phương pháp phân tích dữ liệu định tính, nhóm mong muốn đánh giá mức độ ảnh hưởng của từng yếu tố, từ đó đưa ra những gợi ý có giá trị thực tiễn nhằm nâng cao nhận thức cộng đồng và hỗ trợ công tác phòng chống cao huyết áp.

1.2.2 Câu hỏi nghiên cứu

Xuất phát từ các mục tiêu trên, đề tài tập trung giải quyết một số câu hỏi nghiên cứu quan trọng: (1) Những yếu tố nào có ảnh hưởng rõ rệt đến khả năng mắc bệnh cao huyết áp? (2) Trong số các yếu tố được phân tích, yếu tố nào đóng vai trò nổi bật và có tác động mạnh nhất đến nguy cơ mắc bệnh? (3) Mối quan hệ giữa từng yếu tố (chẳng hạn như BMI, hút thuốc, tiền sử bệnh…) và khả năng mắc bệnh cao huyết áp thể hiện như thế nào? Và cuối cùng, (4) dữ liệu thu thập và phân tích có thể đưa ra những hàm ý thực tiễn gì trong việc phòng ngừa và kiểm soát căn bệnh này trong cộng đồng?

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

1.3.1 Đối tượng nghiên cứu

Đối tượng nghiên cứu là những cá nhân có nguy cơ hoặc đang mắc bệnh cao huyết áp, đặc biệt tập trung vào nhóm người trưởng thành trong độ tuổi lao động. Các yếu tố được khảo sát xoay quanh đặc điểm nhân khẩu học chỉ số sức khỏe như chỉ số BMI, tình trạng hút thuốc lá, tiền sử bệnh lý về huyết áp trong gia đình, thói quen sinh hoạt…. Những đặc điểm này được lựa chọn nhằm phản ánh một cách cụ thể và thực tiễn các yếu tố có khả năng tác động đến tình trạng huyết áp của một cá nhân trong bối cảnh xã hội hiện đại. Việc lựa chọn đối tượng nghiên cứu như trên giúp đề tài hướng đến mục tiêu đánh giá tổng quan các yếu tố nguy cơ phổ biến, đồng thời đề xuất một số hàm ý mang tính ứng dụng trong công tác phòng ngừa và kiểm soát bệnh cao huyết áp trong cộng đồng.

1.3.2 Phạm vi nghiên cứu

Về không gian: Nghiên cứu sử dụng dữ liệu khảo sát từ khách hàng phạm vi trong một nước. Về thời gian: Dữ liệu được thu thập và xử lý trong năm 2025, phản ánh thực trạng sức khỏe cá nhân trong bối cảnh hiện tại.

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

Trong nghiên cứu này, phương pháp định lượng được sử dụng nhằm phân tích mối quan hệ giữa các yếu tố như chỉ số sức khỏe như chỉ số BMI, tình trạng hút thuốc lá, tiền sử bệnh lý về huyết áp trong gia đình, thói quen sinh hoạt… và quyết định vay tiêu dùng của khách hàng.

Đầu tiên, dữ liệu được xử lý và trình bày thông qua thống kê mô tả đơn biến và phân tích bảng tần số để làm rõ đặc điểm tổng quan của mẫu nghiên cứu. Tiếp theo, kiểm định Chi-bình phương được áp dụng nhằm xác định mối liên hệ giữa từng biến độc lập và biến phụ thuộc (quyết định vay). Những biến có ý nghĩa thống kê sẽ được chọn đưa vào phân tích hồi quy nhị phân bằng bốn mô hình: (1) Hồi quy logistic, (2) Hồi quy probit, (3) Hồi quy cloglog, và (4) Mô hình xác suất tuyến tính (LPM). Mỗi mô hình đều được triển khai theo hai bước: phân tích đơn biến và đa biến. Kết quả hồi quy được trình bày dưới dạng hệ số ước lượng, sai số chuẩn, giá trị p và độ tin cậy, qua đó đánh giá hướng và mức độ ảnh hưởng của từng biến độc lập đến xác suất vay. Sau cùng, để so sánh hiệu quả giữa các mô hình, nghiên cứu sử dụng các tiêu chí đánh giá gồm chỉ số AIC (Akaike Information Criterion), đường cong ROC (Receiver Operating Characteristic) và ma trận nhầm lẫn.

1.5 Kết cấu của đề tài

Ngoài mục lục, danh mục chữ viết tắt, danh mục hình ảnh và bảng biểu, phụ lục cùng tài liệu tham khảo đề tài được chia thành ba chương chính:

Chương 1: GIỚI THIỆU NGHIÊN CỨU

Trình bày bối cảnh, lý do chọn đề tài, mục tiêu và câu hỏi nghiên cứu, đối tượng phạm vi nghiên cứu, phương pháp và kết cấu của đề tài.

Chương 2: Cơ sở lý thuyết và phương pháp nghiên cứu

Tổng hợp các khái niệm, lý thuyết liên quan đến bệnh cao huyết áp và đặc điểm nhân khẩu học. Trình bày các phương pháp thống kê và mô hình định lượng được sử dụng trong phân tích.

Chương 3: Kết quả nghiên cứu

Phân tích dữ liệu thực nghiệm, trình bày kết quả từ các phương pháp thống kê và mô hình hồi quy, đánh giá mức độ ảnh hưởng của các yếu tố, và đề xuất một số khuyến nghị thực tiễn.

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Lý thuyết về bệnh cao huyết áp

Bệnh cao huyết áp (tăng huyết áp) là một tình trạng y tế mãn tính trong đó áp lực máu tác động lên thành động mạch duy trì ở mức cao hơn bình thường trong một thời gian dài. Đây là một trong những bệnh lý không lây phổ biến nhất trên toàn cầu, được xem là yếu tố nguy cơ hàng đầu dẫn đến các biến chứng tim mạch nghiêm trọng như đột quỵ, nhồi máu cơ tim, suy thận và thậm chí tử vong nếu không được kiểm soát kịp thời. Cao huyết áp thường diễn tiến âm thầm, không có triệu chứng rõ rệt, vì vậy còn được gọi là “kẻ giết người thầm lặng”.

Việc phát hiện và kiểm soát bệnh cao huyết áp không chỉ là vấn đề y tế cá nhân mà còn là mối quan tâm sức khỏe cộng đồng. Các nghiên cứu y học và xã hội học chỉ ra rằng nguy cơ mắc cao huyết áp không chỉ xuất phát từ yếu tố sinh học hay di truyền, mà còn chịu ảnh hưởng đáng kể bởi những yếu tố hành vi và nhân khẩu học. Những yếu tố như giới tính, độ tuổi, chỉ số khối cơ thể (BMI), thói quen hút thuốc lá, tình trạng căng thẳng tinh thần và tiền sử bệnh lý gia đình đóng vai trò quan trọng trong việc làm thay đổi huyết áp của một cá nhân theo thời gian.

Trong nghiên cứu này, nhóm tập trung phân tích một số yếu tố nhân khẩu học và hành vi được xem là có mối liên hệ chặt chẽ với nguy cơ mắc bệnh cao huyết áp, bao gồm:

  • Chỉ số khối cơ thể (BMI): Là chỉ số phản ánh mức độ béo phì, có liên quan trực tiếp đến nguy cơ cao huyết áp. Người có chỉ số BMI cao (thừa cân, béo phì) thường có nguy cơ mắc bệnh cao hơn.

  • Tình trạng hút thuốc (smoke): Hút thuốc lá làm co mạch và tăng huyết áp tạm thời, nếu kéo dài sẽ gây tổn thương mạch máu và làm tăng nguy cơ tăng huyết áp mạn tính.

  • Tiền sử bệnh huyết áp (history): Yếu tố di truyền và môi trường gia đình có ảnh hưởng đến khả năng mắc bệnh, đặc biệt nếu trong gia đình có người thân từng bị cao huyết áp.

  • Mức độ vận động thể chất: Người thường xuyên vận động sẽ có sức khỏe tốt hơn, từ đó giảm nguy cơ mắc bệnh cao huyết áp

Việc xem xét các yếu tố trên trong mối tương quan với tình trạng huyết áp giúp nâng cao hiệu quả chẩn đoán sớm, can thiệp đúng đối tượng và xây dựng các chính sách y tế cộng đồng phù hợp với từng nhóm dân cư có nguy cơ cao. Đây cũng là nền tảng để tăng cường hoạt động tuyên truyền, thay đổi hành vi sức khỏe và hỗ trợ người dân nâng cao chất lượng cuộc sống một cách bền vững.

2.2 Mô hình hồi quy nhị phân

Mô hình hồi quy nhị phân là công cụ phổ biến được sử dụng để phân tích và dự báo xác suất xảy ra của một sự kiện nhị phân, trong đó biến phụ thuộc chỉ nhận giá trị 0 hoặc 1. Trong bối cảnh nghiên cứu này, biến phụ thuộc là hành vi vay tiêu dùng của khách hàng (1 = có mắc bệnh, 0 = không mắc bệnh). Mục tiêu của các mô hình hồi quy nhị phân là ước lượng xác suất xảy ra sự kiện \(Y=1\) dựa trên các biến độc lập \(X_1, X_2, \dots, X_k\).

Dạng tổng quát của mô hình:

\[ P(Y = 1|X) = G(X\beta) \]

Trong đó:

  • \(G(.)\) là hàm liên kết (link function), xác định loại mô hình cụ thể
  • \(X\) là vector các biến độc lập (predictors)
  • \(\beta\) là vector hệ số hồi quy cần ước lượng

2.2.1 Mô hình Logistic (Logit)

Sử dụng hàm logistic:

\[ P(Y=1|X) = \frac{e^{X\beta}}{1 + e^{X\beta}} \]

Hàm logit giữ xác suất trong khoảng (0,1) và hệ số \(\beta\) được diễn giải thông qua log(Odds Ratio).

2.2.2 Mô hình Probit

Sử dụng hàm phân phối tích lũy chuẩn hóa:

\[ P(Y=1|X) = \Phi(X\beta) \]

Phù hợp trong các trường hợp dữ liệu giả định có phân phối chuẩn ở sai số.

2.2.3 Mô hình Complementary log-log (Cloglog)

Sử dụng hàm:

\[ P(Y=1|X) = 1 - e^{-e^{X\beta}} \]

Phù hợp khi xác suất xảy ra sự kiện gần bằng 0 hoặc gần bằng 1.

2.2.4 Mô hình xác suất tuyến tính (LMP)

Mô hình xác suất tuyến tính là một trường hợp đặc biệt của Mô hình Tuyến tính Tổng quát (Generalized Linear Model - GLM), trong đó hàm liên kết là hàm đồng nhất (identity link function). Công thức mô hình được biểu diễn như sau:

\[ P(Y = 1 \mid X) = X\beta \]

Trong đó:

  • \(Y\) là biến phản hồi nhị phân (giá trị 0 hoặc 1),
  • \(X\) là ma trận các biến độc lập,
  • \(\beta\) là vector các hệ số hồi quy.

Mô hình này cho phép diễn giải trực tiếp xác suất xảy ra sự kiện \(Y = 1\) như một hàm tuyến tính của các biến giải thích \(X\).

Ưu điểm của mô hình này là đơn giản, dễ ước lượng bằng phương pháp OLS và dễ diễn giải. Tuy nhiên, vì giá trị dự báo có thể nằm ngoài khoảng [0, 1], mô hình này thường không đảm bảo ý nghĩa xác suất. Điều này dẫn đến vi phạm giả định và độ chính xác thấp khi dự đoán hành vi nhị phân.

Trong GLM, mô hình xác suất tuyến tính vẫn được sử dụng như một bước tham chiếu ban đầu để so sánh với các mô hình logit, probit hoặc cloglog.

2.2.5 Phương pháp ước lượng: Maximum Likelihood Estimation (MLE)

Các mô hình nhị phân như logit, probit và cloglog đều được ước lượng bằng phương pháp ước lượng hợp lý tối đa (MLE). Đây là phương pháp tìm giá trị tham số \(\beta\) sao cho xác suất tạo ra dữ liệu quan sát là cao nhất. Trong GLMs, hàm hợp lý được xây dựng dựa trên phân phối nhị thức và tối ưu hóa bằng các thuật toán như Newton-Raphson.

Trong các mô hình hồi quy nhị phân thuộc họ GLM như logit, probit và cloglog, tham số \(\beta\) không được ước lượng bằng phương pháp bình phương tối thiểu như trong hồi quy tuyến tính cổ điển, mà thay vào đó sử dụng phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation - MLE).

Phương pháp MLE tìm tập giá trị của \(\beta\) sao cho hàm hợp lý (likelihood function) đạt cực đại – nghĩa là, khả năng tạo ra bộ dữ liệu quan sát từ mô hình là cao nhất. Hàm hợp lý trong trường hợp nhị phân dựa trên phân phối nhị thức:

\[ L(\beta) = \prod_{i=1}^{n} [P_i]^{y_i} [1 - P_i]^{1 - y_i}, \quad \text{trong đó } P_i = G(X_i\beta) \]

Để đơn giản hóa tính toán, ta lấy log của hàm hợp lý để có log-likelihood:

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

Giải bài toán tối đa hóa log-likelihood bằng các thuật toán số học như Newton-Raphson hoặc Fisher Scoring, ta thu được ước lượng \(\hat{\beta}\).

2.3 Relative Risk và Odds Ratio

2.3.1 Relative Risk (RR)

Relative Risk (RR) – hay còn gọi là nguy cơ tương đối – so sánh xác suất xảy ra bệnh cao huyết áp giữa hai nhóm:

\[ RR = \frac{P_1}{P_0} \]

Trong đó:

  • \(P_1\): Xác suất khách hàng có đặc điểm mắc bệnh cao huyết áp
  • \(P_0\): Xác suất khách hàng không có đặc điểm mắc bệnh cao huyết áp dùng

Diễn giải:

  • RR = 1: Không có sự khác biệt giữa hai nhóm
  • RR > 1: Nhóm có đặc điểm có khả mắc bệnh cao huyết áp cao hơn
  • RR < 1: Nhóm có đặc điểm có khả năng mắc bệnh cao huyết áp thấp hơn

2.3.2 Odds Ratio (OR)

Odds Ratio (OR) đo lường tỷ lệ odds (khả năng xảy ra so với không xảy ra) giữa hai nhóm:

\[ OR = \frac{P_1 / (1 - P_1)}{P_0 / (1 - P_0)} = \frac{P_1 (1 - P_0)}{P_0 (1 - P_1)} \]

Trong mô hình hồi quy logistic, kết quả hồi quy chính là log(OR):

\[ \log(OR) = X\beta \]

Diễn giải:

  • OR = 1: Không có sự khác biệt giữa hai nhóm
  • OR > 1: Nhóm có đặc điểm có odds mắc bệnh cao huyết áp cao hơn
  • OR < 1: Nhóm có đặc điểm có odds mắc bệnh cao huyết áp thấp hơn

2.4 Giới thiệu bộ dữ liệu

Bộ dữ liệu “Hypertension Risk Prediction Dataset” này được thiết kế để giúp các nhà nghiên cứu, nhà khoa học dữ liệu và những người đam mê chăm sóc sức khỏe phân tích các yếu tố nguy cơ liên quan đến tăng huyết áp (huyết áp cao) . Bộ dữ liệu bao gồm 1.985 quan sát và 9 biến có ý nghĩa được tạo ra dựa trên thông tin chi tiết lâm sàng và mô hình dữ liệu y tế công cộng.

2.4.1 Đọ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/PC_Dell/Downloads/hypertension_dataset.xlsx", sheetIndex = 1, header = T)

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

library(data.table)
## 
## Attaching package: 'data.table'
## 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
##    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_Hypertension
##    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

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ơ cao huyết áp ở người trưởng thành từ 18 đến 84 tuổi.

2.5 MÔ Tả các biến trong bộ dữ liệu

2.5.1 Biến định lượng:

  • Age: Tuổi của đối tượng khảo sát, là biến định lượng dạng số thực

  • Salt_Intake: Lượng muối tiêu thụ hàng ngày (tính bằng gam) – một yếu tố chính gây ra huyết áp cao

2.5.2 Biến định tính:

  • BP_History: Tiền sử huyết áp (“Normal”: Bình thường ,“Hypertension”: cao huyết áp, “Prehypertension”: tiền tăng huyết áp),

  • 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)

  • Medication: Loại thuốc đang sử dụng

  • Family_History: Tiền sử gia đình mắc cao huyết áp hay không (“Yes”: CÓ/ “No”: KHÔNG)

  • Exercise_Level: Mức độ vận động thể chất (“Low”, “Moderate”, “High”) lần lượt là “thấp”, “đều đặn”, “cao”

  • Smoking_Status: Tình trạng hút thuốc (“Non-Smoker”: không hút thuốc, “Smoker”:Có hút thuốc)

  • Has_Hypertension: biến phụ thuộc (“Yes”: CÓ/“No”: KHÔNG), biểu thị đối tượng có mắc cao huyết áp hay không.

2.6 Kiểm tra dữ liệu

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

# Kiểm tra số lượng NA trong mỗi cột định tính
na_counts <- sapply(data, function(x) sum(is.na(x)))
na_counts
##              Age      Salt_Intake       BP_History              BMI 
##                0                0                0                0 
##       Medication   Family_History   Exercise_Level   Smoking_Status 
##                0                0                0                0 
## Has_Hypertension 
##                0

Nhận xét - 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) vì số lượng NA trong các cột đều hiển thị là 0

2.6.2 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$Medication       <- as.factor(data$Medication)
data$Family_History   <- as.factor(data$Family_History)
data$Exercise_Level   <- as.factor(data$Exercise_Level)
data$Smoking_Status   <- as.factor(data$Smoking_Status)
data$Has_Hypertension <- as.factor(data$Has_Hypertension)

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      : Factor w/ 5 levels "ACE Inhibitor",..: 4 4 1 2 4 3 1 4 4 4 ...
##  $ Family_History  : Factor w/ 2 levels "No","Yes": 1 1 1 2 1 1 2 2 2 1 ...
##  $ Exercise_Level  : Factor w/ 3 levels "High","Low","Moderate": 2 3 2 1 1 3 2 3 1 1 ...
##  $ Smoking_Status  : Factor w/ 2 levels "Non-Smoker","Smoker": 1 1 1 1 1 1 2 1 1 1 ...
##  $ Has_Hypertension: 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 
##        "numeric"        "numeric"         "factor"         "factor" 
##       Medication   Family_History   Exercise_Level   Smoking_Status 
##         "factor"         "factor"         "factor"         "factor" 
## Has_Hypertension 
##         "factor"

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

2.5 Quy trình nghiên cứu

Quy trình nghiên cứu được tác giả xây dựng theo các bước logic và tuần tự nhằm đảm bảo tính hệ thống, độ tin cậy và cơ sở khoa học trong phân tích dữ liệu. Cụ thể bao gồm các bước sau:

library(DiagrammeR)
## Warning: package 'DiagrammeR' was built under R version 4.3.3
DiagrammeR::grViz("
digraph research_flow {
  graph [rankdir = TB]

  node [shape = rectangle, style = filled, color = lightblue, fontname = Helvetica, fontsize = 12]

  A [label = 'Bước 1: Thống kê mô tả\n(Dữ liệu đơn biến)']
  B [label = 'Bước 2: Kiểm định Chi-square\n(Giữa biến phụ thuộc và độc lập)']
  C [label = 'Bước 3: Phân tích cặp biến\n(Bảng tần số, biểu đồ, RR & OR)']
  D [label = 'Bước 4: Ước lượng mô hình nhị phân\n(Logit, Probit, Cloglog, GLM)']
  E [label = 'Bước 5: So sánh mô hình\n(AIC, ROC)']
  F [label = 'Bước 6: Đề xuất chính sách\n(Dựa trên kết quả mô hình)']

  A -> B -> C -> D -> E -> F
}
")

Bước 1: Thu thập và xử lý dữ liệu

Tác giả sử dụng tập dữ liệu được rút trích từ kaggle.com. Từ đó, tác giả lựa chọn các biến phù hợp với mục tiêu nghiên cứu:

  • Biến phụ thuộc: Has_Hypertension – thể hiện bệnh nhân có mắc bệnh cao huyết áp hay không (yes/no).
  • Các biến độc lập: BMI, BP_History, Family_History, Medication, Smoking_Status và Exercise_Level.

Sau khi xác định biến, tác giả tiến hành làm sạch dữ liệu, mã hóa và chuyển đổi các biến định tính về định dạng phù hợp (factor) để phục vụ phân tích.

Bước 2: Thống kê mô tả đơn biến

Tác giả tiến hành thống kê tần suất và tỷ lệ phần trăm cho từng biến nhằm mô tả đặc điểm tổng quát của dữ liệu. Kết quả được minh họa thông qua biểu đồ cột và biểu đồ tròn nhằm trực quan hóa đặc điểm nhân khẩu học của khách hàng.

Bước 3: Kiểm định Chi-bình phương

Ở bước này, tác giả sử dụng kiểm định Chi-square để kiểm tra mối liên hệ thống kê giữa biến phụ thuộc loan và từng biến độc lập. Những biến có giá trị p < 0.05 được xem là có mối quan hệ có ý nghĩa thống kê với hành vi vay tiêu dùng, từ đó được đưa vào các phân tích sâu hơn.

Bước 4: Phân tích mối quan hệ giữa cặp biến

Với mỗi cặp biến có mối liên hệ, tác giả thực hiện các bước:

  • Lập bảng tần số chéo để mô tả phân phối chung.

  • Vẽ biểu đồ cột phân nhóm để so sánh trực quan.

  • Thực hiện kiểm định tỷ lệ giữa các nhóm.

  • Tính toán hai chỉ số quan trọng: Relative Risk (RR) và Odds Ratio (OR) nhằm lượng hóa mức độ ảnh hưởng của các yếu tố đến việc mắc bệnh cao huyết áp

Bước 5: Ước lượng mô hình hồi quy nhị phân

Tác giả tiến hành xây dựng và ước lượng 4 mô hình hồi quy nhị phân nhằm phân tích tác động của các biến nhân khẩu học đến hành vi vay tiêu dùng:

  • Hồi quy Logistic (Logit)

  • Hồi quy Probit

  • Hồi quy Complementary log-log (Cloglog)

  • Mô hình xác suất tuyến tính (LMP)

Việc ước lượng các mô hình này được thực hiện bằng phương pháp ước lượng hợp lý tối đa (Maximum Likelihood Estimation – MLE).

Bước 6: Đánh giá và lựa chọn mô hình phù hợp

Tác giả sử dụng các tiêu chí đánh giá mô hình bao gồm:

  • Chỉ số AIC (Akaike Information Criterion)

  • Đường cong ROC và diện tích dưới đường cong (AUC)

Dựa trên kết quả đánh giá, mô hình tốt nhất sẽ được lựa chọn để diễn giải và đề xuất chính sách.

Bước 7: Kết luận và khuyến nghị

Tác giả tổng hợp các kết quả định tính và định lượng, từ đó rút ra các kết luận chính về mối quan hệ giữa các đặc điểm nhân khẩu học và tình trạng mắc bệnh cao huyết áp. Trên cơ sở đó, nghiên cứu đưa ra các khuyến nghị thực tiễn cho tổ chức y tế và người dân nhằm cải thiện sức khỏe cộng đồng.


Chương 3: KẾT QUẢ NGHIÊN CỨU

3.1. Thể Trạng tác động đến MẮC CAO HUYẾT ÁP

3.1.1 Thống kê tần số, tần suất và trực quan hóa cho từng biến

THỐNG KÊ TẦN SỐ, TẦN SUẤT cho biến Mắc cao huyết áp

level_freq <- table(data$Has_Hypertension)
level_percent <- prop.table(level_freq) * 100
data.frame(Has_Hypertension = names(level_freq),
           Frequency = as.numeric(level_freq),
           Percentage = round(as.numeric(level_percent), 1))
##   Has_Hypertension Frequency Percentage
## 1               No       953         48
## 2              Yes      1032         52

Trực quan hoá

# Load thư viện
library(ggplot2)
library(RColorBrewer)  # dùng cho palette màu

# Hàm tái sử dụng để xử lý và vẽ biểu đồ
plot_pie <- function(data, var, title) {
  tab <- table(data[[var]])
  df <- as.data.frame(tab)
  colnames(df) <- c("Category", "Frequency")
  df$Percentage <- df$Frequency / sum(df$Frequency) * 100
  df$Label <- paste0(round(df$Percentage, 1), "%")
  
  ggplot(df, aes(x = "", y = Percentage, fill = Category)) +
    geom_col(width = 1, color = "white") +
    coord_polar(theta = "y") +
    theme_void() +
    geom_text(aes(label = Label), position = position_stack(vjust = 0.5), size = 5) +
    labs(title = title, fill = var) +
    scale_fill_brewer(palette = "Pastel1")
}
plot_pie(data, "Has_Hypertension", "Phân bố tình trạng măc cao huyết áp")

Nhận xét

Trong bộ dữ liệu gồm các cá nhân từ 18 đến 84 tuổi đến khám bệnh, nhóm có chẩn đoán tăng huyết áp chiếm 52% (1.032 trường hợp), cao hơn so với nhóm không mắc, chiếm 48% (953 trường hợp). Điều này cho thấy tỷ lệ hiện mắc tăng huyết áp trong quần thể bệnh nhân được ghi nhận là khá cao và có xu hướng nhỉnh hơn so với nhóm không mắc, phản ánh tính phổ biến của bệnh lý này trong dữ liệu nghiên cứu.

THỐNG KÊ TẦN SỐ, TẦN SUẤT

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

plot_pie(data, "BMI", "THỂ TRẠNG")

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,8% bệnh nhân có chỉ số BMI nằm trong ngưỡng bình thường, trong khi 35,3% thuộc nhóm thừa cân (overweight) và 4,9% thiếu cân (underweight).

3.1.2 Thống kê mô tả cho biến Thể Trạng và MẮC CAO HUYẾT ÁP

3.1.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à MẮC CAO HUYẾT ÁP 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_caohuyetap_bmi <- table(data$Has_Hypertension, data$BMI)
addmargins(table_caohuyetap_bmi)
##      
##       Normal Overweight Underweight  Sum
##   No     368        532          53  953
##   Yes    335        650          47 1032
##   Sum    703       1182         100 1985
3.1.2.2. Trực quan hóa

Kết quả bảng tần số chéo cho thấy nhóm Overweight có số lượng bệnh nhân mắc tăng huyết áp cao nhất (650 trường hợp) và cũng là nhóm có số người không mắc tăng huyết áp lớn nhất (532 trường hợp), phản ánh rằng thừa cân chiếm tỷ trọng cao trong cả hai nhóm nhưng đặc biệt liên quan đến tỷ lệ mắc cao hơn.

Nhóm Normal BMI có phân bố tương đối cân bằng giữa người mắc (335) và không mắc (368), cho thấy mức cân nặng bình thường không loại trừ hoàn toàn nguy cơ tăng huyết áp.

Nhóm Underweight có số lượng ít nhất (53 không mắc; 47 mắc), đồng thời tỷ lệ mắc và không mắc gần tương đương, nhưng do quy mô mẫu nhỏ nên mức độ khái quát cần được cân nhắc.

Phát hiện này đặt ra yêu cầu cần kiểm định mối liên hệ thống kê giữa hai biến này bằng các phương pháp như kiểm định Chi-squared hoặc mô hình hồi quy logistic, nhằm đánh giá xem giới tính có ảnh hưởng độc lập đến nguy cơ mắc cao huyết áp hay không khi kiểm soát các yếu tố khác.

# Bảng chéo
table_caohuyetap_bmi <- table(data$Has_Hypertension, data$BMI)

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

# Biểu đồ
ggplot(df_plot, aes(x = BMI, y = Count, fill = Has_Hypertension)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng mắc cao huyết áp theo giới tính",
       x = "Thể Trạng (BMI)",
       y = "Số lượng Mắc Cao Huyết Áp",
       fill = "Cao Huyết Áp") +
  theme_minimal()

Biểu đồ trên thể hiện mối quan hệ giữa tình trạng BMI (thể trạng) và tình trạng mắc cao huyết áp trong mẫu dữ liệu thu thập từ nhóm bệnh nhân độ tuổi 18–84. Kết quả cho thấy:

  • Nhóm Overweight (thừa cân) chiếm tỷ trọng lớn nhất và có số lượng người mắc cao huyết áp cao hơn rõ rệt so với nhóm không mắc (khoảng 650 so với 532 trường hợp). Điều 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ơ mắc cao huyết áp.

  • Nhóm Normal BMI (cân nặng bình thường) có số lượng người không mắc cao huyết áp (368) nhỉnh hơn so với nhóm mắc (335), nhưng sự chênh lệch không đáng kể. Điều này cho thấy ngay cả trong nhóm có cân nặng bình thường, nguy cơ cao huyết áp vẫn tồn tại ở mức đáng kể.

  • Nhóm Underweight (thiếu cân) có quy mô mẫu nhỏ nhất và tỷ lệ mắc – không mắc gần như tương đương (47 so với 53), đồng thời thấp hơn rất nhiều so với hai nhóm còn lại.

Biểu đồ làm nổi bật xu hướng rằng thừa cân có liên quan đến tỷ lệ mắc cao huyết áp cao hơn trong quần thể nghiên cứu, trong khi nhóm thiếu cân chiếm tỷ lệ rất nhỏ, có thể không đủ lớn để rút ra kết luận mạnh mẽ về mối liên hệ giữa thiếu cân và cao huyết áp.

3.1.3. Phân tích Relative Risk giữa Thể Trạng và MẮC CAO HUYẾT ÁP

install.packages("epitools", repos = "http://cran.rstudio.com")
## Warning: package 'epitools' is in use and will not be installed
library(epitools)

Trong phần này, tôi 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 mắc bệnh cao huyết áp 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(334,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  334   702
## Overweight  532  650  1182
## Underweight  53   47   100
## Total       953 1031  1984
## 
## $measure
##                         NA
## risk ratio with 95% C.I.  estimate     lower    upper
##              Normal      1.0000000        NA       NA
##              Overweight  1.1558102 1.0529395 1.268731
##              Underweight 0.9878443 0.7910661 1.233571
## 
## $p.value
##              NA
## two-sided      midp.exact fisher.exact  chi.square
##   Normal               NA           NA          NA
##   Overweight  0.001864242  0.001935219 0.001841859
##   Underweight 0.915293741  1.000000000 0.913715645
## 
## $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,115 (95% CI: 1,052 – 1,268; p ≈ 0,0018), nghĩa là nguy cơ mắc cao huyết áp ở nhóm này cao hơn khoảng 15,6% 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,987 (95% CI: 0,792 – 1,237; p ≈ 0,91), thể hiện nguy cơ mắc 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 cao huyết áp. Trong khi đó, thiếu cân dường như không làm thay đổi đáng kể nguy cơ mắc 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ệ mắc các bệnh lý tim mạch, đặc biệt là cao huyết áp.

3.1.4. Phân tích Odd Ratio giữa BMI và mắc cao huyết áp

or_result <- oddsratio(tab, rev="columns")
# Xem kết quả
print(or_result)
## $data
##              No  Yes Total
## Normal      368  334   702
## Overweight  532  650  1182
## Underweight  53   47   100
## Total       953 1031  1984
## 
## $measure
##                         NA
## odds ratio with 95% C.I.  estimate     lower    upper
##              Normal      1.0000000        NA       NA
##              Overweight  1.3458995 1.1161231 1.623679
##              Underweight 0.9774286 0.6401855 1.488354
## 
## $p.value
##              NA
## two-sided      midp.exact fisher.exact  chi.square
##   Normal               NA           NA          NA
##   Overweight  0.001864242  0.001935219 0.001841859
##   Underweight 0.915293741  1.000000000 0.913715645
## 
## $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 mắc cao huyết áp 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 mắc cao huyết áp cao hơn nhóm bình thường với OR = 1,345 (95% CI: 1,116 – 1,623; p ≈ 0,001). Đ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 mắc cao huyết áp lớn hơn khoảng 32% 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,981 (95% CI: 0,791 – 1,233; p ≈ 0,91), thể hiện rằng odds mắc cao huyết áp ở 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 mắc cao huyết áp, 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ơ tăng huyết áp 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.

3.1.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 BMI và khả năng mắc bệnh.

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

H₀ (Giả thuyết không) : BMI và mắc cao huyết áp là hai biến độc lập.

H₁ (Giả thuyết đối): BMI và mắc cao huyết áp là hai biến phụ thuộc.

# Kiểm định Chi bình phương
chisq.test(table_caohuyetap_bmi)
## 
##  Pearson's Chi-squared test
## 
## data:  table_caohuyetap_bmi
## X-squared = 10.562, df = 2, p-value = 0.005088

Kết quả kiểm định

\[ \chi^2 = 10.562,\quad df = 2,\quad p\text{-value} = 0.005088 \]

Kết quả kiểm định Pearson’s Chi-squared test cho bảng chéo giữa BMI và tình trạng cao huyết áp cho thấy giá trị thống kê = 10.562 với 2 bậc tự do và giá trị p = 0.005088. Vì p < 0.05, có thể bác bỏ giả thuyết không (H₀) rằng BMI và tình trạng cao huyết áp là độc lập. Điều này hàm ý rằng có mối liên hệ có ý nghĩa thống kê giữa chỉ số BMI và khả năng mắc cao huyết áp trong quần thể được phân tích.

3.1.6. Mô hình hồi quy cho dữ liệu nhị phân

3.1.6.1. Mô hình xác suất tuyến tính
  • Sau khi thực hiện các kiểm định thống kê nhằm đánh giá mối liên hệ giữa bmi và khả năng mắc cao huyết áp, kết quả cho thấy THỪA CÂN có ảnh hưởng rõ rệt đến nguy cơ mắc cao huyết áp. Tuy nhiên, để hiểu rõ hơn về mức độ ảnh hưởng của từng yếu tố cũng như xây dựng một mô hình dự đoán khả năng mắc cao huyết áp, nghiên cứu tiếp tục triển khai phân tích hồi quy tuyến tính.

  • Việc sử dụng mô hình hồi quy giúp định lượng mối liên hệ giữa biến phụ thuộc (mắc cao huyết áp hay không) với các biến độc lập (bmi, tuổi, tiền sử huyết áp, tình trạng hút thuốc,…). Qua đó, ta có thể xác định được yếu tố nào là nguy cơ đáng kể đối với mắc cao huyết áp, cũng như dự đoán khả năng mắc cao huyết áp của một bệnh nhân dựa trên đặc điểm lâm sàng ban đầu.

Để xây dựng mô hình, chúng ta sẽ đặt nhóm Normal làm mức tham chiếu để các hệ số có thể được diễn giải một cách hợp lý.

# Đặt lại nhóm tham chiếu
data$BMI <- relevel(data$BMI, ref = "Normal")
data$Hypertension_bin <- ifelse(data$Has_Hypertension == "Yes", 1, 0)# Chạy lại mô hình hồi quy
model_ref_bio <- glm(Hypertension_bin ~ BMI, data = data)
summary(model_ref_bio)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI, data = data)
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.476529   0.018807  25.338  < 2e-16 ***
## BMIOverweight   0.073386   0.023750   3.090  0.00203 ** 
## BMIUnderweight -0.006529   0.053294  -0.123  0.90251    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2486517)
## 
##     Null deviance: 495.46  on 1984  degrees of freedom
## Residual deviance: 492.83  on 1982  degrees of freedom
## AIC: 2875.7
## 
## Number of Fisher Scoring iterations: 2

Phương trình ước lượng:

\[ \hat{Y} = 0.476529 + 0.073386 \times BMI_{Overweight} - 0.006529 \times BMI_{Underweight} \]

Trong đó:

\(\hat{Y}\): giá trị trung bình biến Hypertension_bin (xấp xỉ xác suất mắc cao huyết áp).

\(BMI_{Overweight}\)\(BMI_{Underweight}\): biến giả (dummy variables), với nhóm tham chiếu là Normal.

Biểu hiện Hệ số Giải thích
(Intercept) 0.476529 Nhóm Normal có xác suất mắc cao huyết áp khoảng 47.9%.
BMIOverweight +0.073386 Nhóm Overweight có xác suất mắc cao huyết áp cao hơn 7% so với nhóm Normal (p = 0.003).
BMIUnderweight -0.006529 Nhóm Underweight không khác biệt đáng kể so với nhóm Normal (p = 0.902).
3.1.6.2. Mô hình Logit

Mô hình hồi quy Logistic là mô hình hồi quy nhị phân phổ biến nhất. Nó thuộc họ GLM với hai đặc điểm chính:

  1. Thành phần ngẫu nhiên: Biến phản hồi \(Y\) tuân theo phân phối Bernoulli (hoặc Binomial).
  2. Hàm liên kết: Sử dụng hàm liên kết Logit, \(g(\pi) = \log\left(\frac{\pi}{1 - \pi}\right)\).

Mô hình giả định rằng logit của xác suất thành công \((\pi = P(Y = 1 \mid \mathbf{X}))\) là một hàm tuyến tính của các biến độc lập:

\[ \text{logit}(\pi) = \log\left(\frac{\pi}{1 - \pi}\right) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k \]

Hàm ngược của nó – hàm logistic – cho phép tính toán xác suất:

\[ \pi = \frac{\exp(\beta_0 + \cdots + \beta_k X_k)}{1 + \exp(\beta_0 + \cdots + \beta_k X_k)} \]

Hàm này luôn tạo ra giá trị \(\pi\) trong khoảng (0, 1) và có dạng hình chữ S.

  • Để đánh giá ảnh hưởng của thể trạng đến khả năng mắc cao huyết áp, mô hình hồi quy logistic (logit) được sử dụng với biến phụ thuộc là khả năng mắc cao huyết áp (0: Không, 1: Có), và biến độc lập là bmi .
  • Mô hình được xây dựng theo công thức:
# Mô hình hồi quy logistic với biến bmi
model_logit_bmi <- glm(Hypertension_bin ~ BMI, family = binomial(link = "logit"), data = data)

# Xem kết quả
summary(model_logit_bmi)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)   
## (Intercept)    -0.09395    0.07551  -1.244  0.21344   
## BMIOverweight   0.29428    0.09550   3.081  0.00206 **
## BMIUnderweight -0.02619    0.21412  -0.122  0.90264   
## ---
## 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: 2738.1  on 1982  degrees of freedom
## AIC: 2744.1
## 
## Number of Fisher Scoring iterations: 3

Mô hình hồi quy Logit là một dạng của hồi quy logistic, sử dụng hàm liên kết logit:

\[ \text{logit}(\pi) = \log\left(\frac{\pi}{1 - \pi}\right) \]

Từ kết quả mô hình, ta thu được phương trình hồi quy logit:

\[ \log\left(\frac{\pi}{1 - \pi}\right) = -0.09395 + 0.29428 \cdot \text{Overweight} -0.02619 \cdot \text{Underweight} \]

Nhóm BMI Hệ số (log-odds) p-value Odds Ratio (\(e^{\beta}\)) Giải thích
(Intercept) -0.09395 0.213 0.91 Nhóm tham chiếu là Bình thường (Normal weight), odds mắc tăng huyết áp cơ bản ~0.91 (không khác biệt có ý nghĩa).
Overweight +0.29428 0.002** 1.34 Nhóm thừa cân có odds mắc tăng huyết áp cao hơn 1.34 lần so với nhóm bình thường (p = 0.002, có ý nghĩa thống kê).
Underweight -0.02619 0.903 0.97 Nhóm thiếu cân không có sự khác biệt đáng kể về odds mắc tăng huyết áp so với nhóm bình thường (p = 0.903).

Tỷ số Odds (Odds Ratio)

# Tính Odds Ratio
exp(coef(model_logit_bmi))
##    (Intercept)  BMIOverweight BMIUnderweight 
##      0.9103261      1.3421614      0.9741481

Nhận xét

  • Phân tích hồi quy logistic được thực hiện nhằm đánh giá ảnh hưởng của tình trạng BMI đến khả năng mắc cao huyết áp. Kết quả cho thấy hệ số ước lượng cho biến BMIOverweight là 0.294 (p = 0.002), cho thấy sự khác biệt có ý nghĩa thống kê giữa nhóm thừa cân và nhóm BMI bình thường (tham chiếu). Cụ thể, nhóm thừa cân có log-odds mắc cao huyết áp cao hơn đáng kể. Khi chuyển đổi sang odds ratio, ta có exp(0.294)≈1.34, nghĩa là nhóm thừa cân có nguy cơ mắc cao huyết áp cao hơn khoảng 34% so với nhóm BMI bình thường.

  • Đối với biến BMIUnderweight, hệ số ước lượng là -0.026 (p = 0.903), không có ý nghĩa thống kê. Điều này cho thấy nhóm thiếu cân không khác biệt rõ rệt về nguy cơ mắc cao huyết áp so với nhóm bình thường.

  • Mô hình có giá trị AIC = 2744.1, phản ánh mức độ phù hợp chấp nhận được đối với dữ liệu đơn biến.

Kết quả này khẳng định thừa cân là một yếu tố nguy cơ đáng kể liên quan đến khả năng mắc cao huyết áp, trong khi thiếu cân không có ảnh hưởng rõ rệt.

3.1.6.3. Mô hình Probit
  • Phân tích mối liên hệ giữa bmi và khả năng mắc cao huyết áp, sử dụng mô hình Probit, nhằm so sánh với mô hình Logit đã thực hiện trước đó.

  • Mô hình hồi quy Probit là một dạng mô hình hồi quy nhị phân, tương tự như Logistic, nhưng sử dụng hàm liên kết dựa trên phân phối chuẩn tắc tích lũy thay vì hàm logit.

  • Thành phần ngẫu nhiên: Biến phản hồi \(Y \in \{0, 1\}\) tuân theo phân phối Bernoulli (hoặc Binomial).

  • Mô hình sử dụng hàm liên kết Probit, là nghịch đảo của hàm phân phối tích lũy (CDF) chuẩn:

\[ g(\pi) = \Phi^{-1}(\pi) \]

trong đó \(\Phi^{-1}\)nghịch đảo của hàm phân phối chuẩn chuẩn hóa (mean = 0, std = 1).

  • Dạng mô hình:

    • Mô hình giả định rằng:

\[ \Phi^{-1}(\pi) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k \]

  • Hay viết lại theo xác suất:

\[ \pi = \Phi(\beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k) \]

  • Diễn giải:

  • Mô hình Probit giả định tồn tại một biến tiềm ẩn \(Z \sim \mathcal{N}(0, 1)\), và xác suất xảy ra sự kiện \(Y = 1\) là xác suất mà biến tiềm ẩn vượt ngưỡng.

  • Vì sử dụng phân phối chuẩn, Probit có nền tảng lý thuyết sâu hơn về xác suất tiềm ẩn, đặc biệt trong các mô hình kinh tế lượng.

  • So sánh với Logistic:

  • Cả hai mô hình đều phù hợp cho dữ liệu nhị phân.

  • Probit thường được sử dụng khi cần giả định tính chuẩn của sai số.

  • Sự khác biệt chính nằm ở hình dạng hàm liên kết: Logistic có đuôi dày hơn (phân phối Logistic có phân phối chuẩn hóa tương tự chuẩn, nhưng biến thiên lớn hơn).

  • Biểu diễn hình chữ S:

Cũng như mô hình logit, mô hình Probit tạo ra xác suất \(\pi \in (0, 1)\) và có đồ thị dạng hàm chữ S (sigmoid), nhưng dốc và tốc độ hội tụ khác so với logit.

# Mô hình Probit
probit_model_bmi <- glm(Hypertension_bin ~ BMI, family = binomial(link = "probit"), data = data)

# Xem kết quả mô hình
summary(probit_model_bmi)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                Estimate Std. Error z value Pr(>|z|)   
## (Intercept)    -0.05887    0.04730  -1.245  0.21330   
## BMIOverweight   0.18431    0.05978   3.083  0.00205 **
## BMIUnderweight -0.01640    0.13408  -0.122  0.90263   
## ---
## 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: 2738.1  on 1982  degrees of freedom
## AIC: 2744.1
## 
## Number of Fisher Scoring iterations: 3
  • Mô hình hồi quy Probit là một dạng của hồi quy nhị phân, sử dụng hàm liên kết dựa trên phân phối chuẩn tắc tích lũy:

\[ g(\pi) = \Phi^{-1}(\pi) \]

  • Từ kết quả mô hình, ta thu được phương trình hồi quy Probit: Mô hình Probit là một dạng hồi quy nhị phân, sử dụng hàm liên kết dựa trên phân phối chuẩn tích lũy:

\[ g(\pi) = \Phi^{-1}(\pi) \]

Từ kết quả mô hình:

\[ \pi = \Phi\left(-0.05887 + 0.18431 \cdot \text{BMIOverweight} - 0.01640 \cdot \text{BMIUnderweight}\right) \]

Khi BMI tăng từ bình thường sang thừa cân, xác suất mắc cao huyết áp tăng thêm: \[ \Phi(-0.05887 + 0.18431) - \Phi(-0.05887) = \Phi(0.12544) - \Phi(-0.05887) \approx 0.5499 - 0.4765 = 0.0734 \]Nhóm thừa cân có xác suất mắc cao huyết áp cao hơn khoảng 7.3% so với nhóm bình thường (có ý nghĩa thống kê).

Diễn giải hệ số

Biến Hệ số (Estimate) p-value Giải thích
(Intercept) -0.05887 0.213 Nhóm BMI bình thường (tham chiếu) có xác suất mắc cao huyết áp khoảng \(\Phi(-0.05887) \approx 47.7\%\). Không có ý nghĩa thống kê.
BMIOverweight +0.18431 0.002 Nhóm thừa cân có xác suất mắc cao huyết áp khoảng \(\Phi(-0.05887+0.18431) \approx 54.8\%\), tăng ~7.1 điểm % so với nhóm bình thường (p < 0.01).
BMIUnderweight -0.01640 0.903 Nhóm thiếu cân có xác suất mắc cao huyết áp gần tương đương nhóm bình thường (≈47%), không có ý nghĩa thống kê.

Nhận xét

  • Thừa cân (Overweight) là yếu tố nguy cơ có ý nghĩa thống kê, làm tăng xác suất mắc cao huyết áp.
  • Thiếu cân (Underweight) không có ảnh hưởng đáng kể.
  • AIC = 2744.1, mức độ phù hợp tương đương với mô hình logistic.
3.1.7. Đánh giá mô hình

Bảng tổng hợp kết quả ba mô hình hồi quy

Mô hình Hệ số chặn \(\hat{\beta}_0\) Hệ số BMIOverweight \(\hat{\beta}_1\) Giá trị p (BMIOverweight) AIC Diễn giải đáng chú ý
GLM 0.4765 0.0734 0.00206 2744.1 Thừa cân làm tăng xác suất mắc cao huyết áp khoảng 7.3%
Logit -0.09395 0.29428 0.00206 2744.1 OR = \(e^{0.29428} \approx 1.34\) (nguy cơ cao hơn ~34%)
Probit -0.05887 0.18431 0.00205 2744.1 \(\Phi(0.1254) - \Phi(-0.0589) \approx 7.3\%\)

Cả ba mô hình đều cho thấy nhóm thừa cân (BMIOverweight) có ảnh hưởng có ý nghĩa thống kê (p ≈ 0.002) đến nguy cơ mắc cao huyết áp, với mức tăng xác suất khoảng 7.3% so với nhóm BMI bình thường.

AIC bằng nhau (2744.1) cho Logit và Probit, cho thấy chúng phù hợp tương đương và đều tốt hơn LPM (GLM tuyến tính) về mặt lý thuyết.

Trong ứng dụng thực tiễn:

Logit được ưu tiên vì dễ diễn giải: người thừa cân có odds mắc cao huyết áp cao hơn khoảng 1.34 lần so với người bình thường.

Probit mô tả tương tự nhưng cần dùng phân phối chuẩn tích lũy để giải thích.

Do đó, mô hình Logit là lựa chọn thích hợp để báo cáo kết quả trong nghiên cứu này.

3.2 Hút thuốc tác động đến khả năng tái bệnh

Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa tình trạng hút thuốc của bệnh nhân và khả năng mắc cao huyết áp ung thư tuyến giáp biệt hóa sau điều trị. Biến độc lập là Smoking (có hoặc không hút thuốc) và biến phụ thuộc là Hypertension (có hoặc không mắc cao huyết áp).

3.2.1 Bảng tần số - tần suất cho biến Hút thuốc (Smoking)
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("lightcyan", "lightcoral"),
        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ố 383 bệnh nhân, có 323 người không hút thuốc (No), chiếm đa số. Trong khi đó, số bệnh nhân có hút thuốc (Yes) là 60 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.
# Tạo dataframe từ bảng tần số
smoking_freq <- as.data.frame(tab_smoking)
colnames(smoking_freq) <- c("Smoking", "Frequency")

# Tính phần trăm
smoking_freq$Percentage <- smoking_freq$Frequency / sum(smoking_freq$Frequency) * 100

# Tạo nhãn
smoking_freq$Label <- paste0(round(smoking_freq$Percentage, 1), "%")

# Vẽ biểu đồ tròn
ggplot(smoking_freq, aes(x = "", y = Percentage, fill = Smoking)) +
  geom_col(width = 1, color = "white") +
  coord_polar(theta = "y") +
  theme_void() +
  geom_text(aes(label = Label), position = position_stack(vjust = 0.5), size = 5) +
  labs(title = "Phân bố tình trạng hút thuốc của các bệnh nhân") +
  scale_fill_manual(values = c("No" = "lightcyan", "Yes" = "lightcoral"))
## Warning: No shared levels found between `names(values)` of the manual scale and the
## data's fill values.
## No shared levels found between `names(values)` of the manual scale and the
## data's fill values.
## No shared levels found between `names(values)` of the manual scale and the
## data's fill values.

  • Biểu đồ tròn cho thấy một cách trực quan rằng nhóm bệnh nhân không hút thuốc chiếm đến 84.3% trong mẫu nghiên cứu, trong khi nhóm hút thuốc chỉ chiếm 15.7%. 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

3.2. Tình trạng hút thuốc của bệnh nhân tác động đến cao huyết áp

Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa tình trạng hút thuốc của bệnh nhân và khả năng mắc bệnh cao huyết áp. Biến độc lập là Smoking_Status (có hoặc không hút thuốc) và biến phụ thuộc là Has_Hypertension (có hoặc không bị cao huyết áp).

3.2.1 Thống kê tần số, tần suất và trực quan hóa

3.2.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("blue", "lightcoral"),
        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

plot_pie(data, "Smoking_Status", "Phân Loại Tình Trạng Hút Thuốc")

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ơ mắc cao huyết áp cao hơn hay không.

3.2.2. Thống kê mô tả cho hai biến Hút thuốc và khả năng mắc cao huyết áp

Chúng ta sẽ lập bảng tần số chéo giữa hai biến Smoking và Has_Hypertension để 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_Hypertension_smoking <- table(data$Smoking, data$Has_Hypertension)
table_Hypertension_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 mắc cao huyết áp và 624 người mắc cao huyết áp. Trong nhóm có hút thuốc (Yes): có 160 người không mắc cao huyết áp và 408 người mắc cao huyết áp.

Một quan sát ban đầu đáng chú ý là ở nhóm hút thuốc, số ca mắc cao huyết áp (408) gần cao hơn gấp gần 3 lần so với số ca không mắc cao huyết áp (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.

3.2.2.1.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_Hypertension_smoking)
colnames(df_plot_smoking) <- c("Smoking_Status", "Has_Hypertension", "Count")

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

ggplot(df_plot_smoking, aes(x = Smoking_Status, y = Count, fill = Has_Hypertension)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng cao huyết 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 cao huyết áp") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "skyblue", "Yes" = "salmon"))

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 mắc cao huyết áp” (màu xanh) cao hơn cột “mắc cao huyết áp” (màu hồng).

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

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ơ mắc cao huyết áp cao hơn. Bệnh nhân hút thuốc dường như có tỷ lệ mắc cao huyết áp cao gấp 250%, trong khi tỷ lệ này ở người không hút thuốc thấp hơn đáng kể.

3.2.3. Phân tích Relative Risk giữa Hút thuốc và khả năng mắc cao huyết áp

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 mắc cao huyết áp. Nhóm không hút thuốc sẽ được coi là nhóm phơi nhiễm gốc (baseline).

riskratio(table_Hypertension_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 tô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 mắc cao huyết áp. Nhóm tham chiếu là bệnh nhân không hút thuốc và không bị mắc cao huyết áp. 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ị mắc cao huyết áp.

Phân tích Risk Ratio (RR) giữa tình trạng hút thuốc và nguy cơ mắc cao huyết áp

Bảng tần số

Nhóm hút thuốc Cao huyết áp (Yes) Không cao huyết áp (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ệ mắc cao huyết áp ở 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ơ mắc cao huyết áp 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:

mắc cao huyết áp 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à mắc cao huyết áp) 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.

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

oddsratio(table_Hypertension_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 mắc cao huyết áp ở nhóm bệnh nhân hút thuốc cao gấp 3.237 lần so với “odds” mắc cao huyết áp ở 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 mắc cao huyết áp trong bộ dữ liệu nghiên cứu.

3.2.5. Thống kê suy diễn

3.2.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 mắc cao huyết áp.

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

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

Kết quả cho thấy giá trị thống kê chi bình phương là 124.38 với 1 bậc tự do, và giá trị p tương ứng là < 2.2 × 10⁻¹. Với p-value nhỏ hơn rất nhiều so với ngưỡng ý nghĩa thông thường (α = 0.05), ta có thể bác bỏ giả thuyết không, rằng hai biến này độ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 mắc cao huyết áp. Cụ thể, những người hút thuốc có xu hướng mắc cao huyết áp với tỷ lệ cao hơn so với những người không hút thuốc. Phát hiện này phù hợp với các nghiên cứu y học trước đây, vốn đã chỉ ra rằng việc hút thuốc làm gia tăng nguy cơ rối loạn chức năng mạch máu, dẫn đến tăng huyết áp và các biến chứng tim mạch liên quan.

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

Để so sánh trực tiếp tỷ lệ mắc cao huyết áp 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ệ mắc cao huyết áp ở nhóm hút thuốc, p2 là tỷ lệ mắc cao huyết áp ở nhóm không hút thuốc.

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

  • H₀: p1 - p2 = 0 (Tỷ lệ mắc cao huyết áp ở hai nhóm là như nhau).

  • H₁: p1 - p2 > 0 (Tỷ lệ mắc cao huyết áp ở nhóm hút thuốc cao hơn nhóm không hút thuốc).

# Số ca mắc cao huyết áp ở 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ệ mắc cao huyết áp ở 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ơ mắc cao huyết áp.

3.2.6. Mô hình hồi quy cho dữ liệu nhị phân

3.2.6.1. Mô hình hồi quy tuyến tính

Chúng ta sẽ xây dựng mô hình hồi quy tuyến tính để xem xét ảnh hưởng của việc hút thuốc đến xác suất mắc cao huyết áp.

# Biến nhị phân Hypertension đã được tạo ở phần trước
Hypertension_bin <- ifelse(data$Has_Hypertension == "Yes", 1, 0)

# Xây dựng mô hình hồi quy tuyến tính
hqtt_model_smoking <- glm(Hypertension_bin ~ Smoking, data = data)

# Hiển thị kết quả
summary(hqtt_model_smoking)
## 
## Call:
## glm(formula = Hypertension_bin ~ Smoking, data = data)
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       0.44037    0.01285   34.26   <2e-16 ***
## SmokingHút thuốc  0.27794    0.02403   11.57   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2340598)
## 
##     Null deviance: 495.46  on 1984  degrees of freedom
## Residual deviance: 464.14  on 1983  degrees of freedom
## AIC: 2754.6
## 
## Number of Fisher Scoring iterations: 2

Nhận xét

Kết quả mô hình hồi quy tuyến tính cho thấy hệ số của biến Smoking (đang hút thuốc) là 0.27794, với p-value rất nhỏ (p < 0.001). Điều này có nghĩa là, so với người không hút thuốc, người có hút thuốc có xác suất mắc cao huyết áp cao hơn trung bình là khoảng 27.7%. Hệ số chặn (0.44037) chính là xác suất mắc cao huyết áp ước tính cho nhóm không hút thuốc.

Mặc dù mô hình này dễ diễn giải, OLS không phải mô hình chuẩn cho dữ liệu nhị phân nên sẽ những hạn chế lý thuyết khi áp dụng cho biến phụ thuộc nhị phân . Do đó, chúng ta sẽ xem xét các mô hình phù hợp hơn như Logit và Probit.

3.2.6.2. Mô hình Logit

Mô hình hồi quy Logistic được áp dụng để mô hình hóa log của tỷ số chênh (log-odds) của việc mắc cao huyết áp.

# Mô hình hồi quy logistic với biến Smoking
model_logit_smoking <- glm(Hypertension_bin ~ Smoking, family = binomial(link = "logit"), data = data)

# Xem kết quả
summary(model_logit_smoking)
## 
## Call:
## glm(formula = Hypertension_bin ~ Smoking, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.23967    0.05351  -4.479 7.51e-06 ***
## SmokingHút thuốc  1.17577    0.10754  10.933  < 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: 2619.6  on 1983  degrees of freedom
## AIC: 2623.6
## 
## Number of Fisher Scoring iterations: 4

Phân tích kết quả Phương trình hồi quy Logit có dạng: \[ \log\left(\frac{\pi}{1 - \pi}\right) = -0.23967 + 1.17577 \cdot \text{Hút thuốc} \]

  • Hệ số chặn \(\hat{\beta}_0 = -0.23967\): Đây là log-odds mắc cao huyết áp của một bệnh nhân không hút thuốc.

  • Hệ số hồi quy \(\hat{\beta}_1 = 1.17577\) (p < 0.001): Cho thấy log-odds mắc cao huyết áp ở người hút thuốc cao hơn 1.17577 đơn vị so với người không hút thuốc.

Tỷ số Odds (Odds Ratio):

# Tính Odds Ratio
exp(coef(model_logit_smoking))
##      (Intercept) SmokingHút thuốc 
##        0.7868852        3.2406250

\[ \text{OR} = e^{1.17577 } \approx 3.2406250 \] Kết quả này cho thấy “odds” măc cao huyết áp ở người hút thuốc cao gấp 3.24 lần so với người không hút thuốc, hoàn toàn phù hợp với kết quả từ hàm oddsratio trước đó, mức độ chênh lệch không quá lớn.

3.2.6.3. Mô hình Probit

Chúng ta tiếp tục với mô hình Probit, sử dụng hàm phân phối tích lũy chuẩn.

# Mô hình Probit với biến Smoking
probit_model_smoking <- glm(Hypertension_bin ~ Smoking, family = binomial(link = "probit"), data = data)

# Xem kết quả mô hình
summary(probit_model_smoking)
## 
## Call:
## glm(formula = Hypertension_bin ~ Smoking, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.15004    0.03343  -4.488 7.19e-06 ***
## SmokingHút thuốc  0.72787    0.06514  11.174  < 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: 2619.6  on 1983  degrees of freedom
## AIC: 2623.6
## 
## Number of Fisher Scoring iterations: 4

Để đánh giá ảnh hưởng của hành vi hút thuốc đến khả năng mắc bệnh cao huyết áp, mô hình hồi quy Probit được xây dựng với biến phụ thuộc là Has_Hypertenison (0: Không mắc cao huyết áp, 1: có mắc cao huyết ấp) và biến độc lập là Smoking (0: không hút thuốc – nhóm tham chiếu, 1: hút thuốc).

Phương trình hồi quy ước lượng như sau:

\[ \pi = \Phi(-0.15004 + 0.72787 \cdot \text{Smoking}) \]

Trong đó: - \(\Phi(\cdot)\): hàm phân phối tích lũy chuẩn tắc (standard normal CDF). - \(\pi\): xác suất mắc bệnh cao huyết áp

Diễn giải kết quả - Hệ số chặn \(\beta_0 = -0.15004\), p < 0.001:
Đại diện cho xác suất mắc cao huyết áp ở nhóm không hút thuốc:

\[ \pi_{\text{không hút}} = \Phi(-0.15004) \approx 0.440 \]

  • Hệ số hồi quy \(\beta_1 = 1.2064\), p < 0.001:
    Khi bệnh nhân có hút thuốc, xác suất mắc cao huyết áp là:

\[ \pi_{\text{hút thuốc}} = \Phi(-0.15004 + 0.72787) = \Phi(0.578) \approx 0.718 \]

So sánh xác suất giữa 2 nhóm

\[ \Delta \pi = \pi_{\text{hút thuốc}} - \pi_{\text{không hút}} \approx 0.718 - 0.440 = 0.278 \]

Kết luận

Mô hình Probit cho thấy người hút thuốc có xác suất mắc cao huyết áp cao hơn khoảng 27.8% so với người không hút thuốc. Cả hai hệ số đều có ý nghĩa thống kê rất cao (p < 0.001), khẳng định rằng hành vi hút thuốc là một yếu tố nguy cơ đáng kể trong sự xuất hiện cao huyết áp, cần được lưu ý trong công tác theo dõi và quản lý sức khỏe.

3.2.6.4. Mô hình cloglog

Mô hình hồi quy cloglog là một dạng mô hình hồi quy nhị phân, sử dụng hàm liên kết bất đối xứng để mô tả mối quan hệ giữa xác suất xảy ra của biến phụ thuộc và các biến độc lập. Hàm liên kết cloglog được định nghĩa như sau:

\[ g(\pi) = \log(-\log(1 - \pi)) \]

Trong đó: - \(\pi = \Pr(Y = 1 \mid X)\) là xác suất xảy ra của hiện tượng quan tâm (ví dụ: mắc cao huyết áp bệnh). - \(g(\pi)\) là hàm liên kết theo cloglog.

Khi áp dụng mô hình hồi quy, ta có phương trình:

\[ \log(-\log(1 - \pi)) = \beta_0 + \beta_1 X_1 + \cdots + \beta_k X_k \]

Giải ngược để tính xác suất:

\[ \pi = 1 - \exp\left( -\exp(\eta) \right), \quad \text{trong đó } \eta = \beta_0 + \sum_{j=1}^{k} \beta_j X_j \]

Đặc điểm của mô hình cloglog

  • Phù hợp khi xác suất xảy ra sự kiện tiệm cận 0 hoặc 1 một cách không đối xứng.
  • Thường được sử dụng trong mô hình rủi ro, phân tích sống sót hoặc khi dữ liệu thiên lệch về một phía.
model_cloglog <- glm(Hypertension_bin ~ Smoking, family = binomial(link = "cloglog"), data = data)
summary(model_cloglog)
## 
## Call:
## glm(formula = Hypertension_bin ~ Smoking, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.54391    0.04060  -13.40   <2e-16 ***
## SmokingHút thuốc  0.78052    0.06667   11.71   <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: 2619.6  on 1983  degrees of freedom
## AIC: 2623.6
## 
## Number of Fisher Scoring iterations: 4

Trong mô hình hồi quy nhị phân với hàm liên kết complementary log-log (cloglog):

\[ g(\pi) = \log(-\log(1 - \pi)) = \beta_0 + \beta_1 \cdot \text{Smoking} \]

Ta thu được phương trình ước lượng:

\[ \log(-\log(1 - \pi)) = -0.54391 + 0.78052 \cdot \text{Smoking} \]

Trong đó: - \(\text{Smoking} = 1\) nếu bệnh nhân hút thuốc, và \(= 0\) nếu không hút thuốc. - Biến phụ thuộc \(\pi\) là xác suất mắc bệnh.

Diễn giải kết quả:

  • Hệ số chặn \(\beta_0 = -0.54391\) (p < 0.001) có ý nghĩa thống kê. Khi bệnh nhân không hút thuốc, xác suất mắc cao huyết áp được tính như sau:

\[ \pi_{\text{không hút thuốc}} = 1 - \exp\left( -\exp(-0.54391) \right) \approx 0.440 \]

  • Hệ số hút thuốc \(\beta_1 = 0.7805\) (p < 0.001): có ý nghĩa thống kê rất cao, cho thấy hành vi hút thuốc làm tăng đáng kể xác suất mắc bệnh. Xác suất mắc bệnh cho nhóm hút thuốc là:

\[ \pi_{\text{hút thuốc}} = 1 - \exp\left( -\exp(−0.5439 + 0.7805) \right) \approx 0.718 \]

Kết luận:

  • Mô hình cloglog cho thấy hút thuốc là một yếu tố nguy cơ đáng kể đối với cao huyết áp (p < 0.001). Xác suất mắc bệnh ở nhóm hút thuốc (71.8%) cao gần 1.63 lần so với nhóm không hút thuốc(44%), và sự khác biệt này có ý nghĩa thống kê mạnh..

  • Mô hình cloglog là lựa chọn phù hợp vì phân phối xác suất xảy ra sự kiện (mắc cao huyết áp) có tính chất bất đối xứng.

3.2.7. Đánh giá mô hình

Bảng tổng hợp 4 mô hình

\[ \begin{array}{|l|l|c|} \hline \textbf{Mô hình} & \textbf{Hàm liên kết (Link function)} & \textbf{AIC} \\ \hline \text{Hồi quy tuyến tính (Linear Regression)} & \text{Identity (Gaussian)} & 2754.6 \\ \hline \text{Hồi quy logistic (Logit)} & \text{Logit} & 2623.6 \\ \hline \text{Hồi quy probit} & \text{Probit} & 2623.6 \\ \hline \text{Hồi quy cloglog} & \text{Complementary log-log} & 2623.6 \\ \hline \end{array} \]

Đánh giá

Trong phân tích mối liên hệ giữa hành vi hút thuốc và khả năng mắc cao huyết áp, tác giả xây dựng và so sánh bốn mô hình: tuyến tính, logit, probit và cloglog.

Mô hình tuyến tính có AIC cao nhất (2754.6), phản ánh mức độ phù hợp thấp hơn đáng kể so với ba mô hình nhị phân.

Ba mô hình logit, probit và cloglog có AIC bằng nhau (2623.6), cho thấy mức độ phù hợp tốt hơn đáng kể.

Dù AIC tương đương, mỗi mô hình có thế mạnh riêng:

  • Logit thuận tiện khi muốn diễn giải bằng Odds Ratio (OR) – một chỉ số phổ biến trong y tế.

  • Probit phù hợp khi giả định phân phối chuẩn tiềm ẩn.

  • Cloglog hiệu quả hơn khi hiện tượng nghiên cứu có phân phối bất đối xứng (ví dụ: bệnh ít gặp hoặc nguy cơ không đối xứng).

Trong nghiên cứu này, cả ba mô hình nhị phân đều cho thấy hút thuốc làm tăng xác suất mắc cao huyết áp một cách có ý nghĩa thống kê (p < 0.001). Nếu ưu tiên khả năng giải thích lâm sàng thông qua OR, logit là lựa chọn thích hợp. Nếu cần mô hình hóa hiện tượng nguy cơ không đối xứng, cloglog có thể là phương án hợp lý hơn.

3.3 Tính chất tiền sử gia đình mắc cao huyết áp tác động đến khả năng mắc cao huyết áp bệnh

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 mắc cao huyết áp của bệnh nhân ( hay ) và khả năng mắc cao huyết áp cao huyết áp biệt hóa . Biến độc lập là Family_History và biến phụ thuộc là Has_Hypertension.

3.3.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 mắc cao huyết áp 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ố tính  của tiền sử gia đình mắc cao huyết áp",
        xlab = "Tính chất tiền sử gia đình mắc cao huyết áp",
        ylab = "Tần số",
        col = c("khaki", "olivedrab"),
        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 mắc cao huyết áp (Yes). Trong khi đó, số bệnh nhân không có tiền sử gia đình mắc cao huyết áp (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
data$Family_History <- ifelse(data$Family_History == "Yes", "Có", "Không")

# Đảm bảo biến vẫn là factor
data$Family_History <- factor(data$Family_History, levels = c("Không", "Có"))

# Kiểm tra kết quả
table(data$Family_History)
## 
## Không    Có 
##  1000   985
plot_pie(data, "Family_History", "Phân Loại Tiền Sử Gia Đình măc cao huyết áp")

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 mắc cao huyết áp chiếm đến 49.6% trong mẫu nghiên cứu, trong khi nhóm không có tiền sử gia đình mắc cao huyết áp chiếm 50.4%. Điều này cho thấy tiền sử gia đình mắc cao huyết áp 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ơ mắc cao huyết áp hay không.

3.3.2. Thống kê mô tả cho hai biến Family_History và khả năng mắc cao huyết áp

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

table_Hypertension_Family_History <- table(data$Family_History, data$Has_Hypertension)
table_Hypertension_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 mắc cao huyết áp (có): có 333 người không mắc cao huyết áp và 652 người mắc cao huyết áp.
  • Trong nhóm tiền sử gia đình không mắc cao huyết áp (không): có 620 người không mắc cao huyết áp và 380 người mắc cao huyết áp.

Điều này cho thấy tình trạng tiền sử gia đình mắc cao huyết áp có thể liên quan đến nguy cơ mắc cao huyết áp cao hơn so với tiền sử gia đình mắc cao huyết áp . 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_Hypertension_Family_History <- table(data$Family_History, data$Has_Hypertension)

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

# Vẽ biểu đồ
ggplot(df_plot_Family_History, aes(x = Family_History, y = Count, fill = Has_Hypertension)) +
  geom_col(position = "dodge") +
  labs(title = "Tình trạng mắc cao huyết áp theo tính  của tiền sử gia đình mắc cao huyết áp",
       x = "Tính chất tiền sử gia đình mắc cao huyết áp (Family_History)",
       y = "Số lượng bệnh nhân",
       fill = "Mắc cao huyết áp") +
  theme_minimal() +
  scale_fill_manual(values = c("No" = "skyblue", "Yes" = "salmon"))

  • 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 mắc cao huyết áp (Không): Cột “Không mắc cao huyết áp” cao hơn hẳn cột “mắc cao huyết áp”.
    • Ở nhóm tiền sử gia đình mắc cao huyết áp (Có): Cột “mắc cao huyết áp” lại cao hơn gấp đôi cột “Không mắc cao huyết áp”.
  • Biểu đồ củng cố mạnh mẽ giả thuyết rằng việc tiền sử gia đình mắc cao huyết áp có tính liên quan đến nguy cơ mắc cao huyết áp cao hơn. Bệnh nhân có tiền sử gia đình mắc cao huyết áp dường như có tỷ lệ mắc cao huyết áp cao hơn 50%, trong khi tỷ lệ này ở người có tiền sử gia đình mắc cao huyết áp thấp hơn đáng kể.

3.3.3. Phân tích Relative Risk giữa Family_History và khả năng mắc cao huyết áp

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 mắc cao huyết áp. Nhóm có tiền sử gia đình mắc cao huyết áp sẽ được coi là nhóm tham chiếu.

riskratio(table_Hypertension_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ệ mắc bệnh ở nhóm phơi nhiễm}}{\text{Tỷ lệ mắc bệnh ở nhóm không phơi nhiễm}} \]

  • Nhóm phơi nhiễm (Có tiền sử gia đình mắc bệnh):

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

  • Nhóm không phơi nhiễm (Không có tiền sử gia đình mắc bệ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ị cao huyết áp có nguy cơ mắc cao huyết áp 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 mắc cao huyết áp.

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 mắc cao huyết áp (Family_History) và khả năng mắc cao huyết áp bệnh, ta thấy rằng ở nhóm tiền sử gia đình mắc cao huyết áp (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 mắc cao huyết áp và khả năng mắc cao huyết áp bệnh là có ý nghĩa thống kê. Nói cách khác, tính chất của tiền sử gia đình mắc cao huyết áp có thể là một yếu tố nguy cơ làm tăng khả năng mắc cao huyết áp.

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

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

oddsratio(table_Hypertension_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ị cao huyết áp = 652
  • \(b\): số người Có tiền sử gia đình nhưng không bị cao huyết áp = 333
  • \(c\): số người Không có tiền sử gia đìnhbị cao huyết áp = 380
  • \(d\): số người Không có tiền sử gia đìnhkhông bị cao huyết áp = 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ị cao huyết áp có odds mắc cao huyết áp 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 cao huyết áp.

3.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 tính và khả năng mắc cao huyết áp.

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

H₀ (Giả thuyết không): Tính chất Tiền sử gia đình và khả năng mắc cao huyết áp 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 mắc cao huyết áp và khả năng mắc cao huyết áp là hai biến phụ thuộc (có mối liên hệ).

# Kiểm định Chi bình phương
chisq.test(table_Hypertension_Family_History)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  table_Hypertension_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 mắc cao huyết áp là hay và khả năng mắc cao huyết áp bệnh.

Để so sánh trực tiếp tỷ lệ mắc cao huyết áp 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ệ mắc cao huyết áp ở nhóm có tiền sử gia đình mắc bệnh , p2 là tỷ lệ mắc cao huyết áp ở nhóm không có tiền sử gia đình mắc bệnh .

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

H₀: p1 - p2 = 0 (Tỷ lệ mắc cao huyết áp ở hai nhóm là như nhau). H₁: p1 - p2 > 0 (Tỷ lệ mắc cao huyết áp ở nhóm có tiền sử gia đình mắc bệnh cao hơn nhóm còn lại ).

# Số ca mắc cao huyết áp ở 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ệ mắc cao huyết áp ở nhóm bệnh nhân có tiền sử gia đình mắc cao huyết áp (p₁ = 66.2%) cao hơn rõ rệt so với nhóm có tiền sử gia đình mắc cao huyết áp (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ệ mắc cao huyết áp ở 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ử.

3.3.6. Mô hình hồi quy cho dữ liệu nhị phân

3.3.6.1. Mô hình hồi quy tuyến tính

Chúng ta xây dựng mô hình hồi quy tuyến tính để xem xét ảnh hưởng của tính chất tiền sử gia đình mắc cao huyết áp đến xác suất mắc cao huyết áp.

# Biến nhị phân Has_Hypertension_bin đã được tạo ở phần trước
Has_Hypertension_bin <- ifelse(data$Has_Hypertension == "Yes", 1, 0)

# Xây dựng mô hình hồi quy tuyến tính
hqtt_model_Family_History <- glm(Has_Hypertension_bin ~ Family_History, data = data)

# Hiển thị kết quả
summary(hqtt_model_Family_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ Family_History, data = data)
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       0.38000    0.01516   25.06   <2e-16 ***
## Family_HistoryCó  0.28193    0.02153   13.10   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2299659)
## 
##     Null deviance: 495.46  on 1984  degrees of freedom
## Residual deviance: 456.02  on 1983  degrees of freedom
## AIC: 2719.6
## 
## Number of Fisher Scoring iterations: 2

Kết quả hồi quy tuyến tính: Ảnh hưởng của tiền sử gia đình đến khả năng mắc cao huyết áp

Kết quả mô hình hồi quy tuyến tính:

Hệ số chặn (Intercept) = 0.38000, p < 2e-16
Đại diện cho xác suất mắc cao huyết áp ở nhóm không có tiền sử gia đình mắc bệnh, khoảng 38.0%.

Hệ số Family_HistoryCó = 0.28193, p < 2e-16
Nhóm có tiền sử gia đình mắc bệnh có xác suất mắc cao huyết áp tăng thêm 28.2 điểm phần trăm so với nhóm không có tiền sử.
Xác suất dự đoán cho nhóm này là: \[ p_{\text{ có}} = 0.38000 + 0.28193 = 0.66193 \approx 66.2\% \]

Ý nghĩa thống kê: p-value rất nhỏ (< 0.001), chứng tỏ mối quan hệ giữa tiền sử gia đình và khả năng mắc cao huyết áp rất có ý nghĩa thống kê.

3.3.6.2. Mô hình Logit

Mô hình hồi quy Logistic được áp dụng để mô hình hóa log của tỷ số chênh (log-odds) của việc mắc cao huyết áp.

# Mô hình hồi quy logistic với biến Family_History
model_logit_Family_History <- glm(Has_Hypertension_bin ~ Family_History, family = binomial(link = "logit"), data = data)

# Xem kết quả
summary(model_logit_Family_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ Family_History, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.48955    0.06515  -7.514 5.73e-14 ***
## Family_HistoryCó  1.16145    0.09371  12.394  < 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: 2588.4  on 1983  degrees of freedom
## AIC: 2592.4
## 
## Number of Fisher Scoring iterations: 4
exp(coef(model_logit_Family_History))
##      (Intercept) Family_HistoryCó 
##        0.6129032        3.1945630

Dựa trên kết quả, phương trình hồi quy logistic ước lượng khả năng mắc cao huyết áp bệnh (Has_Hypertension_bin) theo đặc điểm tiền sử gia đình mắc cao huyết áp (Family_History) như sau:

\[ \log\left( \frac{P(\text{mắc cao huyết áp})}{1 - P(\text{mắc cao huyết áp})} \right) = -0.48955 + 1.16145 \times \text{Family_History}_{\text{Yes}} \]

Nhận xét:

Hệ số hồi quy \(1.16145\) cho nhóm tiền sử gia đình mắc cao huyết áp (Yes) có ý nghĩa thống kê rất cao (p-value rất bé)), cho thấy sự khác biệt có ý nghĩa giữa hai nhóm. Cụ thể, khả năng mắc cao huyết áp bệnh ở bệnh nhân có tiền sử gia đình mắc cao huyết áp cao hơn đáng kể so với bệnh nhân không có tiền sử gia đình mắc cao huyết áp .

  • Khi không có tiền sử gia đình, xác suất mắc cao huyết áp:

\[ \pi_{\text{Không}} = \frac{e^{-0.4896}}{1 + e^{-0.4896}} \approx 0.613 \] tương đương 61.3%

  • Khi có tiền sử gia đình, xác suất là:

\[ \pi_{\text{Có}} = \frac{e^{-0.4896 + 1.1615}}{1 + e^{-0.4896 + 1.1615}} \approx 0.805 \] tương đương 80.5%

  • Odds Ratio (OR):

\[ \text{OR} = e^{1.1615} \approx 3.19 \]

→ Những người có tiền sử gia đình mắc bệnh có odds mắc cao huyết áp cao hơn khoảng 3.19 lần so với nhóm không có tiền sử gia đình.

Kết luận:

Tiền sử gia đình là một yếu tố nguy cơ quan trọng, có ảnh hưởng đáng kể và có ý nghĩa thống kê mạnh mẽ đến khả năng mắc cao huyết áp. Những cá nhân có tiền sử gia đình mắc bệnh cần được quan tâm và theo dõi nhiều hơn trong các chương trình phòng ngừa.

3.3.6.2. Mô hình Probit
# Mô hình Probit với biến Family_History
probit_model_Family_History <- glm(Has_Hypertension_bin ~ Family_History, family = binomial(link = "probit"), data = data)

# Xem kết quả mô hình
summary(probit_model_Family_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ Family_History, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.30548    0.04031  -7.578 3.51e-14 ***
## Family_HistoryCó  0.72321    0.05766  12.543  < 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: 2588.4  on 1983  degrees of freedom
## AIC: 2592.4
## 
## Number of Fisher Scoring iterations: 4

Mô hình hồi quy Probit được sử dụng để phân tích mối liên hệ giữa tiền sử gia đình (Family_History) và xác suất mắc cao huyết áp. Phương trình hồi quy ước lượng:

\[ \Phi^{-1}(\pi) = -0.3055 + 0.7232 \times \text{Family\_HistoryCó} \]

Trong đó:

  • \(\pi\) là xác suất mắc cao huyết áp.

  • \(\Phi^{-1}(\pi)\) là hàm nghịch đảo của phân phối chuẩn tích lũy (CDF chuẩn tắc).

  • Nhóm tham chiếu: “Không có tiền sử gia đình” (Family_History = Không).

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

\[ \pi_{\text{Không}} = \Phi(-0.3055) \approx 0.380 \]

  • Khi có tiền sử gia đình:

\[ \pi_{\text{Có}} = \Phi(-0.3055 + 0.7232) = \Phi(0.4177) \approx 0.662 \]

  • Chênh lệch xác suất:

\[ \Delta\pi = \pi_{\text{Có}} - \pi_{\text{Không}} \approx 0.662 - 0.380 = 0.282 \]

→ Những người có tiền sử gia đình mắc bệnh có xác suất mắc cao huyết áp cao hơn khoảng 28.2 phần trăm so với nhóm không có tiền sử.

Kết luận:

Tiền sử gia đình là một yếu tố nguy cơ quan trọng và có ý nghĩa thống kê mạnh (p < 0.001), làm tăng đáng kể khả năng mắc cao huyết áp. Mô hình Probit cho phép ước lượng trực tiếp xác suất, phù hợp khi giả định phân phối chuẩn cho biến tiềm ẩn.

3.3.6.3. Mô hình cloglog
# Mô hình cloglog với biến Family_History
cloglog_model_Family_History <- glm(Has_Hypertension_bin ~ Family_History, family = binomial(link = "cloglog"), data = data)

# Xem kết quả mô hình
summary(cloglog_model_Family_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ Family_History, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)      -0.73807    0.05179  -14.25   <2e-16 ***
## Family_HistoryCó  0.81919    0.06612   12.39   <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: 2588.4  on 1983  degrees of freedom
## AIC: 2592.4
## 
## Number of Fisher Scoring iterations: 5

Kết quả hồi quy cloglog cho biến Family_History

Mô hình hồi quy nhị phân với hàm liên kết complementary log-log (cloglog) được sử dụng để đánh giá ảnh hưởng của tiền sử gia đình (Family_History) đến xác suất mắc cao huyết áp. Phương trình ước lượng:

\[ \log\left(-\log(1 - \pi)\right) = -0.7381 + 0.8192 \times \text{Family\_HistoryCó} \]

Trong đó:

  • \(\pi\) là xác suất mắc cao huyết áp.

  • Nhóm tham chiếu: “Không có tiền sử gia đình” (Family_History = Không).

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

\[ \pi_{\text{Không}} = 1 - \exp\left[-\exp(-0.7381)\right] \approx 0.380 \]

  • Khi có tiền sử gia đình:

\[ \pi_{\text{Có}} = 1 - \exp\left[-\exp(-0.7381 + 0.8192)\right] \approx 0.662 \]

  • Chênh lệch xác suất:

\[ \Delta\pi = \pi_{\text{Có}} - \pi_{\text{Không}} \approx 0.662 - 0.380 = 0.282 \]

→ Nhóm có tiền sử gia đình mắc bệnh có xác suất bị cao huyết áp cao hơn khoảng 28.2 điểm phần trăm so với nhóm không có tiền sử.

Kết luận:

Tiền sử gia đình có tác động rõ rệt và có ý nghĩa thống kê rất mạnh (p < 0.001) đến nguy cơ mắc cao huyết áp. Hàm liên kết cloglog phù hợp khi xác suất xảy ra sự kiện mang tính bất đối xứng, và kết quả mô hình này cũng nhất quán với các mô hình Logit và Probit.

3.3.7. Đánh giá mô hình

Bảng tổng hợp 4 mô hình | Mô hình | Hệ số (Estimate) | P-value | AIC | Diễn giải | | ——————————- | —————- | ————- | —— | ————————————————————————— | | Hồi quy tuyến tính (Linear) | 0.2819 | <2e-16 *** | 2719.6 | Không phù hợp cho biến phụ thuộc nhị phân, chỉ mang tính minh họa | | Logistic regression (logit) | 1.1615 | <2e-16 *** | 2592.4 | Mô hình chuẩn cho dữ liệu nhị phân, dễ diễn giải qua Odds Ratio | | Probit regression | 0.7232 | <2e-16 *** | 2592.4 | Giả định phân phối chuẩn, kết quả tương tự logit | | Complementary log-log (cloglog) | 0.8192 | <2e-16 *** | 2592.4 | Phù hợp nếu biến sự kiện hiếm, nhưng ở đây tần suất cao nên không cần thiết |

Nhận xét

  • Cả 4 mô hình đều cho thấy Family_History (tiền sử gia đình) có tác động tích cực và có ý nghĩa thống kê cao (p < 0.001) đến khả năng mắc cao huyết áp.

    • Linear regression tuy cho hệ số có ý nghĩa nhưng không phù hợp về mặt lý thuyết vì biến phụ thuộc là nhị phân.

    • Logistic regression (logit) là lựa chọn hợp lý nhất: có AIC thấp nhất (2592.4), kết quả rõ ràng, dễ diễn giải qua Odds Ratio (OR ≈ 3.19).

    • Probit regression cho kết quả tương tự logit và có thể sử dụng thay thế khi muốn giả định phân phối chuẩn.

    • Cloglog regression thích hợp trong trường hợp sự kiện hiếm, nhưng ở đây tỷ lệ mắc cao huyết áp không hiếm → cloglog không có lợi thế rõ rệt.

3.4. Exercise_Level - Mức độ vận động thể thao tác động đến mắc bệnh cao huyết áp

3.4.1 Thống kê tần số, tần suất và trực quan hóa

THỐNG KÊ TẦN SỐ, TẦN SUẤT

affect_freq <- table(data$Exercise_Level)
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     High       391       19.7
## 2      Low       936       47.2
## 3 Moderate       658       33.1

Trực quan hóa

plot_pie(data, "Exercise_Level", "Phân Loại Mức Độ Vận Động")

tab_Ex<- table(data$Exercise_Level)
tab_Ex
## 
##     High      Low Moderate 
##      391      936      658
barplot(tab_Ex,
        main = "Biểu đồ tần số mức độ vận động",
        xlab = "mức độ vận động",
        ylab = "Tần số",
        col = c("skyblue", "lightgreen", "lightcoral"),
        border = "white",
        ylim = c(0, max(tab_Ex) + 40)) -> bp_Exercise_Level

text(x = bp_Exercise_Level, y = tab_Ex + 15, labels = tab_Ex)

Bảng dịch thuật

Mức độ vận động (tiếng Anh) Tiếng Việt tương ứng
HIGH Vận động cao
Moderate Vận động bình thường
Low Ít vận động

Nhận xét

  • Nhóm ít vận động (Low) chiếm tỷ lệ cao nhất với 47,2% (936 người), cho thấy gần một nửa số đối tượng khảo sát có thói quen vận động hạn chế.

  • Nhóm vận động trung bình (Moderate) chiếm 33,1% (658 người), phản ánh một bộ phận đáng kể có mức vận động ở mức vừa phải.

  • Nhóm vận động cao (High) chỉ chiếm 19,7% (391 người), cho thấy tỷ lệ duy trì thói quen vận động tích cực trong cộng đồng nghiên cứu còn khá thấp.

Kết quả này cho thấy đa số đối tượng không đạt được mức vận động cao, điều này có thể liên quan đến nguy cơ gia tăng các bệnh lý mạn tính, đặc biệt là cao huyết áp. Việc nâng cao nhận thức và khuyến khích lối sống năng động hơn là cần thiết để cải thiện sức khỏe tim mạch trong quần thể này.

3.4.2. Thống kê mô tả cho hai biến Exercise_Level và khả năng mắc cao huyết áp

Chúng ta sẽ lập bảng tần số chéo giữa hai biến Exercise_Level và Has_Hypertension để 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à mắc cao huyết áp
table_Hypertension_Exercise_Level <- table(data$Exercise_Level, data$Has_Hypertension)

# Thêm hàng và cột tổng
addmargins(table_Hypertension_Exercise_Level)
##           
##              No  Yes  Sum
##   High      178  213  391
##   Low       464  472  936
##   Moderate  311  347  658
##   Sum       953 1032 1985
  • Hight: 391 bệnh nhân, có 213 ca mắc cao huyết áp

  • Low: 936 bệnh nhân, 472 ca mắc cao huyết áp

  • Moderate: 658 bệnh nhân, 347 ca mắc cao huyết áp

Để làm rõ hơn nhận định mức độ vận động có liên quan đến bệnh cao huyết áp , 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_Exercise_Level <- as.data.frame(table_Hypertension_Exercise_Level)
colnames(df_plot_Exercise_Level) <- c("Exercise_Level", "Has_Hypertension", "Count")

# Đảm bảo thứ tự tiền sử huyết áp theo lâm sàng
df_plot_Exercise_Level$Exercise_Level <- factor(df_plot_Exercise_Level$Exercise_Level,
                                    levels = c("High", "Moderate", 
                                               "Low"))

# Vẽ biểu đồ cột tỷ lệ
library(ggplot2)
ggplot(df_plot_Exercise_Level, aes(x = Exercise_Level, y = Count, fill = Has_Hypertension)) +
  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 mắc cao huyết áp", "mắc cao huyết áp")) +
  labs(title = "Tỷ lệ mắc cao huyết áp theo tiền sử huyết áp điều trị",
       x = "mức độ vận động thể chất",
       y = "Tỷ lệ (%)",
       fill = "Tình trạng mắc cao huyết áp") +
  theme_minimal(base_size = 13) +
  theme(axis.text.x = element_text(angle = 25, hjust = 1))

Kết quả phân tích cho thấy tỷ lệ mắc cao huyết áp tăng dần theo mức độ vận động thể chất: nhóm vận động thấp có tỷ lệ cao huyết áp khoảng 50.4% (472/936), nhóm vận động trung bình là 52.7% (347/658), trong khi nhóm vận động cao đạt 54.5% (213/391).

Hiện tượng này không hoàn toàn phù hợp với giả thuyết phổ biến rằng vận động thường xuyên giúp giảm nguy cơ cao huyết áp. Nguyên nhân có thể bao gồm:

  • Cường độ vận động: vận động quá mức hoặc thiếu phục hồi có thể làm tăng đáp ứng thần kinh giao cảm và dẫn đến huyết áp cao hơn.

  • Phân bố tuổi và giới: nếu nhóm vận động cao có tỷ lệ nam giới hoặc người lớn tuổi cao hơn, nguy cơ tăng huyết áp cũng sẽ tăng theo.

Do đó, kết quả này cần được xem xét thận trọng. Để khẳng định mối quan hệ thực sự, cần phân tích sâu hơn bằng các mô hình hồi quy đa biến để kiểm soát các biến nhiễu như tuổi, giới, BMI, tiền sử gia đình và hút thuốc.

3.4.3. Phân tích Relative Risk giữa Exercise_Level và khả năng mắc cao huyết áp

Chúng ta sẽ tính toán Nguy cơ tương đối (RR), lấy nhóm High làm nhóm tham chiếu.

riskratio(table_Hypertension_Exercise_Level)
## $data
##           
##             No  Yes Total
##   High     178  213   391
##   Low      464  472   936
##   Moderate 311  347   658
##   Total    953 1032  1985
## 
## $measure
##           risk ratio with 95% C.I.
##             estimate     lower    upper
##   High     1.0000000        NA       NA
##   Low      0.9256852 0.8287161 1.034001
##   Moderate 0.9680566 0.8620798 1.087061
## 
## $p.value
##           two-sided
##            midp.exact fisher.exact chi.square
##   High             NA           NA         NA
##   Low       0.1791991    0.1853514  0.1785202
##   Moderate  0.5858372    0.6088444  0.5848650
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

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

  • Nhóm LowRR = 0.926 (KTC 95%: 0.829 – 1.034, p ≈ 0.18), tức nguy cơ mắc cao huyết áp thấp hơn khoảng 7.4% so với nhóm vận động cao (High), nhưng sự khác biệt không có ý nghĩa thống kê (p > 0.05).

  • Nhóm ModerateRR = 0.968 (KTC 95%: 0.862 – 1.087, p ≈ 0.59), sự khác biệt so với nhóm High rất nhỏ và cũng không có ý nghĩa thống kê.

Kết luận: Không tìm thấy bằng chứng thống kê cho thấy mức độ vận động thể chất (Low hoặc Moderate) làm thay đổi nguy cơ mắc cao huyết áp so với nhóm vận động cao. Điều này có thể chịu ảnh hưởng bởi các yếu tố gây nhiễu khác

3.4.4. Phân tích Odd Ratio giữa Exercise_Level và khả năng mắc cao huyết áp

oddsratio(table_Hypertension_Exercise_Level)
## $data
##           
##             No  Yes Total
##   High     178  213   391
##   Low      464  472   936
##   Moderate 311  347   658
##   Total    953 1032  1985
## 
## $measure
##           odds ratio with 95% C.I.
##             estimate     lower    upper
##   High     1.0000000        NA       NA
##   Low      0.8502878 0.6705946 1.077231
##   Moderate 0.9325529 0.7250605 1.198703
## 
## $p.value
##           two-sided
##            midp.exact fisher.exact chi.square
##   High             NA           NA         NA
##   Low       0.1791991    0.1853514  0.1785202
##   Moderate  0.5858372    0.6088444  0.5848650
## 
## $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 mắc cao huyết áp bệnh giữa các nhóm mức độ vận động thể chất, với nhóm high được chọn làm nhóm tham chiếu.

Kết quả phân tích:

  • Nhóm LowOR = 0.85 (KTC 95%: 0.671 – 1.077, p ≈ 0.18), cho thấy odds mắc cao huyết áp thấp hơn khoảng 15% so với nhóm vận động cao (High), nhưng sự khác biệt không có ý nghĩa thống kê (p > 0.05).

  • Nhóm ModerateOR = 0.93 (KTC 95%: 0.725 – 1.199, p ≈ 0.59), sự khác biệt so với nhóm High rất nhỏ và cũng không có ý nghĩa thống kê.

Kết luận: Không có bằng chứng thống kê cho thấy mức độ vận động thể chất (Low hoặc Moderate) ảnh hưởng đáng kể đến odds mắc cao huyết áp so với nhóm vận động cao.

Do đó, để tiếp tục tìm kiếm các yếu tố liên quan chặt chẽ hơn đến biến phụ thuộc, tôi sẽ chuyển sang phân tích các biến khác

3.5. Loại thuốc sử dụng tác động đến khả năng mắc bệnh cao huyết áp

Trong phần này, chúng ta sẽ phân tích mối liên hệ giữa loại thuốc bệnh nhân đang sử dụng và khả năng mắc cao huyết. Biến độc lập là Medication (với các loại thuốc: None: Không, Other, Diuretic, Beta Blocker, ACE Inhibitor) và biến phụ thuộc là Has_Hypertension (có hoặc không mắc cao huyết áp).

3.5.1 Bảng tần số - tần suất cho biến Medication

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

tab_Medication <- table(data$Medication)
tab_Medication
## 
## ACE Inhibitor  Beta Blocker      Diuretic          None         Other 
##           323           412           245           799           206

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_Medication,
        main = "Biểu đồ tần số các loại thuốc",
        xlab = "Loai thuốc sử dụng",
        ylab = "Tần số",
        col = c("skyblue", "lightgreen", "lightcoral", "plum"),
        border = "white",
        ylim = c(0, max(tab_Medication) + 40)) -> bp_Medication

text(x = bp_Medication, y = tab_Medication + 20, labels = tab_Medication)

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:

    • Nhóm không sử dụng thuốc (None) chiếm tỷ lệ lớn nhất (799 trường hợp), cho thấy phần lớn đối tượng khảo sát chưa hoặc không điều trị bằng các loại thuốc này.

    • Trong các nhóm dùng thuốc, Beta Blocker là loại được sử dụng phổ biến nhất (412 trường hợp), tiếp theo là ACE Inhibitor (323), Diuretic (245) và nhóm thuốc khác (Other: 206).

    • Phân bố này gợi ý rằng điều trị bằng thuốc hạ huyết áp chưa đồng đều; phần lớn người tham gia chưa can thiệp bằng thuốc hoặc đang ở giai đoạn tiền điều trị.

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.

plot_pie(data, "Medication", "Phân Loại Thuốc đang sử dụng")

Biểu đồ hình tròn thể hiện rõ sự phân bố các tiền sử huyết áp điều trị của bệnh nhân cao huyết áp. Trong đó:

  • Nhóm “None” chiếm tỷ lệ cao nhất (40.3%), phản ánh rằng phần lớn đối tượng khảo sát chưa hoặc không điều trị bằng thuốc hạ huyết áp.

  • Trong nhóm sử dụng thuốc, Beta Blocker (20.8%) là loại được dùng nhiều nhất, tiếp theo là ACE Inhibitor (16.3%) và Diuretic (12.3%).

  • Nhóm thuốc khác (Other: 10.4%) chiếm tỷ lệ thấp, cho thấy ít người sử dụng các loại thuốc ngoài ba nhóm chính trên.

Nhìn chung, đa số bệnh nhân có sử dụng thuốc và cũng có khá nhiều người không sử dụng thuốc

3.5.2. Thống kê mô tả cho hai biến Medication và khả năng mắc cao huyết áp

Chúng ta sẽ lập bảng tần số chéo giữa hai biến Medication và Has_Hypertension để 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à mắc cao huyết áp
table_caohuyetap_Medication <- table(data$Medication, data$Has_Hypertension)

# Thêm hàng và cột tổng
addmargins(table_caohuyetap_Medication)
##                
##                   No  Yes  Sum
##   ACE Inhibitor  162  161  323
##   Beta Blocker   198  214  412
##   Diuretic       106  139  245
##   None           387  412  799
##   Other          100  106  206
##   Sum            953 1032 1985

Nhận xét

Phân bố tỷ lệ cao huyết áp theo nhóm thuốc

  • Nhóm Beta Blocker và Diuretic có tỷ lệ người mắc cao huyết áp (Yes/Sum) tương đối cao (≈ 52% và 57%).

  • Nhóm ACE Inhibitor gần như cân bằng (≈ 50%).

  • Nhóm None (không dùng thuốc) vẫn có tỷ lệ mắc cao (≈ 51%), cho thấy một bộ phận lớn người chưa điều trị nhưng vẫn đang trong tình trạng tăng huyết áp.

  • Nhóm Other có tỷ lệ tương tự (≈ 51%).

Để 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_Medication <- as.data.frame(table_caohuyetap_Medication)
colnames(df_plot_Medication) <- c("Medication", "Has_Hypertension", "Count")

# Đảm bảo thứ tự tiền sử huyết áp theo lâm sàng
df_plot_Medication$Medication <- factor(df_plot_Medication$Medication,
                                    levels = c("ACE Inhibitor", "Beta Blocke", 
                                               "Diuretic", "None", "Other"))

# Vẽ biểu đồ cột tỷ lệ
library(ggplot2)
ggplot(df_plot_Medication, aes(x = Medication, y = Count, fill = Has_Hypertension)) +
  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 mắc cao huyết áp", "mắc cao huyết áp")) +
  labs(title = "Tỷ lệ mắc cao huyết áp theo tiền sử huyết áp điều trị",
       x = "Loại thuốc sử dụng",
       y = "Tỷ lệ (%)",
       fill = "Tình trạng mắc 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ệ mắc cao huyết áp của các bệnh nhân sử dụng thuốc xoay quanh mức 50%. Cụ thể:

  • Đáng chú ý, nhóm Diuretic có tỷ lệ mắc cao huyết áp cao nhất trong các loại thuốc. Và nhóm sử dụng thuốc ACE Inhibitor có tỷ lệ mắc bệnh thấp nhất

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

Chúng ta sẽ tính toán Nguy cơ tương đối (RR), lấy nhóm ACE Inhibitor làm nhóm tham chiếu.

riskratio(table_caohuyetap_Medication)
## $data
##                
##                  No  Yes Total
##   ACE Inhibitor 162  161   323
##   Beta Blocker  198  214   412
##   Diuretic      106  139   245
##   None          387  412   799
##   Other         100  106   206
##   Total         953 1032  1985
## 
## $measure
##                risk ratio with 95% C.I.
##                 estimate     lower    upper
##   ACE Inhibitor 1.000000        NA       NA
##   Beta Blocker  1.042061 0.9027545 1.202865
##   Diuretic      1.138218 0.9751053 1.328615
##   None          1.034492 0.9098497 1.176209
##   Other         1.032322 0.8692564 1.225978
## 
## $p.value
##                two-sided
##                 midp.exact fisher.exact chi.square
##   ACE Inhibitor         NA           NA         NA
##   Beta Blocker   0.5735937    0.6030279  0.5725314
##   Diuretic       0.1043914    0.1076337  0.1033157
##   None           0.6026652    0.6443691  0.6019404
##   Other          0.7189603    0.7223335  0.7178046
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

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

Nhóm Beta Blocker:

RR = 1.04 (95% CI: 0.90–1.20), p ≈ 0.57.

Nguy cơ mắc cao huyết áp cao hơn khoảng 4% so với nhóm ACE Inhibitor, nhưng không có ý nghĩa thống kê.

Nhóm Diuretic:

RR = 1.14 (95% CI: 0.98–1.33), p ≈ 0.10.

Nguy cơ cao hơn 14% so với ACE Inhibitor. Mặc dù xu hướng tăng rõ hơn, nhưng vẫn chưa đạt ý nghĩa thống kê (p > 0.05).

Nhóm None (không dùng thuốc):

RR = 1.03 (95% CI: 0.91–1.18), p ≈ 0.60.

Nguy cơ gần như không khác biệt so với ACE Inhibitor.

Nhóm Other:

RR = 1.03 (95% CI: 0.87–1.23), p ≈ 0.72.

Nguy cơ tương tự nhóm ACE Inhibitor và không có ý nghĩa thống kê.

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

oddsratio(table_caohuyetap_Medication)
## $data
##                
##                  No  Yes Total
##   ACE Inhibitor 162  161   323
##   Beta Blocker  198  214   412
##   Diuretic      106  139   245
##   None          387  412   799
##   Other         100  106   206
##   Total         953 1032  1985
## 
## $measure
##                odds ratio with 95% C.I.
##                 estimate     lower    upper
##   ACE Inhibitor 1.000000        NA       NA
##   Beta Blocker  1.087368 0.8122338 1.456085
##   Diuretic      1.318547 0.9444570 1.843942
##   None          1.071139 0.8269012 1.387668
##   Other         1.066390 0.7513407 1.514189
## 
## $p.value
##                two-sided
##                 midp.exact fisher.exact chi.square
##   ACE Inhibitor         NA           NA         NA
##   Beta Blocker   0.5735937    0.6030279  0.5725314
##   Diuretic       0.1043914    0.1076337  0.1033157
##   None           0.6026652    0.6443691  0.6019404
##   Other          0.7189603    0.7223335  0.7178046
## 
## $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 mắc cao huyết áp bệnh giữa các nhóm thuốc khác nhau, với nhóm ACE Inhibitor được chọn làm nhóm tham chiếu.

Nhóm Beta Blocker RR = 1.04 (95% CI: 0.90–1.20), p ≈ 0.57.

OR = 1.09 (95% CI: 0.81–1.46), p ≈ 0.57.

Cả RR và OR đều cho thấy nguy cơ cao huyết áp cao hơn khoảng 4–9% so với ACE Inhibitor, nhưng không có ý nghĩa thống kê.

Nhóm Diuretic RR = 1.14 (95% CI: 0.98–1.33), p ≈ 0.10.

OR = 1.32 (95% CI: 0.94–1.84), p ≈ 0.10.

Có xu hướng tăng nguy cơ cao huyết áp nhiều nhất (14–32%), nhưng chưa đạt ý nghĩa thống kê (p > 0.05).

Nhóm None (không dùng thuốc) RR = 1.03 (95% CI: 0.91–1.18), p ≈ 0.60.

OR = 1.07 (95% CI: 0.83–1.39), p ≈ 0.60.

Nguy cơ gần như tương đương với nhóm ACE Inhibitor.

Nhóm Other RR = 1.03 (95% CI: 0.87–1.23), p ≈ 0.72.

OR = 1.07 (95% CI: 0.75–1.51), p ≈ 0.72.

Không có sự khác biệt có ý nghĩa thống kê.

Kết Luận

Phân tích ban đầu cho thấy không có sự khác biệt có ý nghĩa thống kê về tỷ lệ mắc cao huyết áp giữa các nhóm thuốc (p > 0.05 ở tất cả các nhóm). Điều này cho thấy loại thuốc hiện tại có thể không phải là yếu tố dự báo chính trong bộ dữ liệu này.

Do đó, để tiếp tục tìm kiếm các yếu tố liên quan chặt chẽ hơn đến biến phụ thuộc, tôi sẽ chuyển sang phân tích các biến khác

3.6. Tiền sử huyết áp tác động đến khả năng cao huyết áp bệnh

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 cao huyết áp. Biến độc lập là BP_History (với 3 mức độ: “Normal”: Bình thường ,“Hypertension”: cao huyết áp, “Prehypertension”: tiền tăng huyết áp) và biến phụ thuộc là Has_Hypertension (có hoặc không cao huyết áp).

3.6.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
plot_pie(data, "BP_History", "Phân Loại tiền sử huyết áp")

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ăng huyết áp 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.

3.6.2. Thống kê mô tả cho hai biến BP_History và khả năng cao huyết áp bệnh

Chúng ta sẽ lập bảng tần số chéo giữa hai biến BP_History và Has_Hypertension để 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à cao huyết áp
table_caohuyetap_BP_History <- table(data$BP_History, data$Has_Hypertension)

# 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 cao huyết áp → nguy cơ rất cao.

  • Normal: 796 bệnh nhân, 286 ca cao huyết áp → nguy cơ trung bình.

  • Prehypertension: 620 bệnh nhân, 218 ca cao huyết áp → nguy cơ trung bình.

  • Structural Incomplete: 91 bệnh nhân, 89 ca cao huyết áp → nguy cơ rất cao.

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

Để 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_Hypertension", "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_Hypertension)) +
  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ệ cao huyết áp 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ệ cao huyết áp bệnh 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 cao huyết áp

    • Nhóm Normal có tỷ lệ mắc bệnh cao huyết áp khoảng 35%.

    • Nhóm Prehypertension (tiền tăng huyết áp) có tỷ lệ mắc bệnh cao huyết áp khoảng 35%.

  • Đáng chú ý, nhóm Hypertension có tỷ lệ cao huyết áp 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 cao huyết áp, trong đó tiền sử tăng huyết áp là yếu tố nguy cơ cao nhất.

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

Chúng ta sẽ tính toá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ơ cao huyết áp bệnh ở 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 cao huyết áp 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 cao huyết áp ở 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.

3.6.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 cao huyết áp bệnh 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ị cao huyết áp 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 cao huyết áp 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).

3.6.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 cao huyết áp.

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

H₀ (Giả thuyết không): tiền sử huyết áp và khả năn mắc bệnh cao huyết áp là hai biến độc lập. H₁ (Giả thuyết đối): tiền sử huyết áp và khả năn mắ bệnh cao huyết áp 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 cao huyết áp.

Nói cách khác, khả năng mắc bệnh cao huyết áp 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.

####3.6.6. Mô hình hồi quy cho dữ liệu nhị phân

3.6.6.1. Hồi quy tuyến tính

Để xây dựng mô hình, chúng ta sẽ đặt nhóm Normal làm mức tham chiếu để các hệ số có thể được diễn giải một cách hợp lý.

# Đặt lại nhóm tham chiếu
data$BP_History <- relevel(data$BP_History, ref = "Normal")

# Chạy lại mô hình hồi quy
model_ref_bio <- glm(Has_Hypertension_bin ~ BP_History, data = data)
summary(model_ref_bio)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ BP_History, data = data)
## 
## Coefficients:
##                            Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                0.359296   0.015161  23.699   <2e-16 ***
## BP_HistoryHypertension     0.568647   0.023482  24.216   <2e-16 ***
## BP_HistoryPrehypertension -0.007684   0.022912  -0.335    0.737    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.1829643)
## 
##     Null deviance: 495.46  on 1984  degrees of freedom
## Residual deviance: 362.64  on 1982  degrees of freedom
## AIC: 2266.7
## 
## Number of Fisher Scoring iterations: 2

Phương trình hồi quy tuyến tính

\[ \hat{Y} = 0.359296 + 0.568647 \cdot \text{Hypertension } -0.007684 \cdot \text{Prehypertension} \]

Trong đó:

  • \(\hat{Y}\) là xác suất cao huyết áp bệnh.
  • Các biến là dummy variables so với nhóm tham chiếu là Normal.
Biểu hiện (BP_History) Hệ số Giải thích
\(\text{(Intercept)}\) (Normal) 0.3593 Nhóm Normal có xác suất mắc cao huyết áp khoảng 35.9%.
Hypertension +0.5686 Nhóm Hypertension có xác suất mắc cao huyết áp cao hơn 56.9 điểm % so với nhóm Normal (p < 0.001), tức khoảng 92.8%.
Prehypertension –0.0077 Nhóm Prehypertension có xác suất mắc cao huyết áp gần như tương đương với nhóm Normal (p = 0.737), khoảng 35.2%.
3.6.6.2. Hồi quy logit

Xét mô hình hồi quy logistic với biến phụ thuộc là khả năng mắc bệnh cao huyết áp và biến độc lập là tiền sử huyết áp (BP_History), với nhóm tham chiếu là Biochemical Incomplete.

# Mô hình hồi quy logistic với biến BP_History
model_logit_BP_History <- glm(Has_Hypertension_bin ~ BP_History, family = binomial(link = "logit"), data = data)
summary(model_logit_BP_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ BP_History, family = binomial(link = "logit"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -0.57842    0.07387   -7.83 4.88e-15 ***
## BP_HistoryHypertension     3.13394    0.17816   17.59  < 2e-16 ***
## BP_HistoryPrehypertension -0.03354    0.11195   -0.30    0.764    
## ---
## 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: 2138.3  on 1982  degrees of freedom
## AIC: 2144.3
## 
## Number of Fisher Scoring iterations: 5
exp(coef(model_logit_BP_History))
##               (Intercept)    BP_HistoryHypertension BP_HistoryPrehypertension 
##                 0.5607843                22.9643527                 0.9670181

Tỷ số Odds (Odds Ratio)

\[ \log\left( \frac{\hat{p}}{1 - \hat{p}} \right) = -0.57842 +3.1339 \cdot \text{Hypertension} - 0.0335 \cdot \text{Prehypertension} \]

Diễn giải hệ số hồi quy

Biểu hiện (BP_History) Hệ số (log-odds) Giải thích
\(\text{(Intercept)}\) – Normal –0.5784 Nhóm Normal có log-odds mắc cao huyết áp là –0.5784, tương đương xác suất khoảng 56.1%.
Hypertension +3.1339 Nhóm Hypertension có log-odds cao hơn đáng kể so với Normal (p < 0.001). Odds tăng gấp \(e^{3.1339} \approx 22.96\) lần, xác suất mắc cao huyết áp ~97.8%.
Prehypertension –0.0335 Nhóm Prehypertension có log-odds gần như tương đương nhóm Normal (p = 0.764), odds ratio ≈ 0.97, xác suất ~54.3%.

Nhận xét

  • Mô hình cho thấy tiền sử huyết áp là yếu tố dự báo mạnh mẽ cho khả năng mắc bệnh cao huyết áp.

  • Nhóm Hypertension có nguy cơ hiện mắc cao huyết áp rất cao, với odds tăng gấp khoảng 23 lần so với nhóm Normal (p < 0.001).

  • Nhóm Prehypertension không có sự khác biệt đáng kể so với nhóm Normal (p = 0.764), cho thấy giai đoạn tiền tăng huyết áp chưa làm tăng xác suất mắc cao huyết áp rõ rệt trong mô hình này.

Kết luận: Mô hình logistic khẳng định rằng tiền sử đã bị tăng huyết áp là yếu tố liên quan mạnh nhất đến khả năng hiện mắc cao huyết áp.

3.6.6.3. Hồi quy probit

Áp dụng mô hình hồi quy Probit để phân tích mối quan hệ giữa tiền sử huyết áp (BP_History) và khả năng mắc bệnh cao huyết áp (Has_Hypertension_bin), trong đó nhóm tham chiếu là Normal.

# Mô hình Probit với biến BP_History
probit_model_BP_History <- glm(Has_Hypertension_bin ~ BP_History, family = binomial(link = "probit"), data = data)
summary(probit_model_BP_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ BP_History, family = binomial(link = "probit"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -0.36034    0.04549  -7.922 2.34e-15 ***
## BP_HistoryHypertension     1.82099    0.09113  19.983  < 2e-16 ***
## BP_HistoryPrehypertension -0.02063    0.06885  -0.300    0.764    
## ---
## 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: 2138.3  on 1982  degrees of freedom
## AIC: 2144.3
## 
## Number of Fisher Scoring iterations: 5

\[ \Phi^{-1}(\hat{p}) = -0.36034 + 1.82099 \cdot \text{Hypertension} - 0.02063 \cdot \text{Prehypertension} \]

Trong đó:

\[\Phi^{-1}(\hat{p})\] là hàm nghịch đảo phân phối chuẩn tích lũy của xác suất mắc bệnh cao huyết áp.

Các biến là biến giả (dummy) tương ứng với các nhóm so với nhóm tham chiếu là Normal.

Diễn giải hệ số hồi quy

Nhóm (BP_History) Hệ số (Estimate) Giải thích
(Intercept) -0.36034 Đây là giá trị z-score (ngưỡng phân phối chuẩn) của logit cho nhóm tham chiếu (Normal). Xác suất tương ứng khoảng \(Φ(-0.36034) ≈ 0.36\) (tức 36%).
Hypertension +1.82099 Nhóm Hypertension có z-score tăng thêm 1.82 so với nhóm tham chiếu (p < 0.001), tương ứng xác suất mắc cao huyết áp rất cao (ước tính \(Φ(-0.36034 + 1.82099) ≈ 0.87\), tức 87%).
Prehypertension -0.02063 Nhóm Prehypertension không khác biệt đáng kể so với nhóm tham chiếu (p = 0.764), xác suất ước tính gần như tương đương (≈ 36%).

Nhận xét

  • Mô hình probit xác nhận rõ ràng rằng tiền sử huyết áp cao là một yếu tố dự đoán mạnh mẽ cho khả năng mắc bệnh cao huyết áp.

  • AIC = 2144.3, bằng với mô hình logistic, cho thấy mức độ phù hợp tương đương.

  • Kết quả hoàn toàn nhất quán với mô hình logistic, cho thấy độ tin cậy cao trong việc khẳng định mối liên hệ giữa tiền sử huyết áp và mắc bệnh cao huyết áp.

3.6.6.4. Hồi quy cloglog

Mô hình hồi quy Cloglog được sử dụng để dự đoán xác suất mắc bệnh cao huyết áp (Has_Hypertension_bin) dựa trên mức độ đáp ứng (BP_History) sau điều trị. Mô hình đặc biệt phù hợp trong trường hợp biến phụ thuộc có phân phối bất cân xứng (tức là xác suất sự kiện xảy ra gần 0 hoặc gần 1).

# Mô hình cloglog với biến BP_History
cloglog_model_BP_History <- glm(Has_Hypertension_bin ~ BP_History, family = binomial(link = "cloglog"), data = data)
summary(cloglog_model_BP_History)
## 
## Call:
## glm(formula = Has_Hypertension_bin ~ BP_History, family = binomial(link = "cloglog"), 
##     data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -0.80926    0.05962 -13.573   <2e-16 ***
## BP_HistoryHypertension     1.77636    0.08262  21.501   <2e-16 ***
## BP_HistoryPrehypertension -0.02714    0.09063  -0.299    0.765    
## ---
## 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: 2138.3  on 1982  degrees of freedom
## AIC: 2144.3
## 
## Number of Fisher Scoring iterations: 5

\[ \log(-\log(1 - \hat{p})) = -0.80926 + 1.77636 \cdot \text{Hypertension} - 0.02714\cdot \text{Prehypertension} \]

Diễn giải hệ số hồi quy

Nhóm (BP_History) Hệ số (Estimate) Giải thích
(Intercept) -0.80926 Đây là log(-log(1-p)) của nhóm tham chiếu (Normal). Tương ứng xác suất mắc cao huyết áp khoảng \(p ≈ 0.31\) (31%).
Hypertension +1.77636 Nhóm Hypertension làm tăng đáng kể log(-log(1-p)) (p < 0.001), xác suất ước tính tăng lên khoảng 87%.
Prehypertension -0.02714 Nhóm Prehypertension không khác biệt đáng kể với nhóm tham chiếu (p = 0.765), xác suất gần như không thay đổi (≈ 31%).

Nhận xét

  • Tương tự như các mô hình hồi quy nhị phân khác (logistic và probit), mô hình cloglog xác nhận rằng tiền sử huyết áp là yếu tố ảnh hưởng mạnh đến nguy cơ mắc bệnh cao huyết áp.

  • Nhóm Hypertension là yếu tố dự báo mạnh nhất, tăng xác suất mắc cao huyết áp từ 31% (Normal) → ~87%.

  • AIC = 2144.3, bằng với logit và probit, cho thấy mức độ phù hợp tương tự.

  • Dù hàm liên kết khác, kết quả nhất quán với các mô hình trước, cho thấy tính ổn định và đáng tin cậy của biến BP_History trong tiên lượng bệnh.

3.6.7. Đánh giá các mô hình

Bảng tổng hợp chỉ số AIC của 4 mô hình hồi quy

Mô hình Hàm liên kết (Link function) AIC Phù hợp với dữ liệu nhị phân?
Linear Probability Model (LPM) Không có (mô hình tuyến tính thông thường) 2266.7 ❌ Không phù hợp
Logit \(\log\left(\frac{p}{1 - p}\right)\) 2144.3 ✅ Phù hợp
Probit \(\Phi^{-1}(p)\) 2144.3 ✅ Phù hợp
Cloglog \(\log(-\log(1 - p))\) 2144.3 ✅ Phù hợp
  • Trong việc phân tích mối quan hệ giữa BP_History và khả năng mắc cao huyết áp, tất cả các mô hình đều cho cùng một kết luận: tiền sử huyết áp cao là yếu tố dự báo mạnh mẽ cho nguy cơ mắc bệnh.

  • Khi so sánh AIC, Mô hình hồi quy tuyến tính có AIC cao (2266.7) và không phù hợp cho biến phụ thuộc nhị phân. Ba mô hình Logit, Probit và Cloglog đều có AIC thấp hơn (2144.3), cho thấy mức độ phù hợp vượt trội.

Mặc dù Logit, Probit và Cloglog có AIC bằng nhau, Logit là lựa chọn ưu tiên trong phân tích lâm sàng, vì:

  • Dễ diễn giải thông qua Tỷ số chênh (Odds Ratio).

  • Cho phép kết luận rõ ràng: Nhóm có tiền sử Hypertension có odds mắc cao huyết áp cao gấp ~23 lần so với nhóm tham chiếu (Normal), với ý nghĩa thống kê rất cao (p < 0.001).

Do đó, Logit là mô hình được khuyến nghị để trình bày và báo cáo kết quả trong nghiên cứu này

3.7 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 mắc bệnh co huyết áp (Has_Hypertension), bước tiếp theo là xây dựng một mô hình hồi quy đa biến.

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.

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

# Linear Probability Model
model_lpm <- lm(Hypertension_bin ~ BMI + Smoking_Status + BP_History + Family_History, data = data)
summary(model_lpm)
## 
## Call:
## lm(formula = Hypertension_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)               9.307e-02  2.062e-02   4.514 6.75e-06 ***
## BMIOverweight             6.844e-02  1.823e-02   3.755 0.000179 ***
## BMIUnderweight            3.670e-02  4.094e-02   0.897 0.370065    
## Smoking_StatusSmoker      2.758e-01  1.901e-02  14.507  < 2e-16 ***
## BP_HistoryHypertension    5.711e-01  2.102e-02  27.173  < 2e-16 ***
## BP_HistoryPrehypertension 8.947e-05  2.051e-02   0.004 0.996520    
## Family_HistoryCó          2.853e-01  1.719e-02  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.66420 + 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{Normall} \\ - 0.57105 \cdot \text{BP_History}_\text{Prehypertension} + 0.28528 \cdot \text{Family_History}_\text{Yes} \]

3.7.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 tái phát \(\hat{\pi}\) của bệnh nhân dựa trên các yếu tố: giới tính, hút thuốc, tiền sử xạ trị, ổ tổn thương và đáp ứng điều trị.

  • Biến phụ thuộc: Hypertension_bin (biến nhị phân: có/không tái phát).

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

3.7.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 (Hypertension_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 mắc cao huyết áp.

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

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

  • Smoking_StatusSmoker: Hệ số 0.27581 (p < 0.001) → người hút thuốc có xác suất mắc cao huyết áp 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 mắc cao huyết áp thấp hơn 57.1 điểm % so với nhóm tham chiếu (Hypertension).

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

  • Family_HistoryYes: Hệ số 0.28528 (p < 0.001) → tiền sử gia đình mắc bệnh tăng huyết áp làm tăng xác suất mắc cao huyết áp thêm 28.5%.

3.7.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 mắc cao huyết áp.

  • 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.

3.7.2 Mô hình Logit

# Logit
model_logit <- glm(Hypertension_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                   family = binomial(link = "logit"), data = data)
summary(model_logit)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -2.598346   0.167167 -15.543  < 2e-16 ***
## BMIOverweight              0.467596   0.129269   3.617 0.000298 ***
## BMIUnderweight             0.248343   0.286458   0.867 0.385972    
## Smoking_StatusSmoker       1.878064   0.143594  13.079  < 2e-16 ***
## BP_HistoryHypertension     3.961422   0.207258  19.113  < 2e-16 ***
## BP_HistoryPrehypertension  0.006073   0.130423   0.047 0.962859    
## Family_HistoryCó           1.979471   0.136064  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
3.7.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 Hypertension_bin (0: không tái phát, 1: tái phát).

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),
3.7.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.

3.7.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} \]

3.7.2.4. Nhận xét chi tiết
Biến Hệ số \(\beta\) OR (odds ratio) Giá trị p Ý nghĩa thống kê Diễn giải ý nghĩa
(Intercept) 1.3631 3.908 < 0.001 Xác suất cơ bản mắc cao huyết áp tương đối cao ở nhóm tham chiếu.
BMIOverweight 0.4676 1.596 0.000298 Người thừa cân có odds mắc cao huyết áp cao hơn ~1.6 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_StatusSmoker 1.8781 6.539 < 2e-16 Người hút thuốc có odds mắc cao huyết áp cao gấp ~6.5 lần so với người không hút.
BP_HistoryNormal -3.9614 0.019 < 2e-16 Người có tiền sử huyết áp bình thường có odds mắc cao huyết áp thấp hơn rất nhiều (~98%) so với nhóm tham chiếu (Hypertension).
BP_HistoryPrehypertension -3.9553 0.019 < 2e-16 Người tiền tăng huyết áp cũng có odds thấp tương tự (~98% thấp hơn nhóm Hypertension).
Family_HistoryYes 1.9795 7.237 < 2e-16 Có tiền sử gia đình mắc bệnh làm tăng odds mắc cao huyết áp ~7.2 lần.

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

3.7.2.5. Kết luận
  • Mô hình logit phù hợp để dự đoán khả năng mắc cao huyết áp.
  • 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 cao huyết áp.

3.7.3 Mô hình Probit

# Probit
model_probit <- glm(Hypertension_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                    family = binomial(link = "probit"), data = data)
summary(model_probit)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "probit"), data = data)
## 
## Coefficients:
##                            Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -1.506336   0.091012 -16.551  < 2e-16 ***
## BMIOverweight              0.272890   0.074668   3.655 0.000257 ***
## BMIUnderweight             0.106949   0.165618   0.646 0.518436    
## Smoking_StatusSmoker       1.095287   0.080880  13.542  < 2e-16 ***
## BP_HistoryHypertension     2.314644   0.110888  20.874  < 2e-16 ***
## BP_HistoryPrehypertension -0.006321   0.076520  -0.083 0.934167    
## Family_HistoryCó           1.146317   0.074754  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
3.7.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 mắc cao huyết áp.

3.7.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.
3.7.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
(Intercept) 0.80831 < 0.001 Nhóm tham chiếu có log-probit dương → xác suất cơ bản khá cao.
BMIOverweight 0.27289 0.000257 Người thừa cân có xác suất mắc cao huyết áp 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 mắc cao huyết áp cao hơn đáng kể.
BP_HistoryNormal -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 mắc cao huyết áp.
3.7.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ơ mắc cao huyết áp.
  • 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.

3.7.4 Mô hình Cloglog

# Cloglog
model_cloglog <- glm(Hypertension_bin ~ BMI + Smoking_Status + BP_History + Family_History,
                     family = binomial(link = "cloglog"), data = data)
summary(model_cloglog)
## 
## Call:
## glm(formula = Hypertension_bin ~ BMI + Smoking_Status + BP_History + 
##     Family_History, family = binomial(link = "cloglog"), data = data)
## 
## Coefficients:
##                           Estimate Std. Error z value Pr(>|z|)    
## (Intercept)               -2.25067    0.12339 -18.241  < 2e-16 ***
## 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_HistoryHypertension     2.56855    0.12764  20.123  < 2e-16 ***
## BP_HistoryPrehypertension -0.03704    0.09485  -0.391 0.696131    
## 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
3.7.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 mắc cao huyết áp. - Hàm liên kết là \(g(\pi) = \log(-\log(1 - \pi))\).


3.7.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.
3.7.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
(Intercept) 0.31787 0.00109 Xác suất cơ bản của nhóm tham chiếu khá cao.
BMIOverweight 0.29497 0.00077 Người thừa cân có xác suất mắc cao huyết áp 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_HistoryNormal -2.56855 < 2e-16 Huyết áp bình thường làm giảm mạnh nguy cơ mắc cao huyết áp.
BP_HistoryPrehypertension -2.60559 < 2e-16 Tiền tăng huyết áp cũng giảm nguy cơ đáng kể.
Family_HistoryYes 1.41020 < 2e-16 Có tiền sử gia đình mắc bệnh làm tăng mạnh nguy cơ mắc cao huyết áp.

3.7.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ơ mắc cao huyết áp.
  • 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).

3.8 Đánh giá và lựa chọn mô hình phù hợp

3.8.1 Đánh giá thông qua chỉ số AIC

Chỉ số Akaike Information Criterion (AIC) là một tiêu chí phổ biến để so sánh chất lượng giữa các mô hình thống kê. AIC đo lường sự đánh đổi giữa độ phù hợp và độ phức tạp của mô hình. Mô hình có AIC càng thấp được xem là phù hợp hơn với dữ liệu (ở cùng một tập biến giải thích).

# 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 cao huyết áp.

3.8.2 Đánh giá thông qua đường cong ROC và diện tích AUC

Đường cong ROC (Receiver Operating Characteristic) là một công cụ trực quan hóa hiệu quả phân loại của mô hình bằng cách mô tả mối quan hệ giữa tỷ lệ dương đúng (True Positive Rate - TPR) và tỷ lệ dương giả (False Positive Rate - FPR) tại các ngưỡng phân loại khác nhau. ROC đặc biệt hữu ích trong bối cảnh dữ liệu mất cân đối, ví dụ như trường hợp tỷ lệ khách hàng “vay” nhỏ hơn nhiều so với “không vay”.

Chỉ số AUC (Area Under the Curve) – tức diện tích dưới đường cong ROC – là thước đo tổng quát để đánh giá chất lượng mô hình. Giá trị AUC nằm trong khoảng từ 0 đến 1, trong đó:

  • AUC = 0.5: Mô hình không có khả năng phân biệt, tương đương với đoán ngẫu nhiên.

  • 0.7 ≤ AUC < 0.8: Mô hình có chất lượng phân loại khá.

  • 0.8 ≤ AUC < 0.9: Mô hình có chất lượng tốt.

  • AUC ≥ 0.9: Mô hình phân loại rất tốt.

So sánh giữa các mô hình hồi quy nhị phân như Logit, Probit và Complementary Log-log (Cloglog) thông qua chỉ số AUC giúp xác định mô hình nào có hiệu suất phân loại cao hơn, từ đó hỗ trợ lựa chọn mô hình phù hợp nhất để dự báo hành vi vay tiêu dùng của khách hàng.

# 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 = Hypertension_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_Hypertension,
    predictor = predicted_probs_cloglog,
    levels = c("No", "Yes"),
    direction = "<"
  )
})

# Vẽ biểu đồ ROC
plot(roc_cloglog, col = "#1f77b4", 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(Hypertension_bin ~ BMI + Smoking_Status + BP_History + 
                     Family_History, family = binomial(link = "logit"), data = data)

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

model_cloglog <- glm(Hypertension_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_Hypertension, predictor = pred_logit, levels = c("No", "Yes"), direction = "<")
  roc_probit <- roc(response = data$Has_Hypertension, predictor = pred_probit, levels = c("No", "Yes"), direction = "<")
  roc_cloglog <- roc(response = data$Has_Hypertension, predictor = pred_cloglog, levels = c("No", "Yes"), direction = "<")
})

# Vẽ ROC đầu tiên
plot(roc_logit, col = "#d95f02", 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 = "#e7298a", 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("#d95f02", "#7570b3", "#e7298a"),
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 mắc cao huyết áp 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 4: KẾT LUẬN VÀ KIẾN NGHỊ

4.1 Kết luận

Nghiên cứu này đã tập trung phân tích các yếu tố ảnh hưởng đến nguy cơ mắc bệnh cao huyết áp ở người trưởng thành bằng cách ứng dụng các phương pháp phân tích dữ liệu định lượng trên bộ dữ liệu “Hypertension Risk Prediction Dataset”. Thông qua việc triển khai các mô hình hồi quy nhị phân bao gồm Logit, Probit và Cloglog, nghiên cứu đã xác định được mức độ tác động của các yếu tố như chỉ số khối cơ thể (BMI), thói quen hút thuốc, tiền sử huyết áp và tiền sử gia đình đến xác suất mắc bệnh cao huyết áp.

Kết quả phân tích cho thấy các yếu tố như BMI (đặc biệt ở nhóm thừa cân), tình trạng hút thuốc, tiền sử huyết áp và tiền sử gia đình đều có ảnh hưởng thống kê đáng kể đến nguy cơ mắc bệnh. Trong đó, hút thuốc và tiền sử huyết áp nổi bật là hai yếu tố có tác động mạnh nhất. Cụ thể, mô hình Logit chỉ ra rằng những người hút thuốc có odds ratio (OR) cao gấp 6.5 lần và những người có tiền sử gia đình mắc bệnh cao huyết áp có OR cao gấp 7.2 lần so với nhóm không có các đặc điểm này, cho thấy nguy cơ mắc bệnh tăng lên đáng kể.

Về hiệu quả dự đoán, nghiên cứu đã so sánh các mô hình thông qua các chỉ số như AIC và đường cong ROC. Mô hình Cloglog đạt AIC thấp nhất (1699.13), chứng tỏ đây là mô hình phù hợp nhất trong việc dự đoán nguy cơ mắc bệnh cao huyết áp trong bộ dữ liệu này. Các mô hình Logit (AIC = 1712.38) và Probit (AIC = 1705.56) cũng cho thấy hiệu suất tốt, với chỉ số AUC đạt 0.873 trên đường cong ROC, phản ánh khả năng phân loại chính xác cao của cả ba mô hình. Điều này khẳng định rằng các yếu tố được chọn trong nghiên cứu có giá trị dự đoán mạnh mẽ đối với nguy cơ mắc bệnh.

Từ các kết quả trên, có thể kết luận rằng việc kiểm soát các yếu tố hành vi như hút thuốc và duy trì chỉ số BMI ở mức bình thường đóng vai trò quan trọng trong việc giảm thiểu nguy cơ mắc bệnh cao huyết áp. Đồng thời, tiền sử huyết áp và tiền sử gia đình là những yếu tố không thể thay đổi nhưng cần được lưu ý để phát hiện và can thiệp sớm.

4.2 Kiến nghị

Dựa trên những phát hiện từ nghiên cứu, dưới đây là một số kiến nghị của tác giả nhằm nâng cao hiệu quả phòng ngừa và kiểm soát bệnh cao huyết áp trong cộng đồng:

Tăng cường nhận thức cộng đồng: Các cơ quan y tế và tổ chức xã hội cần đẩy mạnh các chương trình giáo dục sức khỏe, tập trung vào việc nâng cao nhận thức về tác hại của hút thuốc và tầm quan trọng của việc duy trì BMI ở mức hợp lý. Các chiến dịch truyền thông nên sử dụng dữ liệu khoa học để khuyến khích thay đổi lối sống lành mạnh.

Khuyến khích sàng lọc định kỳ: Người trưởng thành, đặc biệt là những người có tiền sử gia đình mắc bệnh cao huyết áp hoặc thuộc nhóm nguy cơ cao (như người hút thuốc, thừa cân), nên được khuyến khích kiểm tra huyết áp định kỳ. Các cơ sở y tế cần tạo điều kiện thuận lợi để tăng khả năng tiếp cận dịch vụ này.

Triển khai chương trình can thiệp hành vi: Cần xây dựng và triển khai các chương trình hỗ trợ cai nghiện thuốc lá, tư vấn dinh dưỡng và khuyến khích hoạt động thể chất. Những can thiệp này không chỉ giúp giảm nguy cơ cao huyết áp mà còn cải thiện sức khỏe tổng thể của cộng đồng.

Mở rộng nghiên cứu và cải thiện dữ liệu: Để có cái nhìn sâu sắc hơn, các nghiên cứu trong tương lai nên mở rộng phạm vi dữ liệu, bao gồm các yếu tố bổ sung như mức độ căng thẳng, chế độ ăn uống và thói quen vận động. Điều này sẽ giúp tăng cường độ chính xác và tính ứng dụng của các mô hình dự đoán.

Ứng dụng công nghệ dự đoán trong y tế: Các mô hình hồi quy nhị phân như Cloglog, Logit và Probit có thể được tích hợp vào hệ thống y tế để dự đoán nguy cơ mắc bệnh cao huyết áp cho từng cá nhân. Điều này hỗ trợ các chuyên gia y tế trong việc đưa ra các biện pháp can thiệp kịp thời và cá nhân hóa.

LS0tDQp0aXRsZTogIlRJ4buCVSBMVeG6rE4gUEjDgk4gVMONQ0ggQ8OBQyBZ4bq+VSBU4buQIOG6ok5IIEjGr+G7nk5HIMSQ4bq+TiBC4buGTkggQ0FPIEhVWeG6vlQgw4FQIg0KYXV0aG9yOiAiTmd1eeG7hW4gUGjDumMgVGjhu4tuaCINCmRhdGU6ICIyMDI1LTA3LTI1Ig0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleA0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogJzQnDQotLS0NCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KYGBge2NzcyxlY2hvID0gRkFMU0V9DQpoMSB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDMycHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkDQogIH0NCg0KaDIgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyOHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiANCn0NCg0KaDMgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyNHB4Ow0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1zdHlsZTogaXRhbGljOw0KfQ0KDQpoNCB7Zm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMjBweDsNCiAgZm9udC1zdHlsZTogaXRhbGljfQ0KDQpib2R5IHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMThweDsNCiAgDQp9DQpwOm5vdChoMSk6bm90KGgyKTpub3QoaDMpOm5vdChoNCk6bm90KGg1KSB7DQogIHRleHQtaW5kZW50OiAyZW07fQ0KcCB7DQogIHRleHQtYWxpZ246IGp1c3RpZnk7DQogIH0NCi50b2NpZnktaGVhZGVyIHsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQoNCmBgYA0KDQoNCmBgYHtyLG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KGtuaXRyKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShEZXNjVG9vbHMpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KbGlicmFyeShBRVIpDQpsaWJyYXJ5KGRwbHlyKQ0KYGBgDQoNCiMgTOG7nEkgQ0FNIMSQT0FODQoNCkVtIHhpbiBjYW0gxJFvYW4gcuG6sW5nIMSR4buBIHTDoGkgdGnhu4N1IGx14bqtbiBtw7RuIFBow6JuIHTDrWNoIGThu68gbGnhu4d1IMSR4buLbmggdMOtbmggduG7m2kgxJHhu4EgdMOgaSDigJxQaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIGLhu4duaCBjYW8gaHV54bq/dCDDoXDigJ0gbMOgIGvhur90IHF14bqjIG5naGnDqm4gY+G7qXUgbmdoacOqbSB0w7pjIGPhu6dhIGVtLCDEkcaw4bujYyB0aOG7sWMgaGnhu4duIGTGsOG7m2kgc+G7sSBoxrDhu5tuZyBk4bqrbiBraG9hIGjhu41jIHbDoCB04bqtbiB0w6xuaCBj4bunYSBUaOG6p3kvVGhTLiBUcuG6p24gTeG6oW5oIFTGsOG7nW5nLg0KDQpUb8OgbiBi4buZIG7hu5lpIGR1bmcgdHJvbmcgYsOgaSB0aeG7g3UgbHXhuq1uIMSRxrDhu6NjIHjDonkgZOG7sW5nIGThu7FhIHRyw6puIHF1w6EgdHLDrG5oIHRodSB0aOG6rXAsIHjhu60gbMO9IHbDoCBwaMOibiB0w61jaCBk4buvIGxp4buHdSBt4buZdCBjw6FjaCBraMOhY2ggcXVhbiwgdHJ1bmcgdGjhu7FjLCBjw7MgZOG6q24gbmd14buTbiByw7UgcsOgbmcgxJHhu5FpIHbhu5tpIGPDoWMgdMOgaSBsaeG7h3UgdGhhbSBraOG6o28gdsOgIGLDoW0gc8OhdCBu4buZaSBkdW5nIGLDoGkgZ2nhuqNuZy4gQ8OhYyBz4buRIGxp4buHdSDEkcaw4bujYyBz4butIGThu6VuZyB0cm9uZyBiw6BpIGPDsyB4deG6pXQgeOG7qSBj4bulIHRo4buDLCDEkeG6o20gYuG6o28gdMOtbmggbWluaCBi4bqhY2ggdsOgIGNow61uaCB4w6FjLiBL4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1IMSRxrDhu6NjIHRyw6xuaCBiw6B5IGhvw6BuIHRvw6BuIGzDoCBjw7RuZyB0csOsbmggZG8gdMOhYyBnaeG6oyB0cuG7sWMgdGnhur9wIHRo4buxYyBoaeG7h24sIGtow7RuZyBzYW8gY2jDqXAgdOG7qyBi4bqldCBr4buzIG5ndeG7k24gbsOgbyBraMOhYy4NCg0KRW0geGluIGhvw6BuIHRvw6BuIGNo4buLdSB0csOhY2ggbmhp4buHbSB0csaw4bubYyBuaMOgIHRyxrDhu51uZyB2w6AgZ2nhuqNuZyB2acOqbiBoxrDhu5tuZyBk4bqrbiB24buBIHTDrW5oIHRydW5nIHRo4buxYywga2jDoWNoIHF1YW4gdsOgIGLhuqNuIHF1eeG7gW4gbuG7mWkgZHVuZyBj4bunYSBiw6BpIHRp4buDdSBsdeG6rW4gbsOgeS4gTuG6v3UgY8OzIGLhuqV0IGvhu7MgdmkgcGjhuqFtIG7DoG8gbGnDqm4gcXVhbiDEkeG6v24gbOG7nWkgY2FtIMSRb2FuIHRyw6puLCBlbSB4aW4gaG/DoG4gdG/DoG4gY2jhu4t1IHRyw6FjaCBuaGnhu4dtIHRyxrDhu5tjIHF1eSDEkeG7i25oIGPhu6dhIG5ow6AgdHLGsOG7nW5nLi4NCg0KIyBM4bucSSBD4bqiTSDGoE4gDQoNClRyxrDhu5tjIGjhur90LCBlbSB4aW4gYsOgeSB04buPIGzDsm5nIGJp4bq/dCDGoW4gc8OidSBz4bqvYyDEkeG6v24gVGjhuqd5IFRoLlMgVHLhuqduIE3huqFuaCBUxrDhu51uZyDEkcOjIHThuq1uIHTDrG5oIGjGsOG7m25nIGThuqtuLCDEkeG7i25oIGjGsOG7m25nIHbDoCDEkcawYSByYSBuaOG7r25nIGfDs3Agw70gcXXDvSBiw6F1IHRyb25nIHN14buRdCBxdcOhIHRyw6xuaCBo4buNYyB04bqtcCB2w6AgdGjhu7FjIGhp4buHbiDEkeG7gSB0w6BpIHRp4buDdSBsdeG6rW4uIE5o4budIHPhu7EgY2jhu4kgZOG6q24gdOG6rW4gdMOibSBj4bunYSBUaOG6p3ksIGVtIMSRw6MgY8OzIGPGoSBo4buZaSB24bqtbiBk4bulbmcgbmjhu69uZyBraeG6v24gdGjhu6ljIGzDvSB0aHV54bq/dCB2w6BvIHRo4buxYyB0aeG7hW4gbeG7mXQgY8OhY2ggaGnhu4d1IHF14bqjIHbDoCBiw6BpIGLhuqNuLg0KDQpFbSBjxaluZyB4aW4gY2jDom4gdGjDoG5oIGPhuqNtIMahbiBxdcO9IFRo4bqneSwgQ8O0IGtob2EgS2hvYSBI4buNYyBE4buvIExp4buHdSwgdHLGsOG7nW5nIMSQ4bqhaSBo4buNYyBUw6BpIGNow61uaCDigJMgTWFya2V0aW5nLCDEkcOjIGdp4bqjbmcgZOG6oXkgbmhp4buHdCBodXnhur90IHbDoCB0cnV54buBbiDEkeG6oXQgbmjhu69uZyBraeG6v24gdGjhu6ljIGNodXnDqm4gbcO0biBxdcO9IGLDoXUgduG7gSBraW5oIHThur8sIHTDoGkgY2jDrW5oLiBDaMOtbmggbmjhu69uZyBu4buBbiB04bqjbmcga2nhur9uIHRo4bupYyBuw6B5IMSRw6MgZ2nDunAgZW0gY8OzIGPGoSBz4bufIHbhu69uZyBjaOG6r2MgxJHhu4MgdHJp4buDbiBraGFpIHbDoCBob8OgbiB0aGnhu4duIGLDoGkgdGnhu4N1IGx14bqtbi4NCg0KTcO0biBo4buNYyBQaMOibiB0w61jaCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIGzDoCBt4buZdCBtw7RuIGjhu41jIGLhu5Ugw61jaCwgZ2nDoHUgdMOtbmggdGjhu7FjIHRp4buFbiB2w6AgbWFuZyBs4bqhaSBjaG8gZW0gbeG7mXQgZ8OzYyBuaMOsbiBy4buZbmcgaMahbiB24buBIGPDoWNoIHRp4bq/cCBj4bqtbiwgcGjDom4gdMOtY2ggdsOgIHjhu60gbMO9IGPDoWMgZOG7ryBsaeG7h3Uga2luaCB04bq/IOKAkyB4w6MgaOG7mWkgdHJvbmcgdsOgIG5nb8OgaSBuxrDhu5tjLiBUdXkgbmhpw6puLCB24bubaSB24buRbiBoaeG7g3UgYmnhur90IGPDsm4gaOG6oW4gY2jhur8gdsOgIGtpbmggbmdoaeG7h20gdGjhu7FjIHThur8gY2jGsGEgbmhp4buBdSwgY2jhuq9jIGNo4bqvbiBiw6BpIGzDoG0ga2jDtG5nIHRyw6FuaCBraOG7j2kgbmjhu69uZyB0aGnhur91IHPDs3QuIEvDrW5oIG1vbmcgcXXDvSBUaOG6p3ksIEPDtCB0aMO0bmcgY+G6o20gdsOgIMSRw7NuZyBnw7NwIMO9IGtp4bq/biDEkeG7gyBlbSBjw7MgdGjhu4MgaG/DoG4gdGhp4buHbiBiw6BpIHRp4buDdSBsdeG6rW4gbeG7mXQgY8OhY2ggdOG7kXQgbmjhuqV0Lg0KDQoNCiMgKipDSMavxqBORyAxOiBU4buUTkcgUVVBTiBOR0hJw4pOIEPhu6hVIFbDgCBE4buuIExJ4buGVSBOR0hJw4pOIEPhu6hVKiogDQoNCiMjICoqMS4xIEzDvSBkbyBjaOG7jW4gxJHhu4EgdMOgaSoqDQoNClRyb25nIGLhu5FpIGPhuqNuaCBoaeG7h24gbmF5LCBraGkgdOG7kWMgxJHhu5kgxJHDtCB0aOG7iyBow7NhIHbDoCBuaOG7i3Agc+G7kW5nIGhp4buHbiDEkeG6oWkgbmfDoHkgY8OgbmcgZ2lhIHTEg25nLCBjw6FjIGLhu4duaCBsw70ga2jDtG5nIGzDonkg4oCTIMSR4bq3YyBiaeG7h3QgbMOgIGLhu4duaCBjYW8gaHV54bq/dCDDoXAg4oCTIMSRYW5nIHRy4bufIHRow6BuaCBt4buZdCB0cm9uZyBuaOG7r25nIG3hu5FpIMSRZSBk4buNYSBuZ2hpw6ptIHRy4buNbmcgxJHhu5FpIHbhu5tpIHPhu6ljIGto4buPZSBj4buZbmcgxJHhu5NuZy4gVGhlbyBU4buVIGNo4bupYyBZIHThur8gVGjhur8gZ2nhu5tpIChXSE8pLCBjYW8gaHV54bq/dCDDoXAgbMOgIOKAnGvhursgZ2nhur90IG5nxrDhu51pIHRo4bqnbSBs4bq3bmfigJ0gZG8gZGnhu4VuIHRp4bq/biDDom0gdGjhuqdtIG5oxrBuZyDEkeG7gyBs4bqhaSBo4bqtdSBxdeG6oyBuZ2hpw6ptIHRy4buNbmcsIGzDoG0gZ2lhIHTEg25nIG5ndXkgY8ahIMSR4buZdCBxdeG7tSwgc3V5IHRpbSwgYuG7h25oIHRo4bqtbiB2w6AgdOG7rSB2b25nIHPhu5ttLiBU4bqhaSBWaeG7h3QgTmFtLCB04bu3IGzhu4cgbmfGsOG7nWkgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCBuZ8OgeSBjw6BuZyB0xINuZywgxJHhurdjIGJp4buHdCDhu58gbmjDs20gbmfGsOG7nWkgdHLhursgdHXhu5VpLCBkbyBs4buRaSBz4buRbmcgdGhp4bq/dSBraG9hIGjhu41jLCBjxINuZyB0aOG6s25nIHTDom0gbMO9IHbDoCBjw6FjIHnhur91IHThu5EgbcO0aSB0csaw4budbmcuDQoNClh14bqldCBwaMOhdCB04burIG3hu5FpIHF1YW4gdMOibSBzw6J1IHPhuq9jIMSR4bq/biBz4bupYyBraOG7j2UgY29uIG5nxrDhu51pIHbDoCB0w61uaCBj4bqlcCB0aGnhur90IHRyb25nIHZp4buHYyBuw6JuZyBjYW8gbmjhuq1uIHRo4bupYyBj4buZbmcgxJHhu5NuZywgdMOhYyBnaeG6oyBxdXnhur90IMSR4buLbmggbOG7sWEgY2jhu41uIMSR4buBIHTDoGkg4oCcUGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBi4buHbmggY2FvIGh1eeG6v3Qgw6Fw4oCdIG5o4bqxbSB0w6xtIGhp4buDdSByw7UgaMahbiB24buBIGPDoWMgbmd1ecOqbiBuaMOibiBjaOG7pyB54bq/dSB0w6FjIMSR4buZbmcgxJHhur9uIGPEg24gYuG7h25oIG7DoHksIHThu6sgxJHDsyBnw7NwIHBo4bqnbiBjdW5nIGPhuqVwIHRow6ptIGfDs2MgbmjDrG4ga2hvYSBo4buNYyBwaOG7pWMgduG7pSBjw7RuZyB0w6FjIHBow7JuZyBuZ+G7q2EgdsOgIGtp4buDbSBzb8OhdCBi4buHbmguDQoNClRow7RuZyBxdWEgdmnhu4djIOG7qW5nIGThu6VuZyBjw6FjIHBoxrDGoW5nIHBow6FwIHBow6JuIHTDrWNoIGThu68gbGnhu4d1IMSR4buLbmggdMOtbmgsIHTDoWMgZ2nhuqMgbW9uZyBtdeG7kW4ga2jDtG5nIGNo4buJIGzDoG0gcsO1IG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyB54bq/dSB04buRIG5oxrAgY2jhu4kgc+G7kSBCTUksIHRow7NpIHF1ZW4gaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBi4buHbmggbMO9LCBoYXkgdGjDs2kgcXVlbiB24bqtbiDEkeG7mW5n4oCmIHbhu5tpIG5ndXkgY8ahIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAsIG3DoCBjw7JuIG7Dom5nIGNhbyBraOG6oyBuxINuZyB24bqtbiBk4bulbmcga2nhur9uIHRo4bupYyB2w6BvIHRo4buxYyB0aeG7hW4gbmdoacOqbiBj4bupdSB0cm9uZyBsxKluaCB24buxYyB5IHThur8g4oCTIHjDoyBo4buZaS4NCg0KIyMgKioxLjIgTeG7pWMgdGnDqnUgdsOgIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSoqDQoNCiMjICoqMS4yLjEgTeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdSoqDQoNCk3hu6VjIHRpw6p1IGNow61uaCBj4bunYSDEkeG7gSB0w6BpIGzDoCB4w6FjIMSR4buLbmggdsOgIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSBjw7MgdGjhu4MgdMOhYyDEkeG7mW5nIMSR4bq/biBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIOG7nyBuZ8aw4budaSB0csaw4bufbmcgdGjDoG5oLiBD4bulIHRo4buDLCBuaMOzbSBuZ2hpw6puIGPhu6l1IHThuq1wIHRydW5nIGzDoG0gcsO1IG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyBiaeG6v24gc+G7kSBuaMawIGNo4buJIHPhu5Ega2jhu5FpIGPGoSB0aOG7gyAoQk1JKSwgdGjDs2kgcXVlbiBow7p0IHRodeG7kWMsIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHRyb25nIGdpYSDEkcOsbmgsIG3hu6ljIMSR4buZIGPEg25nIHRo4bqzbmcgdGluaCB0aOG6p24sIGNo4bq/IMSR4buZIMSDbiB14buRbmcgdsOgIGzhu5FpIHPhu5FuZyBzaW5oIGhv4bqhdCB24bubaSB4w6FjIHN14bqldCBt4bqvYyBi4buHbmguIFRow7RuZyBxdWEgdmnhu4djIOG7qW5nIGThu6VuZyBwaMawxqFuZyBwaMOhcCBwaMOibiB0w61jaCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oLCBuaMOzbSBtb25nIG114buRbiDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSB04burbmcgeeG6v3UgdOG7kSwgdOG7qyDEkcOzIMSRxrBhIHJhIG5o4buvbmcgZ+G7o2kgw70gY8OzIGdpw6EgdHLhu4sgdGjhu7FjIHRp4buFbiBuaOG6sW0gbsOibmcgY2FvIG5o4bqtbiB0aOG7qWMgY+G7mW5nIMSR4buTbmcgdsOgIGjhu5cgdHLhu6MgY8O0bmcgdMOhYyBwaMOybmcgY2jhu5FuZyBjYW8gaHV54bq/dCDDoXAuDQoNCiMjICoqMS4yLjIgQ8OidSBo4buPaSBuZ2hpw6puIGPhu6l1KioNCg0KWHXhuqV0IHBow6F0IHThu6sgY8OhYyBt4bulYyB0acOqdSB0csOqbiwgxJHhu4EgdMOgaSB04bqtcCB0cnVuZyBnaeG6o2kgcXV54bq/dCBt4buZdCBz4buRIGPDonUgaOG7j2kgbmdoacOqbiBj4bupdSBxdWFuIHRy4buNbmc6ICgxKSBOaOG7r25nIHnhur91IHThu5EgbsOgbyBjw7Mg4bqjbmggaMaw4bufbmcgcsO1IHLhu4d0IMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwPyAoMikgVHJvbmcgc+G7kSBjw6FjIHnhur91IHThu5EgxJHGsOG7o2MgcGjDom4gdMOtY2gsIHnhur91IHThu5EgbsOgbyDEkcOzbmcgdmFpIHRyw7IgbuG7lWkgYuG6rXQgdsOgIGPDsyB0w6FjIMSR4buZbmcgbeG6oW5oIG5o4bqldCDEkeG6v24gbmd1eSBjxqEgbeG6r2MgYuG7h25oPyAoMykgTeG7kWkgcXVhbiBo4buHIGdp4buvYSB04burbmcgeeG6v3UgdOG7kSAoY2jhurNuZyBo4bqhbiBuaMawIEJNSSwgaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBi4buHbmjigKYpIHbDoCBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHRo4buDIGhp4buHbiBuaMawIHRo4bq/IG7DoG8/IFbDoCBjdeG7kWkgY8O5bmcsICg0KSBk4buvIGxp4buHdSB0aHUgdGjhuq1wIHbDoCBwaMOibiB0w61jaCBjw7MgdGjhu4MgxJHGsGEgcmEgbmjhu69uZyBow6BtIMO9IHRo4buxYyB0aeG7hW4gZ8OsIHRyb25nIHZp4buHYyBwaMOybmcgbmfhu6thIHbDoCBraeG7g20gc2/DoXQgY8SDbiBi4buHbmggbsOgeSB0cm9uZyBj4buZbmcgxJHhu5NuZz8NCg0KIyMgKioxLjMgxJDhu5FpIHTGsOG7o25nIHbDoCBwaOG6oW0gdmkgbmdoacOqbiBj4bupdSoqDQoNCiMjICoqMS4zLjEgxJDhu5FpIHTGsOG7o25nIG5naGnDqm4gY+G7qXUqKg0KDQrEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdSBsw6Agbmjhu69uZyBjw6EgbmjDom4gY8OzIG5ndXkgY8ahIGhv4bq3YyDEkWFuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLCDEkeG6t2MgYmnhu4d0IHThuq1wIHRydW5nIHbDoG8gbmjDs20gbmfGsOG7nWkgdHLGsOG7n25nIHRow6BuaCB0cm9uZyDEkeG7mSB0deG7lWkgbGFvIMSR4buZbmcuIEPDoWMgeeG6v3UgdOG7kSDEkcaw4bujYyBraOG6o28gc8OhdCB4b2F5IHF1YW5oIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYyBjaOG7iSBz4buRIHPhu6ljIGto4buPZSBuaMawIGNo4buJIHPhu5EgQk1JLCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyBsw6EsIHRp4buBbiBz4butIGLhu4duaCBsw70gduG7gSBodXnhur90IMOhcCB0cm9uZyBnaWEgxJHDrG5oLCB0aMOzaSBxdWVuIHNpbmggaG/huqF0Li4uLiBOaOG7r25nIMSR4bq3YyDEkWnhu4NtIG7DoHkgxJHGsOG7o2MgbOG7sWEgY2jhu41uIG5o4bqxbSBwaOG6o24gw6FuaCBt4buZdCBjw6FjaCBj4bulIHRo4buDIHbDoCB0aOG7sWMgdGnhu4VuIGPDoWMgeeG6v3UgdOG7kSBjw7Mga2jhuqMgbsSDbmcgdMOhYyDEkeG7mW5nIMSR4bq/biB0w6xuaCB0cuG6oW5nIGh1eeG6v3Qgw6FwIGPhu6dhIG3hu5l0IGPDoSBuaMOibiB0cm9uZyBi4buRaSBj4bqjbmggeMOjIGjhu5lpIGhp4buHbiDEkeG6oWkuIFZp4buHYyBs4buxYSBjaOG7jW4gxJHhu5FpIHTGsOG7o25nIG5naGnDqm4gY+G7qXUgbmjGsCB0csOqbiBnacO6cCDEkeG7gSB0w6BpIGjGsOG7m25nIMSR4bq/biBt4bulYyB0acOqdSDEkcOhbmggZ2nDoSB04buVbmcgcXVhbiBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgcGjhu5UgYmnhur9uLCDEkeG7k25nIHRo4budaSDEkeG7gSB4deG6pXQgbeG7mXQgc+G7kSBow6BtIMO9IG1hbmcgdMOtbmgg4bupbmcgZOG7pW5nIHRyb25nIGPDtG5nIHTDoWMgcGjDsm5nIG5n4burYSB2w6Aga2nhu4NtIHNvw6F0IGLhu4duaCBjYW8gaHV54bq/dCDDoXAgdHJvbmcgY+G7mW5nIMSR4buTbmcuDQoNCiMjICoqMS4zLjIgUGjhuqFtIHZpIG5naGnDqm4gY+G7qXUqKg0KDQpW4buBIGtow7RuZyBnaWFuOiBOZ2hpw6puIGPhu6l1IHPhu60gZOG7pW5nIGThu68gbGnhu4d1IGto4bqjbyBzw6F0IHThu6sga2jDoWNoIGjDoG5nIHBo4bqhbSB2aSB0cm9uZyBt4buZdCBuxrDhu5tjLg0KVuG7gSB0aOG7nWkgZ2lhbjogROG7ryBsaeG7h3UgxJHGsOG7o2MgdGh1IHRo4bqtcCB2w6AgeOG7rSBsw70gdHJvbmcgbsSDbSAyMDI1LCBwaOG6o24gw6FuaCB0aOG7sWMgdHLhuqFuZyBz4bupYyBraOG7j2UgY8OhIG5ow6JuIHRyb25nIGLhu5FpIGPhuqNuaCBoaeG7h24gdOG6oWkuDQoNCiMjICoqMS40IFBoxrDGoW5nIHBow6FwIG5naGnDqm4gY+G7qXUqKg0KICBUcm9uZyBuZ2hpw6puIGPhu6l1IG7DoHksIHBoxrDGoW5nIHBow6FwIMSR4buLbmggbMaw4bujbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmjhurFtIHBow6JuIHTDrWNoIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyB54bq/dSB04buRIG5oxrAgY2jhu4kgc+G7kSBz4bupYyBraOG7j2UgbmjGsCBjaOG7iSBz4buRIEJNSSwgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgbMOhLCB0aeG7gW4gc+G7rSBi4buHbmggbMO9IHbhu4EgaHV54bq/dCDDoXAgdHJvbmcgZ2lhIMSRw6xuaCwgdGjDs2kgcXVlbiBzaW5oIGhv4bqhdC4uLiB2w6AgcXV54bq/dCDEkeG7i25oIHZheSB0acOqdSBkw7luZyBj4bunYSBraMOhY2ggaMOgbmcuDQoNCsSQ4bqndSB0acOqbiwgZOG7ryBsaeG7h3UgxJHGsOG7o2MgeOG7rSBsw70gdsOgIHRyw6xuaCBiw6B5IHRow7RuZyBxdWEgdGjhu5FuZyBrw6ogbcO0IHThuqMgxJHGoW4gYmnhur9uIHbDoCBwaMOibiB0w61jaCBi4bqjbmcgdOG6p24gc+G7kSDEkeG7gyBsw6BtIHLDtSDEkeG6t2MgxJFp4buDbSB04buVbmcgcXVhbiBj4bunYSBt4bqrdSBuZ2hpw6puIGPhu6l1Lg0KVGnhur9wIHRoZW8sIGtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyDEkcaw4bujYyDDoXAgZOG7pW5nIG5o4bqxbSB4w6FjIMSR4buLbmggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXAgdsOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIChxdXnhur90IMSR4buLbmggdmF5KS4NCk5o4buvbmcgYmnhur9uIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogc+G6vSDEkcaw4bujYyBjaOG7jW4gxJHGsGEgdsOgbyBwaMOibiB0w61jaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gYuG6sW5nIGLhu5FuIG3DtCBow6xuaDogKDEpIEjhu5NpIHF1eSBsb2dpc3RpYywgKDIpIEjhu5NpIHF1eSBwcm9iaXQsICgzKSBI4buTaSBxdXkgY2xvZ2xvZywgdsOgICg0KSBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCAoTFBNKS4NCk3hu5dpIG3DtCBow6xuaCDEkeG7gXUgxJHGsOG7o2MgdHJp4buDbiBraGFpIHRoZW8gaGFpIGLGsOG7m2M6IHBow6JuIHTDrWNoIMSRxqFuIGJp4bq/biB2w6AgxJFhIGJp4bq/bi4gS+G6v3QgcXXhuqMgaOG7k2kgcXV5IMSRxrDhu6NjIHRyw6xuaCBiw6B5IGTGsOG7m2kgZOG6oW5nIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcsIHNhaSBz4buRIGNodeG6qW4sIGdpw6EgdHLhu4sgcCB2w6AgxJHhu5kgdGluIGPhuq15LCBxdWEgxJHDsyDEkcOhbmggZ2nDoSBoxrDhu5tuZyB2w6AgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIGJp4bq/biDEkeG7mWMgbOG6rXAgxJHhur9uIHjDoWMgc3XhuqV0IHZheS4NClNhdSBjw7luZywgxJHhu4Mgc28gc8OhbmggaGnhu4d1IHF14bqjIGdp4buvYSBjw6FjIG3DtCBow6xuaCwgbmdoacOqbiBj4bupdSBz4butIGThu6VuZyBjw6FjIHRpw6p1IGNow60gxJHDoW5oIGdpw6EgZ+G7k20gY2jhu4kgc+G7kSBBSUMgKEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24pLCDEkcaw4budbmcgY29uZyBST0MgKFJlY2VpdmVyIE9wZXJhdGluZyBDaGFyYWN0ZXJpc3RpYykgdsOgIG1hIHRy4bqtbiBuaOG6p20gbOG6q24uDQoNCiMjICoqMS41IEvhur90IGPhuqV1IGPhu6dhIMSR4buBIHTDoGkqKg0KTmdvw6BpIG3hu6VjIGzhu6VjLCBkYW5oIG3hu6VjIGNo4buvIHZp4bq/dCB04bqvdCwgZGFuaCBt4bulYyBow6xuaCDhuqNuaCB2w6AgYuG6o25nIGJp4buDdSwgcGjhu6UgbOG7pWMgY8O5bmcgdMOgaSBsaeG7h3UgdGhhbSBraOG6o28gxJHhu4EgdMOgaSDEkcaw4bujYyBjaGlhIHRow6BuaCBiYSBjaMawxqFuZyBjaMOtbmg6DQoNCioqQ2jGsMahbmcgMTogR0nhu5pJIFRISeG7hlUgTkdIScOKTiBD4buoVSoqDQoNClRyw6xuaCBiw6B5IGLhu5FpIGPhuqNuaCwgbMO9IGRvIGNo4buNbiDEkeG7gSB0w6BpLCBt4bulYyB0acOqdSB2w6AgY8OidSBo4buPaSBuZ2hpw6puIGPhu6l1LCDEkeG7kWkgdMaw4bujbmcgcGjhuqFtIHZpIG5naGnDqm4gY+G7qXUsIHBoxrDGoW5nIHBow6FwIHbDoCBr4bq/dCBj4bqldSBj4bunYSDEkeG7gSB0w6BpLg0KDQoqKkNoxrDGoW5nIDI6IEPGoSBz4bufIGzDvSB0aHV54bq/dCB2w6AgcGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNClThu5VuZyBo4bujcCBjw6FjIGtow6FpIG5p4buHbSwgbMO9IHRodXnhur90IGxpw6puIHF1YW4gxJHhur9uIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgdsOgIMSR4bq3YyDEkWnhu4NtIG5ow6JuIGto4bqpdSBo4buNYy4gVHLDrG5oIGLDoHkgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiB2w6AgbcO0IGjDrG5oIMSR4buLbmggbMaw4bujbmcgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgcGjDom4gdMOtY2guDQoNCioqQ2jGsMahbmcgMzogS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSoqDQoNClBow6JuIHTDrWNoIGThu68gbGnhu4d1IHRo4buxYyBuZ2hp4buHbSwgdHLDrG5oIGLDoHkga+G6v3QgcXXhuqMgdOG7qyBjw6FjIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHbDoCBtw7QgaMOsbmggaOG7k2kgcXV5LCDEkcOhbmggZ2nDoSBt4bupYyDEkeG7mSDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5EsIHbDoCDEkeG7gSB4deG6pXQgbeG7mXQgc+G7kSBraHV54bq/biBuZ2jhu4sgdGjhu7FjIHRp4buFbi4NCg0KIyAqKkNIxq/GoE5HIDI6IEPGoCBT4bueIEzDnSBUSFVZ4bq+VCBWw4AgUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVSoqDQoNCiMjICoqMi4xIEzDvSB0aHV54bq/dCB24buBIGLhu4duaCBjYW8gaHV54bq/dCDDoXAqKg0KDQpC4buHbmggY2FvIGh1eeG6v3Qgw6FwICh0xINuZyBodXnhur90IMOhcCkgbMOgIG3hu5l0IHTDrG5oIHRy4bqhbmcgeSB04bq/IG3Do24gdMOtbmggdHJvbmcgxJHDsyDDoXAgbOG7sWMgbcOhdSB0w6FjIMSR4buZbmcgbMOqbiB0aMOgbmggxJHhu5luZyBt4bqhY2ggZHV5IHRyw6wg4bufIG3hu6ljIGNhbyBoxqFuIGLDrG5oIHRoxrDhu51uZyB0cm9uZyBt4buZdCB0aOG7nWkgZ2lhbiBkw6BpLiDEkMOieSBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBi4buHbmggbMO9IGtow7RuZyBsw6J5IHBo4buVIGJp4bq/biBuaOG6pXQgdHLDqm4gdG/DoG4gY+G6p3UsIMSRxrDhu6NjIHhlbSBsw6AgeeG6v3UgdOG7kSBuZ3V5IGPGoSBow6BuZyDEkeG6p3UgZOG6q24gxJHhur9uIGPDoWMgYmnhur9uIGNo4bupbmcgdGltIG3huqFjaCBuZ2hpw6ptIHRy4buNbmcgbmjGsCDEkeG7mXQgcXXhu7UsIG5o4buTaSBtw6F1IGPGoSB0aW0sIHN1eSB0aOG6rW4gdsOgIHRo4bqtbSBjaMOtIHThu60gdm9uZyBu4bq/dSBraMO0bmcgxJHGsOG7o2Mga2nhu4NtIHNvw6F0IGvhu4twIHRo4budaS4gQ2FvIGh1eeG6v3Qgw6FwIHRoxrDhu51uZyBkaeG7hW4gdGnhur9uIMOibSB0aOG6p20sIGtow7RuZyBjw7MgdHJp4buHdSBjaOG7qW5nIHLDtSBy4buHdCwgdsOsIHbhuq15IGPDsm4gxJHGsOG7o2MgZ+G7jWkgbMOgIOKAnGvhursgZ2nhur90IG5nxrDhu51pIHRo4bqnbSBs4bq3bmfigJ0uDQoNClZp4buHYyBwaMOhdCBoaeG7h24gdsOgIGtp4buDbSBzb8OhdCBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGtow7RuZyBjaOG7iSBsw6AgduG6pW4gxJHhu4EgeSB04bq/IGPDoSBuaMOibiBtw6AgY8OybiBsw6AgbeG7kWkgcXVhbiB0w6JtIHPhu6ljIGto4buPZSBj4buZbmcgxJHhu5NuZy4gQ8OhYyBuZ2hpw6puIGPhu6l1IHkgaOG7jWMgdsOgIHjDoyBo4buZaSBo4buNYyBjaOG7iSByYSBy4bqxbmcgbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGtow7RuZyBjaOG7iSB4deG6pXQgcGjDoXQgdOG7qyB54bq/dSB04buRIHNpbmggaOG7jWMgaGF5IGRpIHRydXnhu4FuLCBtw6AgY8OybiBjaOG7i3Ug4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgYuG7n2kgbmjhu69uZyB54bq/dSB04buRIGjDoG5oIHZpIHbDoCBuaMOibiBraOG6qXUgaOG7jWMuIE5o4buvbmcgeeG6v3UgdOG7kSBuaMawIGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpLCBjaOG7iSBz4buRIGto4buRaSBjxqEgdGjhu4MgKEJNSSksIHRow7NpIHF1ZW4gaMO6dCB0aHXhu5FjIGzDoSwgdMOsbmggdHLhuqFuZyBjxINuZyB0aOG6s25nIHRpbmggdGjhuqduIHbDoCB0aeG7gW4gc+G7rSBi4buHbmggbMO9IGdpYSDEkcOsbmggxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyB2aeG7h2MgbMOgbSB0aGF5IMSR4buVaSBodXnhur90IMOhcCBj4bunYSBt4buZdCBjw6EgbmjDom4gdGhlbyB0aOG7nWkgZ2lhbi4NCg0KVHJvbmcgbmdoacOqbiBj4bupdSBuw6B5LCBuaMOzbSB04bqtcCB0cnVuZyBwaMOibiB0w61jaCBt4buZdCBz4buRIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCBow6BuaCB2aSDEkcaw4bujYyB4ZW0gbMOgIGPDsyBt4buRaSBsacOqbiBo4buHIGNo4bq3dCBjaOG6vSB24bubaSBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLCBiYW8gZ+G7k206DQoNCi0gQ2jhu4kgc+G7kSBraOG7kWkgY8ahIHRo4buDIChCTUkpOiBMw6AgY2jhu4kgc+G7kSBwaOG6o24gw6FuaCBt4bupYyDEkeG7mSBiw6lvIHBow6wsIGPDsyBsacOqbiBxdWFuIHRy4buxYyB0aeG6v3AgxJHhur9uIG5ndXkgY8ahIGNhbyBodXnhur90IMOhcC4gTmfGsOG7nWkgY8OzIGNo4buJIHPhu5EgQk1JIGNhbyAodGjhu6thIGPDom4sIGLDqW8gcGjDrCkgdGjGsOG7nW5nIGPDsyBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2FvIGjGoW4uDQoNCi0gVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgKHNtb2tlKTogSMO6dCB0aHXhu5FjIGzDoSBsw6BtIGNvIG3huqFjaCB2w6AgdMSDbmcgaHV54bq/dCDDoXAgdOG6oW0gdGjhu51pLCBu4bq/dSBrw6lvIGTDoGkgc+G6vSBnw6J5IHThu5VuIHRoxrDGoW5nIG3huqFjaCBtw6F1IHbDoCBsw6BtIHTEg25nIG5ndXkgY8ahIHTEg25nIGh1eeG6v3Qgw6FwIG3huqFuIHTDrW5oLg0KDQotIFRp4buBbiBz4butIGLhu4duaCBodXnhur90IMOhcCAoaGlzdG9yeSk6IFnhur91IHThu5EgZGkgdHJ1eeG7gW4gdsOgIG3DtGkgdHLGsOG7nW5nIGdpYSDEkcOsbmggY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyBi4buHbmgsIMSR4bq3YyBiaeG7h3QgbuG6v3UgdHJvbmcgZ2lhIMSRw6xuaCBjw7MgbmfGsOG7nWkgdGjDom4gdOG7q25nIGLhu4sgY2FvIGh1eeG6v3Qgw6FwLg0KDQotIE3hu6ljIMSR4buZIHbhuq1uIMSR4buZbmcgdGjhu4MgY2jhuqV0OiBOZ8aw4budaSB0aMaw4budbmcgeHV5w6puIHbhuq1uIMSR4buZbmcgc+G6vSBjw7Mgc+G7qWMga2jhu49lIHThu5F0IGjGoW4sIHThu6sgxJHDsyBnaeG6o20gbmd1eSBjxqEgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcA0KDQpWaeG7h2MgeGVtIHjDqXQgY8OhYyB54bq/dSB04buRIHRyw6puIHRyb25nIG3hu5FpIHTGsMahbmcgcXVhbiB24bubaSB0w6xuaCB0cuG6oW5nIGh1eeG6v3Qgw6FwIGdpw7pwIG7Dom5nIGNhbyBoaeG7h3UgcXXhuqMgY2jhuqluIMSRb8OhbiBz4bubbSwgY2FuIHRoaeG7h3AgxJHDum5nIMSR4buRaSB0xrDhu6NuZyB2w6AgeMOieSBk4buxbmcgY8OhYyBjaMOtbmggc8OhY2ggeSB04bq/IGPhu5luZyDEkeG7k25nIHBow7kgaOG7o3AgduG7m2kgdOG7q25nIG5ow7NtIGTDom4gY8awIGPDsyBuZ3V5IGPGoSBjYW8uIMSQw6J5IGPFqW5nIGzDoCBu4buBbiB04bqjbmcgxJHhu4MgdMSDbmcgY8aw4budbmcgaG/huqF0IMSR4buZbmcgdHV5w6puIHRydXnhu4FuLCB0aGF5IMSR4buVaSBow6BuaCB2aSBz4bupYyBraOG7j2UgdsOgIGjhu5cgdHLhu6MgbmfGsOG7nWkgZMOibiBuw6JuZyBjYW8gY2jhuqV0IGzGsOG7o25nIGN14buZYyBz4buRbmcgbeG7mXQgY8OhY2ggYuG7gW4gduG7r25nLg0KDQojIyAqKjIuMiBNw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuKioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBsw6AgY8O0bmcgY+G7pSBwaOG7lSBiaeG6v24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgxJHhu4MgcGjDom4gdMOtY2ggdsOgIGThu7EgYsOhbyB4w6FjIHN14bqldCB44bqjeSByYSBj4bunYSBt4buZdCBz4buxIGtp4buHbiBuaOG7iyBwaMOibiwgdHJvbmcgxJHDsyBiaeG6v24gcGjhu6UgdGh14buZYyBjaOG7iSBuaOG6rW4gZ2nDoSB0cuG7iyAwIGhv4bq3YyAxLiBUcm9uZyBi4buRaSBj4bqjbmggbmdoacOqbiBj4bupdSBuw6B5LCBiaeG6v24gcGjhu6UgdGh14buZYyBsw6AgaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nIGPhu6dhIGtow6FjaCBow6BuZyAoMSA9IGPDsyBt4bqvYyBi4buHbmgsIDAgPSBraMO0bmcgbeG6r2MgYuG7h25oKS4gTeG7pWMgdGnDqnUgY+G7p2EgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGzDoCDGsOG7m2MgbMaw4bujbmcgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gJFk9MSQgZOG7sWEgdHLDqm4gY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wICRYXzEsIFhfMiwgXGRvdHMsIFhfayQuDQoNCkThuqFuZyB04buVbmcgcXXDoXQgY+G7p2EgbcO0IGjDrG5oOg0KDQokJA0KUChZID0gMXxYKSA9IEcoWFxiZXRhKQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSAkRyguKSQgbMOgIGjDoG0gbGnDqm4ga+G6v3QgKGxpbmsgZnVuY3Rpb24pLCB4w6FjIMSR4buLbmggbG/huqFpIG3DtCBow6xuaCBj4bulIHRo4buDDQotICRYJCBsw6AgdmVjdG9yIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCAocHJlZGljdG9ycykNCi0gJFxiZXRhJCBsw6AgdmVjdG9yIGjhu4cgc+G7kSBo4buTaSBxdXkgY+G6p24gxrDhu5tjIGzGsOG7o25nDQoNCiMjIyAqKjIuMi4xIE3DtCBow6xuaCBMb2dpc3RpYyAoTG9naXQpKioNCg0KU+G7rSBk4bulbmcgaMOgbSBsb2dpc3RpYzoNCg0KJCQNClAoWT0xfFgpID0gXGZyYWN7ZV57WFxiZXRhfX17MSArIGVee1hcYmV0YX19DQokJA0KDQpIw6BtIGxvZ2l0IGdp4buvIHjDoWMgc3XhuqV0IHRyb25nIGtob+G6o25nICgwLDEpIHbDoCBo4buHIHPhu5EgJFxiZXRhJCDEkcaw4bujYyBkaeG7hW4gZ2nhuqNpIHRow7RuZyBxdWEgbG9nKE9kZHMgUmF0aW8pLg0KDQojIyMgKioyLjIuMiBNw7QgaMOsbmggUHJvYml0KioNCg0KU+G7rSBk4bulbmcgaMOgbSBwaMOibiBwaOG7kWkgdMOtY2ggbMWpeSBjaHXhuqluIGjDs2E6DQoNCiQkDQpQKFk9MXxYKSA9IFxQaGkoWFxiZXRhKQ0KJCQNCg0KUGjDuSBo4bujcCB0cm9uZyBjw6FjIHRyxrDhu51uZyBo4bujcCBk4buvIGxp4buHdSBnaeG6oyDEkeG7i25oIGPDsyBwaMOibiBwaOG7kWkgY2h14bqpbiDhu58gc2FpIHPhu5EuDQoNCiMjIyAqKjIuMi4zIE3DtCBow6xuaCBDb21wbGVtZW50YXJ5IGxvZy1sb2cgKENsb2dsb2cpKioNCg0KU+G7rSBk4bulbmcgaMOgbToNCg0KJCQNClAoWT0xfFgpID0gMSAtIGVeey1lXntYXGJldGF9fQ0KJCQNCg0KUGjDuSBo4bujcCBraGkgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gZ+G6p24gYuG6sW5nIDAgaG/hurdjIGfhuqduIGLhurFuZyAxLg0KDQojIyMgKioyLjIuNCBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCAoTE1QKSoqDQoNCk3DtCBow6xuaCB4w6FjIHN14bqldCB0dXnhur9uIHTDrW5oIGzDoCBt4buZdCB0csaw4budbmcgaOG7o3AgxJHhurdjIGJp4buHdCBj4bunYSAqKk3DtCBow6xuaCBUdXnhur9uIHTDrW5oIFThu5VuZyBxdcOhdCoqICgqR2VuZXJhbGl6ZWQgTGluZWFyIE1vZGVsIC0gR0xNKiksIHRyb25nIMSRw7MgaMOgbSBsacOqbiBr4bq/dCBsw6AgKipow6BtIMSR4buTbmcgbmjhuqV0KiogKCppZGVudGl0eSBsaW5rIGZ1bmN0aW9uKikuIEPDtG5nIHRo4bupYyBtw7QgaMOsbmggxJHGsOG7o2MgYmnhu4N1IGRp4buFbiBuaMawIHNhdToNCg0KJCQNClAoWSA9IDEgXG1pZCBYKSA9IFhcYmV0YQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSBcKCBZIFwpIGzDoCBiaeG6v24gcGjhuqNuIGjhu5NpIG5o4buLIHBow6JuIChnacOhIHRy4buLIDAgaG/hurdjIDEpLA0KLSBcKCBYIFwpIGzDoCBtYSB0cuG6rW4gY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLA0KLSBcKCBcYmV0YSBcKSBsw6AgdmVjdG9yIGPDoWMgaOG7hyBz4buRIGjhu5NpIHF1eS4NCg0KTcO0IGjDrG5oIG7DoHkgY2hvIHBow6lwIGRp4buFbiBnaeG6o2kgdHLhu7FjIHRp4bq/cCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBcKCBZID0gMSBcKSBuaMawIG3hu5l0IGjDoG0gdHV54bq/biB0w61uaCBj4bunYSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIFwoIFggXCkuDQoNCsavdSDEkWnhu4NtIGPhu6dhIG3DtCBow6xuaCBuw6B5IGzDoCDEkcahbiBnaeG6o24sIGThu4UgxrDhu5tjIGzGsOG7o25nIGLhurFuZyBwaMawxqFuZyBwaMOhcCBPTFMgdsOgIGThu4UgZGnhu4VuIGdp4bqjaS4gVHV5IG5oacOqbiwgdsOsIGdpw6EgdHLhu4sgZOG7sSBiw6FvIGPDsyB0aOG7gyBu4bqxbSBuZ2/DoGkga2hv4bqjbmcgWzAsIDFdLCBtw7QgaMOsbmggbsOgeSB0aMaw4budbmcga2jDtG5nIMSR4bqjbSBi4bqjbyDDvSBuZ2jEqWEgeMOhYyBzdeG6pXQuIMSQaeG7gXUgbsOgeSBk4bqrbiDEkeG6v24gdmkgcGjhuqFtIGdp4bqjIMSR4buLbmggdsOgIMSR4buZIGNow61uaCB4w6FjIHRo4bqlcCBraGkgZOG7sSDEkW/DoW4gaMOgbmggdmkgbmjhu4sgcGjDom4uDQoNClRyb25nIEdMTSwgbcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggduG6q24gxJHGsOG7o2Mgc+G7rSBk4bulbmcgbmjGsCBt4buZdCBixrDhu5tjIHRoYW0gY2hp4bq/dSBiYW4gxJHhuqd1IMSR4buDIHNvIHPDoW5oIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGxvZ2l0LCBwcm9iaXQgaG/hurdjIGNsb2dsb2cuIA0KDQojIyMgKioyLjIuNSBQaMawxqFuZyBwaMOhcCDGsOG7m2MgbMaw4bujbmc6IE1heGltdW0gTGlrZWxpaG9vZCBFc3RpbWF0aW9uIChNTEUpKioNCg0KQ8OhYyBtw7QgaMOsbmggbmjhu4sgcGjDom4gbmjGsCBsb2dpdCwgcHJvYml0IHbDoCBjbG9nbG9nIMSR4buBdSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwICoqxrDhu5tjIGzGsOG7o25nIGjhu6NwIGzDvSB04buRaSDEkWEgKE1MRSkqKi4gxJDDonkgbMOgIHBoxrDGoW5nIHBow6FwIHTDrG0gZ2nDoSB0cuG7iyB0aGFtIHPhu5EgJFxiZXRhJCBzYW8gY2hvIHjDoWMgc3XhuqV0IHThuqFvIHJhIGThu68gbGnhu4d1IHF1YW4gc8OhdCBsw6AgY2FvIG5o4bqldC4gVHJvbmcgR0xNcywgaMOgbSBo4bujcCBsw70gxJHGsOG7o2MgeMOieSBk4buxbmcgZOG7sWEgdHLDqm4gcGjDom4gcGjhu5FpIG5o4buLIHRo4bupYyB2w6AgdOG7kWkgxrB1IGjDs2EgYuG6sW5nIGPDoWMgdGh14bqtdCB0b8OhbiBuaMawIE5ld3Rvbi1SYXBoc29uLg0KDQpUcm9uZyBjw6FjIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gdGh14buZYyBo4buNIEdMTSBuaMawIGxvZ2l0LCBwcm9iaXQgdsOgIGNsb2dsb2csIHRoYW0gc+G7kSAkXGJldGEkIGtow7RuZyDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG6sW5nIHBoxrDGoW5nIHBow6FwIGLDrG5oIHBoxrDGoW5nIHThu5FpIHRoaeG7g3UgbmjGsCB0cm9uZyBo4buTaSBxdXkgdHV54bq/biB0w61uaCBj4buVIMSRaeG7g24sIG3DoCB0aGF5IHbDoG8gxJHDsyBz4butIGThu6VuZyBwaMawxqFuZyBwaMOhcCDGsOG7m2MgbMaw4bujbmcgaOG7o3AgbMO9IHThu5FpIMSRYSAoTWF4aW11bSBMaWtlbGlob29kIEVzdGltYXRpb24gLSBNTEUpLg0KDQpQaMawxqFuZyBwaMOhcCBNTEUgdMOsbSB04bqtcCBnacOhIHRy4buLIGPhu6dhICRcYmV0YSQgc2FvIGNobyAqKmjDoG0gaOG7o3AgbMO9IChsaWtlbGlob29kIGZ1bmN0aW9uKSoqIMSR4bqhdCBj4buxYyDEkeG6oWkg4oCTIG5naMSpYSBsw6AsIGto4bqjIG7Eg25nIHThuqFvIHJhIGLhu5kgZOG7ryBsaeG7h3UgcXVhbiBzw6F0IHThu6sgbcO0IGjDrG5oIGzDoCBjYW8gbmjhuqV0LiBIw6BtIGjhu6NwIGzDvSB0cm9uZyB0csaw4budbmcgaOG7o3Agbmjhu4sgcGjDom4gZOG7sWEgdHLDqm4gcGjDom4gcGjhu5FpIG5o4buLIHRo4bupYzoNCg0KJCQNCkwoXGJldGEpID0gXHByb2Rfe2k9MX1ee259IFtQX2ldXnt5X2l9IFsxIC0gUF9pXV57MSAtIHlfaX0sIFxxdWFkIFx0ZXh0e3Ryb25nIMSRw7MgfSBQX2kgPSBHKFhfaVxiZXRhKQ0KJCQNCg0KxJDhu4MgxJHGoW4gZ2nhuqNuIGjDs2EgdMOtbmggdG/DoW4sIHRhIGzhuqV5IGxvZyBj4bunYSBow6BtIGjhu6NwIGzDvSDEkeG7gyBjw7MgKipsb2ctbGlrZWxpaG9vZCoqOg0KDQokJA0KXGxvZyBMKFxiZXRhKSA9IFxzdW1fe2k9MX1ee259IFxsZWZ0WyB5X2kgXGxvZyBQX2kgKyAoMSAtIHlfaSkgXGxvZygxIC0gUF9pKSBccmlnaHRdDQokJA0KDQpHaeG6o2kgYsOgaSB0b8OhbiB04buRaSDEkWEgaMOzYSBsb2ctbGlrZWxpaG9vZCBi4bqxbmcgY8OhYyB0aHXhuq10IHRvw6FuIHPhu5EgaOG7jWMgbmjGsCAqKk5ld3Rvbi1SYXBoc29uKiogaG/hurdjICoqRmlzaGVyIFNjb3JpbmcqKiwgdGEgdGh1IMSRxrDhu6NjIMaw4bubYyBsxrDhu6NuZyAkXGhhdHtcYmV0YX0kLiANCg0KIyMgKioyLjMgUmVsYXRpdmUgUmlzayB2w6AgT2RkcyBSYXRpbyoqDQoNCiMjIyAqKjIuMy4xIFJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCioqUmVsYXRpdmUgUmlzayAoUlIpKiog4oCTIGhheSBjw7JuIGfhu41pIGzDoCAqKm5ndXkgY8ahIHTGsMahbmcgxJHhu5FpKiog4oCTIHNvIHPDoW5oIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgZ2nhu69hIGhhaSBuaMOzbToNCg0KJCQNClJSID0gXGZyYWN7UF8xfXtQXzB9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICRQXzEkOiBYw6FjIHN14bqldCBraMOhY2ggaMOgbmcgKipjw7MgxJHhurdjIMSRaeG7g20qKiBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwICANCi0gJFBfMCQ6IFjDoWMgc3XhuqV0IGtow6FjaCBow6BuZyAqKmtow7RuZyBjw7MgxJHhurdjIMSRaeG7g20qKiBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGTDuW5nDQoNCioqRGnhu4VuIGdp4bqjaToqKg0KDQotIFJSID0gMTogS2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBnaeG7r2EgaGFpIG5ow7NtICANCi0gUlIgPiAxOiBOaMOzbSBjw7MgxJHhurdjIMSRaeG7g20gY8OzIGto4bqjIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4gIA0KLSBSUiA8IDE6IE5ow7NtIGPDsyDEkeG6t2MgxJFp4buDbSBjw7Mga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCB0aOG6pXAgaMahbg0KDQojIyMgKioyLjMuMiBPZGRzIFJhdGlvIChPUikqKg0KDQoqKk9kZHMgUmF0aW8gKE9SKSoqIMSRbyBsxrDhu51uZyB04bu3IGzhu4cgb2RkcyAoa2jhuqMgbsSDbmcgeOG6o3kgcmEgc28gduG7m2kga2jDtG5nIHjhuqN5IHJhKSBnaeG7r2EgaGFpIG5ow7NtOg0KDQokJA0KT1IgPSBcZnJhY3tQXzEgLyAoMSAtIFBfMSl9e1BfMCAvICgxIC0gUF8wKX0gPSBcZnJhY3tQXzEgKDEgLSBQXzApfXtQXzAgKDEgLSBQXzEpfQ0KJCQNCg0KVHJvbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYywga+G6v3QgcXXhuqMgaOG7k2kgcXV5IGNow61uaCBsw6AgbG9nKE9SKToNCg0KJCQNClxsb2coT1IpID0gWFxiZXRhDQokJA0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSBPUiA9IDE6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSAgDQotIE9SID4gMTogTmjDs20gY8OzIMSR4bq3YyDEkWnhu4NtIGPDsyBvZGRzIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4gIA0KLSBPUiA8IDE6IE5ow7NtIGPDsyDEkeG6t2MgxJFp4buDbSBjw7Mgb2RkcyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHRo4bqlcCBoxqFuDQoNCg0KIyMgKioyLjQgR2nhu5tpIHRoaeG7h3UgYuG7mSBk4buvIGxp4buHdSoqDQoNCkLhu5kgZOG7ryBsaeG7h3UgIkh5cGVydGVuc2lvbiBSaXNrIFByZWRpY3Rpb24gRGF0YXNldCIgbsOgeSDEkcaw4bujYyB0aGnhur90IGvhur8gxJHhu4MgZ2nDunAgY8OhYyBuaMOgIG5naGnDqm4gY+G7qXUsIG5ow6Aga2hvYSBo4buNYyBk4buvIGxp4buHdSB2w6Agbmjhu69uZyBuZ8aw4budaSDEkWFtIG3DqiBjaMSDbSBzw7NjIHPhu6ljIGto4buPZSBwaMOibiB0w61jaCBjw6FjIHnhur91IHThu5Egbmd1eSBjxqEgbGnDqm4gcXVhbiDEkeG6v24gdMSDbmcgaHV54bq/dCDDoXAgKGh1eeG6v3Qgw6FwIGNhbykgLiBC4buZIGThu68gbGnhu4d1IGJhbyBn4buTbSAxLjk4NSBxdWFuIHPDoXQgdsOgIDkgYmnhur9uIGPDsyDDvSBuZ2jEqWEgxJHGsOG7o2MgdOG6oW8gcmEgZOG7sWEgdHLDqm4gdGjDtG5nIHRpbiBjaGkgdGnhur90IGzDom0gc8OgbmcgdsOgIG3DtCBow6xuaCBk4buvIGxp4buHdSB5IHThur8gY8O0bmcgY+G7mW5nLg0KDQojIyMjICoqMi40LjEgxJDhu41jIGZpbGUgZOG7ryBsaeG7h3UgZ+G7kWMqKg0KDQpgYGB7cn0NCmxpYnJhcnkoeGxzeCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdtb2RlbHMpDQoNCmRhdGEgPC0gcmVhZC54bHN4KGZpbGUgPSAiQzovVXNlcnMvUENfRGVsbC9Eb3dubG9hZHMvaHlwZXJ0ZW5zaW9uX2RhdGFzZXQueGxzeCIsIHNoZWV0SW5kZXggPSAxLCBoZWFkZXIgPSBUKQ0KYGBgDQoNCioqQ+G6pXUgdHLDumMgYuG7mSBk4buvIGxp4buHdSoqDQoNCmBgYHtyfQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KZGF0YS50YWJsZShkYXRhKQ0KYGBgDQoNCkLhu5kgZOG7ryBsaeG7h3UgYmFvIGfhu5NtIDEuOTg1IHF1YW4gc8OhdCAob2JzZXJ2YXRpb25zKSB2w6AgOSBiaeG6v24gKHZhcmlhYmxlcyksIHBo4bqjbiDDoW5oIHRow7RuZyB0aW4gc+G7qWMga2jhu49lIHbDoCBjw6FjIHnhur91IHThu5EgbOG7kWkgc+G7kW5nIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSBjYW8gaHV54bq/dCDDoXAg4bufIG5nxrDhu51pIHRyxrDhu59uZyB0aMOgbmggdOG7qyAxOCDEkeG6v24gODQgdHXhu5VpLg0KDQojIyAqKjIuNSBNw5QgVOG6oyBjw6FjIGJp4bq/biB0cm9uZyBi4buZIGThu68gbGnhu4d1KioNCg0KIyMjIDIuNS4xIEJp4bq/biDEkeG7i25oIGzGsOG7o25nOg0KDQotIEFnZTogVHXhu5VpIGPhu6dhIMSR4buRaSB0xrDhu6NuZyBraOG6o28gc8OhdCwgbMOgIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIGThuqFuZyBz4buRIHRo4buxYyANCg0KLSBTYWx0X0ludGFrZTogTMaw4bujbmcgbXXhu5FpIHRpw6p1IHRo4bulIGjDoG5nIG5nw6B5ICh0w61uaCBi4bqxbmcgZ2FtKSDigJMgbeG7mXQgeeG6v3UgdOG7kSBjaMOtbmggZ8OieSByYSBodXnhur90IMOhcCBjYW8NCg0KIyMjIDIuNS4yIEJp4bq/biDEkeG7i25oIHTDrW5oOg0KDQotIEJQX0hpc3Rvcnk6IFRp4buBbiBz4butIGh1eeG6v3Qgw6FwICgiTm9ybWFsIjogQsOsbmggdGjGsOG7nW5nICwiSHlwZXJ0ZW5zaW9uIjogY2FvIGh1eeG6v3Qgw6FwLCAiUHJlaHlwZXJ0ZW5zaW9uIjogdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwKSwgDQoNCi0gQk1JOiBQaMOibiBsb+G6oWkgdMOsbmggdHLhuqFuZyB0aOG7gyB0cuG7jW5nICgiVW5kZXJ3ZWlnaHQiOiBn4bqneSAsICJOb3JtYWwiOiBCw6xuaCB0aMaw4budbmcsICJPdmVyd2VpZ2h0IjogVGjhu6thIGPDom4pDQoNCi0gTWVkaWNhdGlvbjogTG/huqFpIHRodeG7kWMgxJFhbmcgc+G7rSBk4bulbmcNCg0KLSBGYW1pbHlfSGlzdG9yeTogVGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgaGF5IGtow7RuZyAoIlllcyI6IEPDky8gIk5vIjogS0jDlE5HKQ0KDQotIEV4ZXJjaXNlX0xldmVsOiBN4bupYyDEkeG7mSB24bqtbiDEkeG7mW5nIHRo4buDIGNo4bqldCAoIkxvdyIsICJNb2RlcmF0ZSIsICJIaWdoIikgbOG6p24gbMaw4bujdCBsw6AgInRo4bqlcCIsICLEkeG7gXUgxJHhurduIiwgImNhbyINCg0KLSBTbW9raW5nX1N0YXR1czogVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgKCJOb24tU21va2VyIjoga2jDtG5nIGjDunQgdGh14buRYywgIlNtb2tlciI6Q8OzIGjDunQgdGh14buRYykNCg0KLSBIYXNfSHlwZXJ0ZW5zaW9uOiAqKmJp4bq/biBwaOG7pSB0aHXhu5ljKiogKCJZZXMiOiBDw5MvIk5vIjogS0jDlE5HKSwgYmnhu4N1IHRo4buLIMSR4buRaSB0xrDhu6NuZyBjw7MgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGhheSBraMO0bmcuDQoNCiMjIyAqKjIuNiBLaeG7g20gdHJhIGThu68gbGnhu4d1KioNCg0KIyMjIyAqKjIuNi4xIEtp4buDbSB0cmEgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBj4buZdCDEkeG7i25oIHTDrW5oKioNCg0KYGBge3J9DQojIEtp4buDbSB0cmEgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBt4buXaSBj4buZdCDEkeG7i25oIHTDrW5oDQpuYV9jb3VudHMgPC0gc2FwcGx5KGRhdGEsIGZ1bmN0aW9uKHgpIHN1bShpcy5uYSh4KSkpDQpuYV9jb3VudHMNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KiogDQotIEvhur90IHF14bqjIHRodSDEkcaw4bujYyBjaG8gdGjhuqV5IHLhurFuZyB04bqldCBj4bqjIGPDoWMgY+G7mXQgxJHhu4tuaCB0w61uaCDEkeG7gXUga2jDtG5nIGPDsyBnacOhIHRy4buLIHRoaeG6v3UgKE5BKSB2w6wgc+G7kSBsxrDhu6NuZyBOQSB0cm9uZyBjw6FjIGPhu5l0IMSR4buBdSBoaeG7g24gdGjhu4sgbMOgIDANCg0KIyMjIyAqKjIuNi4yIENodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHNhbmcga2nhu4N1IGZhY3RvcioqDQoNCmBgYHtyfQ0KDQojIENodXnhu4NuIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggc2FuZyBmYWN0b3INCmRhdGEkQlBfSGlzdG9yeSAgICAgICA8LSBhcy5mYWN0b3IoZGF0YSRCUF9IaXN0b3J5KQ0KZGF0YSRCTUkgICAgICAgICAgICAgIDwtIGFzLmZhY3RvcihkYXRhJEJNSSkNCmRhdGEkTWVkaWNhdGlvbiAgICAgICA8LSBhcy5mYWN0b3IoZGF0YSRNZWRpY2F0aW9uKQ0KZGF0YSRGYW1pbHlfSGlzdG9yeSAgIDwtIGFzLmZhY3RvcihkYXRhJEZhbWlseV9IaXN0b3J5KQ0KZGF0YSRFeGVyY2lzZV9MZXZlbCAgIDwtIGFzLmZhY3RvcihkYXRhJEV4ZXJjaXNlX0xldmVsKQ0KZGF0YSRTbW9raW5nX1N0YXR1cyAgIDwtIGFzLmZhY3RvcihkYXRhJFNtb2tpbmdfU3RhdHVzKQ0KZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uIDwtIGFzLmZhY3RvcihkYXRhJEhhc19IeXBlcnRlbnNpb24pDQpgYGANCg0KKipLaeG7g20gdHJhIGzhuqFpIGPhuqV1IHRyw7pjIGThu68gbGnhu4d1IHNhdSBraGkgY2h1eeG7g24gxJHhu5VpKioNCg0KYGBge3J9DQpzdHIoZGF0YSkNCmBgYA0KDQoNCkdp4bqjaSB0aMOtY2g6DQoNCi0gc2FwcGx5KGRhdGEsIGNsYXNzKTogw4FwIGThu6VuZyBow6BtIGNsYXNzKCkgY2hvIHThu6tuZyBj4buZdCDEkeG7gyBraeG7g20gdHJhIGtp4buDdSBk4buvIGxp4buHdS4gS+G6v3QgcXXhuqMgdHLhuqMgduG7gSBsw6AgbeG7mXQgdmVjdG9yIGhp4buDbiB0aOG7iyB0w6puIGPhu5l0IHbDoCBsb+G6oWkgZOG7ryBsaeG7h3UgdMawxqFuZyDhu6luZy4NCg0KLSBL4bq/dCBxdeG6oyBsw6AgImZhY3RvciIgY2hvIHThuqV0IGPhuqMgY8OhYyBj4buZdCDihpIgY2h1eeG7g24gxJHhu5VpIHRow6BuaCBjw7RuZy4NCg0KYGBge3J9DQpzYXBwbHkoZGF0YSwgY2xhc3MpDQpgYGANCg0KKipOaOG6rW4geMOpdCoqIDogS+G6v3QgcXXhuqMgdGh1IMSRxrDhu6NjIHRvw6BuIGLhu5kgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCDEkcOjIMSRxrDhu6NjIGNodXnhu4NuIMSR4buVaSB0aMOgbmggZOG6oW5nIGZhY3Rvci4NCg0KIyMgKioyLjUgUXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1KioNCg0KUXV5IHRyw6xuaCBuZ2hpw6puIGPhu6l1IMSRxrDhu6NjIHTDoWMgZ2nhuqMgeMOieSBk4buxbmcgdGhlbyBjw6FjIGLGsOG7m2MgbG9naWMgdsOgIHR14bqnbiB04buxIG5o4bqxbSDEkeG6o20gYuG6o28gdMOtbmggaOG7hyB0aOG7kW5nLCDEkeG7mSB0aW4gY+G6rXkgdsOgIGPGoSBz4bufIGtob2EgaOG7jWMgdHJvbmcgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UuIEPhu6UgdGjhu4MgYmFvIGfhu5NtIGPDoWMgYsaw4bubYyBzYXU6DQoNCmBgYHtyfQ0KbGlicmFyeShEaWFncmFtbWVSKQ0KRGlhZ3JhbW1lUjo6Z3JWaXooIg0KZGlncmFwaCByZXNlYXJjaF9mbG93IHsNCiAgZ3JhcGggW3JhbmtkaXIgPSBUQl0NCg0KICBub2RlIFtzaGFwZSA9IHJlY3RhbmdsZSwgc3R5bGUgPSBmaWxsZWQsIGNvbG9yID0gbGlnaHRibHVlLCBmb250bmFtZSA9IEhlbHZldGljYSwgZm9udHNpemUgPSAxMl0NCg0KICBBIFtsYWJlbCA9ICdCxrDhu5tjIDE6IFRo4buRbmcga8OqIG3DtCB04bqjXG4oROG7ryBsaeG7h3UgxJHGoW4gYmnhur9uKSddDQogIEIgW2xhYmVsID0gJ0LGsOG7m2MgMjogS2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZVxuKEdp4buvYSBiaeG6v24gcGjhu6UgdGh14buZYyB2w6AgxJHhu5ljIGzhuq1wKSddDQogIEMgW2xhYmVsID0gJ0LGsOG7m2MgMzogUGjDom4gdMOtY2ggY+G6t3AgYmnhur9uXG4oQuG6o25nIHThuqduIHPhu5EsIGJp4buDdSDEkeG7kywgUlIgJiBPUiknXQ0KICBEIFtsYWJlbCA9ICdCxrDhu5tjIDQ6IMav4bubYyBsxrDhu6NuZyBtw7QgaMOsbmggbmjhu4sgcGjDom5cbihMb2dpdCwgUHJvYml0LCBDbG9nbG9nLCBHTE0pJ10NCiAgRSBbbGFiZWwgPSAnQsaw4bubYyA1OiBTbyBzw6FuaCBtw7QgaMOsbmhcbihBSUMsIFJPQyknXQ0KICBGIFtsYWJlbCA9ICdCxrDhu5tjIDY6IMSQ4buBIHh14bqldCBjaMOtbmggc8OhY2hcbihE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBtw7QgaMOsbmgpJ10NCg0KICBBIC0+IEIgLT4gQyAtPiBEIC0+IEUgLT4gRg0KfQ0KIikNCmBgYA0KDQoNCioqQsaw4bubYyAxOiBUaHUgdGjhuq1wIHbDoCB44butIGzDvSBk4buvIGxp4buHdSoqDQoNClTDoWMgZ2nhuqMgc+G7rSBk4bulbmcgdOG6rXAgZOG7ryBsaeG7h3UgxJHGsOG7o2MgcsO6dCB0csOtY2ggdOG7qyBrYWdnbGUuY29tLiBU4burIMSRw7MsIHTDoWMgZ2nhuqMgbOG7sWEgY2jhu41uIGPDoWMgYmnhur9uIHBow7kgaOG7o3AgduG7m2kgbeG7pWMgdGnDqnUgbmdoacOqbiBj4bupdToNCg0KLSBCaeG6v24gcGjhu6UgdGh14buZYzogSGFzX0h5cGVydGVuc2lvbiDigJMgdGjhu4MgaGnhu4duIGLhu4duaCBuaMOibiBjw7MgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCBoYXkga2jDtG5nICh5ZXMvbm8pLg0KLSBDw6FjIGJp4bq/biDEkeG7mWMgbOG6rXA6IEJNSSwgQlBfSGlzdG9yeSwgRmFtaWx5X0hpc3RvcnksIE1lZGljYXRpb24sIFNtb2tpbmdfU3RhdHVzIHbDoCBFeGVyY2lzZV9MZXZlbC4NCg0KU2F1IGtoaSB4w6FjIMSR4buLbmggYmnhur9uLCB0w6FjIGdp4bqjIHRp4bq/biBow6BuaCBsw6BtIHPhuqFjaCBk4buvIGxp4buHdSwgbcOjIGjDs2EgdsOgIGNodXnhu4NuIMSR4buVaSBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHbhu4EgxJHhu4tuaCBk4bqhbmcgcGjDuSBo4bujcCAoZmFjdG9yKSDEkeG7gyBwaOG7pWMgduG7pSBwaMOibiB0w61jaC4NCg0KKipCxrDhu5tjIDI6IFRo4buRbmcga8OqIG3DtCB04bqjIMSRxqFuIGJp4bq/bioqDQoNClTDoWMgZ2nhuqMgdGnhur9uIGjDoG5oIHRo4buRbmcga8OqIHThuqduIHN14bqldCB2w6AgdOG7tyBs4buHIHBo4bqnbiB0csSDbSBjaG8gdOG7q25nIGJp4bq/biBuaOG6sW0gbcO0IHThuqMgxJHhurdjIMSRaeG7g20gdOG7lW5nIHF1w6F0IGPhu6dhIGThu68gbGnhu4d1LiBL4bq/dCBxdeG6oyDEkcaw4bujYyBtaW5oIGjhu41hIHRow7RuZyBxdWEgYmnhu4N1IMSR4buTIGPhu5l0IHbDoCBiaeG7g3UgxJHhu5MgdHLDsm4gbmjhurFtIHRy4buxYyBxdWFuIGjDs2EgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIGPhu6dhIGtow6FjaCBow6BuZy4NCg0KKipCxrDhu5tjIDM6IEtp4buDbSDEkeG7i25oIENoaS1iw6xuaCBwaMawxqFuZyoqDQoNCuG7niBixrDhu5tjIG7DoHksIHTDoWMgZ2nhuqMgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZSDEkeG7gyBraeG7g20gdHJhIG3hu5FpIGxpw6puIGjhu4cgdGjhu5FuZyBrw6ogZ2nhu69hIGJp4bq/biBwaOG7pSB0aHXhu5ljIGxvYW4gdsOgIHThu6tuZyBiaeG6v24gxJHhu5ljIGzhuq1wLiBOaOG7r25nIGJp4bq/biBjw7MgZ2nDoSB0cuG7iyBwIDwgMC4wNSDEkcaw4bujYyB4ZW0gbMOgIGPDsyBt4buRaSBxdWFuIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB24bubaSBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcsIHThu6sgxJHDsyDEkcaw4bujYyDEkcawYSB2w6BvIGPDoWMgcGjDom4gdMOtY2ggc8OidSBoxqFuLg0KDQoqKkLGsOG7m2MgNDogUGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBj4bq3cCBiaeG6v24qKg0KDQpW4bubaSBt4buXaSBj4bq3cCBiaeG6v24gY8OzIG3hu5FpIGxpw6puIGjhu4csIHTDoWMgZ2nhuqMgdGjhu7FjIGhp4buHbiBjw6FjIGLGsOG7m2M6DQoNCi0gTOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gxJHhu4MgbcO0IHThuqMgcGjDom4gcGjhu5FpIGNodW5nLg0KDQotIFbhur0gYmnhu4N1IMSR4buTIGPhu5l0IHBow6JuIG5ow7NtIMSR4buDIHNvIHPDoW5oIHRy4buxYyBxdWFuLg0KDQotIFRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggdOG7tyBs4buHIGdp4buvYSBjw6FjIG5ow7NtLg0KDQotIFTDrW5oIHRvw6FuIGhhaSBjaOG7iSBz4buRIHF1YW4gdHLhu41uZzogUmVsYXRpdmUgUmlzayAoUlIpIHbDoCBPZGRzIFJhdGlvIChPUikgbmjhurFtIGzGsOG7o25nIGjDs2EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIMSR4bq/biB2aeG7h2MgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcA0KDQoqKkLGsOG7m2MgNTogxq/hu5tjIGzGsOG7o25nIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4qKg0KDQpUw6FjIGdp4bqjIHRp4bq/biBow6BuaCB4w6J5IGThu7FuZyB2w6AgxrDhu5tjIGzGsOG7o25nIDQgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuaOG6sW0gcGjDom4gdMOtY2ggdMOhYyDEkeG7mW5nIGPhu6dhIGPDoWMgYmnhur9uIG5ow6JuIGto4bqpdSBo4buNYyDEkeG6v24gaMOgbmggdmkgdmF5IHRpw6p1IGTDuW5nOg0KDQotIEjhu5NpIHF1eSBMb2dpc3RpYyAoTG9naXQpDQoNCi0gSOG7k2kgcXV5IFByb2JpdA0KDQotIEjhu5NpIHF1eSBDb21wbGVtZW50YXJ5IGxvZy1sb2cgKENsb2dsb2cpDQoNCi0gTcO0IGjDrG5oIHjDoWMgc3XhuqV0IHR1eeG6v24gdMOtbmggKExNUCkNCg0KVmnhu4djIMaw4bubYyBsxrDhu6NuZyBjw6FjIG3DtCBow6xuaCBuw6B5IMSRxrDhu6NjIHRo4buxYyBoaeG7h24gYuG6sW5nIHBoxrDGoW5nIHBow6FwIMaw4bubYyBsxrDhu6NuZyBo4bujcCBsw70gdOG7kWkgxJFhIChNYXhpbXVtIExpa2VsaWhvb2QgRXN0aW1hdGlvbiDigJMgTUxFKS4NCg0KKipCxrDhu5tjIDY6IMSQw6FuaCBnacOhIHbDoCBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AqKg0KDQpUw6FjIGdp4bqjIHPhu60gZOG7pW5nIGPDoWMgdGnDqnUgY2jDrSDEkcOhbmggZ2nDoSBtw7QgaMOsbmggYmFvIGfhu5NtOg0KDQotIENo4buJIHPhu5EgQUlDIChBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKQ0KDQotIMSQxrDhu51uZyBjb25nIFJPQyB2w6AgZGnhu4duIHTDrWNoIGTGsOG7m2kgxJHGsOG7nW5nIGNvbmcgKEFVQykNCg0KROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMgxJHDoW5oIGdpw6EsIG3DtCBow6xuaCB04buRdCBuaOG6pXQgc+G6vSDEkcaw4bujYyBs4buxYSBjaOG7jW4gxJHhu4MgZGnhu4VuIGdp4bqjaSB2w6AgxJHhu4EgeHXhuqV0IGNow61uaCBzw6FjaC4NCg0KKipCxrDhu5tjIDc6IEvhur90IGx14bqtbiB2w6Aga2h1eeG6v24gbmdo4buLKioNCg0KVMOhYyBnaeG6oyB04buVbmcgaOG7o3AgY8OhYyBr4bq/dCBxdeG6oyDEkeG7i25oIHTDrW5oIHbDoCDEkeG7i25oIGzGsOG7o25nLCB04burIMSRw7MgcsO6dCByYSBjw6FjIGvhur90IGx14bqtbiBjaMOtbmggduG7gSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgxJHhurdjIMSRaeG7g20gbmjDom4ga2jhuql1IGjhu41jIHbDoCB0w6xuaCB0cuG6oW5nIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAuIFRyw6puIGPGoSBz4bufIMSRw7MsIG5naGnDqm4gY+G7qXUgxJHGsGEgcmEgY8OhYyBraHV54bq/biBuZ2jhu4sgdGjhu7FjIHRp4buFbiBjaG8gdOG7lSBjaOG7qWMgeSB04bq/IHbDoCBuZ8aw4budaSBkw6JuIG5o4bqxbSBj4bqjaSB0aGnhu4duIHPhu6ljIGto4buPZSBj4buZbmcgxJHhu5NuZy4NCg0KLS0tDQoNCg0KIyBDaMawxqFuZyAzOiBL4bq+VCBRVeG6oiBOR0hJw4pOIEPhu6hVDQoNCiMjICoqMy4xLiBUaOG7gyBUcuG6oW5nIHTDoWMgxJHhu5luZyDEkeG6v24gTeG6rkMgQ0FPIEhVWeG6vlQgw4FQKioNCg0KIyMjIyAqKjMuMS4xIFRo4buRbmcga8OqIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgdHLhu7FjIHF1YW4gaMOzYSBjaG8gdOG7q25nIGJp4bq/bioqDQoNCioqVEjhu5BORyBLw4ogVOG6pk4gU+G7kCwgVOG6pk4gU1XhuqRUIGNobyBiaeG6v24gTeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KYGBge3J9DQpsZXZlbF9mcmVxIDwtIHRhYmxlKGRhdGEkSGFzX0h5cGVydGVuc2lvbikNCmxldmVsX3BlcmNlbnQgPC0gcHJvcC50YWJsZShsZXZlbF9mcmVxKSAqIDEwMA0KZGF0YS5mcmFtZShIYXNfSHlwZXJ0ZW5zaW9uID0gbmFtZXMobGV2ZWxfZnJlcSksDQogICAgICAgICAgIEZyZXF1ZW5jeSA9IGFzLm51bWVyaWMobGV2ZWxfZnJlcSksDQogICAgICAgICAgIFBlcmNlbnRhZ2UgPSByb3VuZChhcy5udW1lcmljKGxldmVsX3BlcmNlbnQpLCAxKSkNCmBgYA0KDQoqKlRy4buxYyBxdWFuIGhvw6EqKg0KDQpgYGB7cn0NCiMgTG9hZCB0aMawIHZp4buHbg0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShSQ29sb3JCcmV3ZXIpICAjIGTDuW5nIGNobyBwYWxldHRlIG3DoHUNCg0KIyBIw6BtIHTDoWkgc+G7rSBk4bulbmcgxJHhu4MgeOG7rSBsw70gdsOgIHbhur0gYmnhu4N1IMSR4buTDQpwbG90X3BpZSA8LSBmdW5jdGlvbihkYXRhLCB2YXIsIHRpdGxlKSB7DQogIHRhYiA8LSB0YWJsZShkYXRhW1t2YXJdXSkNCiAgZGYgPC0gYXMuZGF0YS5mcmFtZSh0YWIpDQogIGNvbG5hbWVzKGRmKSA8LSBjKCJDYXRlZ29yeSIsICJGcmVxdWVuY3kiKQ0KICBkZiRQZXJjZW50YWdlIDwtIGRmJEZyZXF1ZW5jeSAvIHN1bShkZiRGcmVxdWVuY3kpICogMTAwDQogIGRmJExhYmVsIDwtIHBhc3RlMChyb3VuZChkZiRQZXJjZW50YWdlLCAxKSwgIiUiKQ0KICANCiAgZ2dwbG90KGRmLCBhZXMoeCA9ICIiLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IENhdGVnb3J5KSkgKw0KICAgIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogICAgY29vcmRfcG9sYXIodGhldGEgPSAieSIpICsNCiAgICB0aGVtZV92b2lkKCkgKw0KICAgIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNSkgKw0KICAgIGxhYnModGl0bGUgPSB0aXRsZSwgZmlsbCA9IHZhcikgKw0KICAgIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFzdGVsMSIpDQp9DQpwbG90X3BpZShkYXRhLCAiSGFzX0h5cGVydGVuc2lvbiIsICJQaMOibiBi4buRIHTDrG5oIHRy4bqhbmcgbcSDYyBjYW8gaHV54bq/dCDDoXAiKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpUcm9uZyBi4buZIGThu68gbGnhu4d1IGfhu5NtIGPDoWMgY8OhIG5ow6JuIHThu6sgMTggxJHhur9uIDg0IHR14buVaSDEkeG6v24ga2jDoW0gYuG7h25oLCBuaMOzbSBjw7MgY2jhuqluIMSRb8OhbiB0xINuZyBodXnhur90IMOhcCBjaGnhur9tIDUyJSAoMS4wMzIgdHLGsOG7nW5nIGjhu6NwKSwgY2FvIGjGoW4gc28gduG7m2kgbmjDs20ga2jDtG5nIG3huq9jLCBjaGnhur9tIDQ4JSAoOTUzIHRyxrDhu51uZyBo4bujcCkuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHThu7cgbOG7hyBoaeG7h24gbeG6r2MgdMSDbmcgaHV54bq/dCDDoXAgdHJvbmcgcXXhuqduIHRo4buDIGLhu4duaCBuaMOibiDEkcaw4bujYyBnaGkgbmjhuq1uIGzDoCBraMOhIGNhbyB2w6AgY8OzIHh1IGjGsOG7m25nIG5o4buJbmggaMahbiBzbyB24bubaSBuaMOzbSBraMO0bmcgbeG6r2MsIHBo4bqjbiDDoW5oIHTDrW5oIHBo4buVIGJp4bq/biBj4bunYSBi4buHbmggbMO9IG7DoHkgdHJvbmcgZOG7ryBsaeG7h3UgbmdoacOqbiBj4bupdS4NCg0KKipUSOG7kE5HIEvDiiBU4bqmTiBT4buQLCBU4bqmTiBTVeG6pFQqKg0KDQpgYGB7cn0NCmFmZmVjdF9mcmVxIDwtIHRhYmxlKGRhdGEkQk1JKQ0KYWZmZWN0X3BlcmNlbnQgPC0gcHJvcC50YWJsZShhZmZlY3RfZnJlcSkgKiAxMDANCmRhdGEuZnJhbWUoQWZmZWN0cyA9IG5hbWVzKGFmZmVjdF9mcmVxKSwNCiAgICAgICAgICAgRnJlcXVlbmN5ID0gYXMubnVtZXJpYyhhZmZlY3RfZnJlcSksDQogICAgICAgICAgIFBlcmNlbnRhZ2UgPSByb3VuZChhcy5udW1lcmljKGFmZmVjdF9wZXJjZW50KSwgMSkpDQpgYGANCg0KKipUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQpwbG90X3BpZShkYXRhLCAiQk1JIiwgIlRI4buCIFRS4bqgTkciKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQpCaeG7g3UgxJHhu5MgbcO0IHThuqMgcGjDom4gYuG7kSB0aOG7gyB0cuG6oW5nIChCTUkpIGPhu6dhIGPDoWMgYuG7h25oIG5ow6JuIMSR4bq/biBraMOhbSBjaG8gdGjhuqV5LCA1OSw4JSBi4buHbmggbmjDom4gY8OzIGNo4buJIHPhu5EgQk1JIG7hurFtIHRyb25nIG5nxrDhu6FuZyBiw6xuaCB0aMaw4budbmcsIHRyb25nIGtoaSAzNSwzJSB0aHXhu5ljIG5ow7NtIHRo4burYSBjw6JuIChvdmVyd2VpZ2h0KSB2w6AgNCw5JSB0aGnhur91IGPDom4gKHVuZGVyd2VpZ2h0KS4NCg0KIyMjICoqMy4xLjIgVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIGJp4bq/biBUaOG7gyBUcuG6oW5nIHbDoCBN4bquQyBDQU8gSFVZ4bq+VCDDgVAqKg0KDQojIyMjIyAqKjMuMS4yLjEuIELhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qKg0KDQpUcm9uZyB0csaw4budbmcgaOG7o3AgbsOgeSB0YSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBnaeG7r2EgaGFpIGJp4bq/biBUaOG7gyBUcuG6oW5nIHbDoCBN4bquQyBDQU8gSFVZ4bq+VCDDgVAgY+G7p2EgYuG7h25oIG5ow6JuIHRoYW0gZ2lhIGto4bqjbyBzw6F0IC4gQuG6o25nIHThuqduIHPhu5EgZ2nDunAgY2jDum5nIHRhIGhp4buDdSByw7UgaMahbiBz4buxIGtow6FjIG5oYXUgdGhlbyAyIG5ow7NtLg0KDQpgYGB7cn0NCnRhYmxlX2Nhb2h1eWV0YXBfYm1pIDwtIHRhYmxlKGRhdGEkSGFzX0h5cGVydGVuc2lvbiwgZGF0YSRCTUkpDQphZGRtYXJnaW5zKHRhYmxlX2Nhb2h1eWV0YXBfYm1pKQ0KYGBgDQoNCiMjIyMjICoqMy4xLjIuMi4gVHLhu7FjIHF1YW4gaMOzYSoqDQoNCkvhur90IHF14bqjIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGNobyB0aOG6pXkgbmjDs20gT3ZlcndlaWdodCBjw7Mgc+G7kSBsxrDhu6NuZyBi4buHbmggbmjDom4gbeG6r2MgdMSDbmcgaHV54bq/dCDDoXAgY2FvIG5o4bqldCAoNjUwIHRyxrDhu51uZyBo4bujcCkgdsOgIGPFqW5nIGzDoCBuaMOzbSBjw7Mgc+G7kSBuZ8aw4budaSBraMO0bmcgbeG6r2MgdMSDbmcgaHV54bq/dCDDoXAgbOG7m24gbmjhuqV0ICg1MzIgdHLGsOG7nW5nIGjhu6NwKSwgcGjhuqNuIMOhbmggcuG6sW5nIHRo4burYSBjw6JuIGNoaeG6v20gdOG7tyB0cuG7jW5nIGNhbyB0cm9uZyBj4bqjIGhhaSBuaMOzbSBuaMawbmcgxJHhurdjIGJp4buHdCBsacOqbiBxdWFuIMSR4bq/biB04bu3IGzhu4cgbeG6r2MgY2FvIGjGoW4uDQoNCk5ow7NtIE5vcm1hbCBCTUkgY8OzIHBow6JuIGLhu5EgdMawxqFuZyDEkeG7kWkgY8OibiBi4bqxbmcgZ2nhu69hIG5nxrDhu51pIG3huq9jICgzMzUpIHbDoCBraMO0bmcgbeG6r2MgKDM2OCksIGNobyB0aOG6pXkgbeG7qWMgY8OibiBu4bq3bmcgYsOsbmggdGjGsOG7nW5nIGtow7RuZyBsb+G6oWkgdHLhu6sgaG/DoG4gdG/DoG4gbmd1eSBjxqEgdMSDbmcgaHV54bq/dCDDoXAuDQoNCk5ow7NtIFVuZGVyd2VpZ2h0IGPDsyBz4buRIGzGsOG7o25nIMOtdCBuaOG6pXQgKDUzIGtow7RuZyBt4bqvYzsgNDcgbeG6r2MpLCDEkeG7k25nIHRo4budaSB04bu3IGzhu4cgbeG6r2MgdsOgIGtow7RuZyBt4bqvYyBn4bqnbiB0xrDGoW5nIMSRxrDGoW5nLCBuaMawbmcgZG8gcXV5IG3DtCBt4bqrdSBuaOG7jyBuw6puIG3hu6ljIMSR4buZIGtow6FpIHF1w6F0IGPhuqduIMSRxrDhu6NjIGPDom4gbmjhuq9jLg0KDQpQaMOhdCBoaeG7h24gbsOgeSDEkeG6t3QgcmEgecOqdSBj4bqndSBj4bqnbiBraeG7g20gxJHhu4tuaCBt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqIGdp4buvYSBoYWkgYmnhur9uIG7DoHkgYuG6sW5nIGPDoWMgcGjGsMahbmcgcGjDoXAgbmjGsCBraeG7g20gxJHhu4tuaCBDaGktc3F1YXJlZCBob+G6t2MgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYywgbmjhurFtIMSRw6FuaCBnacOhIHhlbSBnaeG7m2kgdMOtbmggY8OzIOG6o25oIGjGsOG7n25nIMSR4buZYyBs4bqtcCDEkeG6v24gbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGhheSBraMO0bmcga2hpIGtp4buDbSBzb8OhdCBjw6FjIHnhur91IHThu5Ega2jDoWMuDQoNCmBgYHtyfQ0KIyBC4bqjbmcgY2jDqW8NCnRhYmxlX2Nhb2h1eWV0YXBfYm1pIDwtIHRhYmxlKGRhdGEkSGFzX0h5cGVydGVuc2lvbiwgZGF0YSRCTUkpDQoNCiMgQ2h1eeG7g24gdGjDoG5oIGRhdGEgZnJhbWUgxJHhu4MgZMO5bmcgduG7m2kgZ2dwbG90DQpkZl9wbG90IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfY2FvaHV5ZXRhcF9ibWkpDQpjb2xuYW1lcyhkZl9wbG90KSA8LSBjKCJIYXNfSHlwZXJ0ZW5zaW9uIiwgIkJNSSIsICJDb3VudCIpDQoNCiMgQmnhu4N1IMSR4buTDQpnZ3Bsb3QoZGZfcGxvdCwgYWVzKHggPSBCTUksIHkgPSBDb3VudCwgZmlsbCA9IEhhc19IeXBlcnRlbnNpb24pKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBsYWJzKHRpdGxlID0gIlTDrG5oIHRy4bqhbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHRoZW8gZ2nhu5tpIHTDrW5oIiwNCiAgICAgICB4ID0gIlRo4buDIFRy4bqhbmcgKEJNSSkiLA0KICAgICAgIHkgPSAiU+G7kSBsxrDhu6NuZyBN4bqvYyBDYW8gSHV54bq/dCDDgXAiLA0KICAgICAgIGZpbGwgPSAiQ2FvIEh1eeG6v3Qgw4FwIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpCaeG7g3UgxJHhu5MgdHLDqm4gdGjhu4MgaGnhu4duIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBCTUkgKHRo4buDIHRy4bqhbmcpIHbDoCB0w6xuaCB0cuG6oW5nIG3huq9jIGNhbyBodXnhur90IMOhcCB0cm9uZyBt4bqrdSBk4buvIGxp4buHdSB0aHUgdGjhuq1wIHThu6sgbmjDs20gYuG7h25oIG5ow6JuIMSR4buZIHR14buVaSAxOOKAkzg0LiBL4bq/dCBxdeG6oyBjaG8gdGjhuqV5Og0KDQotIE5ow7NtIE92ZXJ3ZWlnaHQgKHRo4burYSBjw6JuKSBjaGnhur9tIHThu7cgdHLhu41uZyBs4bubbiBuaOG6pXQgdsOgIGPDsyBz4buRIGzGsOG7o25nIG5nxrDhu51pIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiByw7UgcuG7h3Qgc28gduG7m2kgbmjDs20ga2jDtG5nIG3huq9jIChraG/huqNuZyA2NTAgc28gduG7m2kgNTMyIHRyxrDhu51uZyBo4bujcCkuIMSQaeG7gXUgbsOgeSBn4bujaSDDvSBy4bqxbmcgdMOsbmggdHLhuqFuZyB0aOG7q2EgY8OibiBjw7MgdGjhu4MgbMOgIG3hu5l0IHnhur91IHThu5EgbGnDqm4gcXVhbiBjaOG6t3QgY2jhur0gxJHhur9uIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcC4NCg0KLSBOaMOzbSBOb3JtYWwgQk1JIChjw6JuIG7hurduZyBiw6xuaCB0aMaw4budbmcpIGPDsyBz4buRIGzGsOG7o25nIG5nxrDhu51pIGtow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgKDM2OCkgbmjhu4luaCBoxqFuIHNvIHbhu5tpIG5ow7NtIG3huq9jICgzMzUpLCBuaMawbmcgc+G7sSBjaMOqbmggbOG7h2NoIGtow7RuZyDEkcOhbmcga+G7gy4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbmdheSBj4bqjIHRyb25nIG5ow7NtIGPDsyBjw6JuIG7hurduZyBiw6xuaCB0aMaw4budbmcsIG5ndXkgY8ahIGNhbyBodXnhur90IMOhcCB24bqrbiB04buTbiB04bqhaSDhu58gbeG7qWMgxJHDoW5nIGvhu4MuDQoNCi0gTmjDs20gVW5kZXJ3ZWlnaHQgKHRoaeG6v3UgY8OibikgY8OzIHF1eSBtw7QgbeG6q3Ugbmjhu48gbmjhuqV0IHbDoCB04bu3IGzhu4cgbeG6r2Mg4oCTIGtow7RuZyBt4bqvYyBn4bqnbiBuaMawIHTGsMahbmcgxJHGsMahbmcgKDQ3IHNvIHbhu5tpIDUzKSwgxJHhu5NuZyB0aOG7nWkgdGjhuqVwIGjGoW4gcuG6pXQgbmhp4buBdSBzbyB24bubaSBoYWkgbmjDs20gY8OybiBs4bqhaS4NCg0KQmnhu4N1IMSR4buTIGzDoG0gbuG7lWkgYuG6rXQgeHUgaMaw4bubbmcgcuG6sW5nIHRo4burYSBjw6JuIGPDsyBsacOqbiBxdWFuIMSR4bq/biB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIHRyb25nIHF14bqnbiB0aOG7gyBuZ2hpw6puIGPhu6l1LCB0cm9uZyBraGkgbmjDs20gdGhp4bq/dSBjw6JuIGNoaeG6v20gdOG7tyBs4buHIHLhuqV0IG5o4buPLCBjw7MgdGjhu4Mga2jDtG5nIMSR4bunIGzhu5tuIMSR4buDIHLDunQgcmEga+G6v3QgbHXhuq1uIG3huqFuaCBt4bq9IHbhu4EgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdGhp4bq/dSBjw6JuIHbDoCBjYW8gaHV54bq/dCDDoXAuDQoNCiMjIyMgKiozLjEuMy4gUGjDom4gdMOtY2ggUmVsYXRpdmUgUmlzayBnaeG7r2EgVGjhu4MgVHLhuqFuZyB2w6AgTeG6rkMgQ0FPIEhVWeG6vlQgw4FQKioNCg0KYGBge3J9DQppbnN0YWxsLnBhY2thZ2VzKCJlcGl0b29scyIsIHJlcG9zID0gImh0dHA6Ly9jcmFuLnJzdHVkaW8uY29tIikNCmxpYnJhcnkoZXBpdG9vbHMpDQpgYGANCg0KIFRyb25nIHBo4bqnbiBuw6B5LCB0w7RpIHPhur0gdGjhu7FjIGhp4buHbiB0w61uaCBSZWxhdGl2ZSBSaXNrIG5o4bqxbSBwaMOibiB0w61jaCBz4buxIOG6o25oIGjGsOG7n25nIGPhu6dhIDMgIG5ow7NtIHRo4buDIHRy4bqhbmcgbMOqbiBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGPhu6dhIGPDoWMgYuG7h25oIG5ow6JuIHRoYW0gZ2lhIGto4bqjbyBzw6F0LiBDaMO6bmcgdGEgc+G6vSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUlIpLCBs4bqleSBuaMOzbSBOb3JtYWwgKELDrG5oIFRoxrDhu51uZykgbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQogDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5ENCnRhYiA8LSBtYXRyaXgoYygzMzQsMzY4LCAgICMgTm9ybWFsOiBZZXMsIE5vDQogICAgICAgICAgICAgICAgNjUwLDUzMiwgICAjIE92ZXJ3ZWlnaHQ6IFllcywgTm8NCiAgICAgICAgICAgICAgICA0Nyw1MyksICAgICMgVW5kZXJ3ZWlnaHQ6IFllcywgTm8NCiAgICAgICAgICAgICAgbnJvdz0zLCBieXJvdz1UUlVFKQ0KDQojIMSQ4bq3dCB0w6puIGjDoG5nIHbDoCBj4buZdA0Kcm93bmFtZXModGFiKSA8LSBjKCJOb3JtYWwiLCAiT3ZlcndlaWdodCIsICJVbmRlcndlaWdodCIpDQpjb2xuYW1lcyh0YWIpIDwtIGMoIlllcyIsICJObyIpDQoNCiMgVMOtbmggUmlzayBSYXRpbw0KcnJfcmVzdWx0IDwtIHJpc2tyYXRpbyh0YWIsIHJldj0iY29sdW1ucyIpDQoNCiMgWGVtIGvhur90IHF14bqjDQpwcmludChycl9yZXN1bHQpDQpgYGANCg0KUGjDom4gdMOtY2ggUmlzayBSYXRpbyAoUlIpIGto4bqzbmcgxJHhu4tuaCBxdWFuIHPDoXQgdHLDqm4ga2hpIG5ow7NtIHRo4burYSBjw6JuIGPDsyBSUiA9IDEsMTE1ICg5NSUgQ0k6IDEsMDUyIOKAkyAxLDI2ODsgcCDiiYggMCwwMDE4KSwgbmdoxKlhIGzDoCBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIG7DoHkgY2FvIGjGoW4ga2hv4bqjbmcgMTUsNiUgc28gduG7m2kgbmjDs20gYsOsbmggdGjGsOG7nW5nIHbDoCBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIE5nxrDhu6NjIGzhuqFpLCBuaMOzbSB0aGnhur91IGPDom4gY8OzIFJSID0gMCw5ODcgKDk1JSBDSTogMCw3OTIg4oCTIDEsMjM3OyBwIOKJiCAwLDkxKSwgdGjhu4MgaGnhu4duIG5ndXkgY8ahIG3huq9jIHTGsMahbmcgxJHGsMahbmcgbmjDs20gYsOsbmggdGjGsOG7nW5nIHbDoCBraMO0bmcgxJHhuqF0IMSRxrDhu6NjIG3hu6ljIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KS+G6v3QgcXXhuqMgdHLDqm4gY+G7p25nIGPhu5EgZ2nhuqMgdGh1eeG6v3QgcuG6sW5nIHRo4burYSBjw6JuIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIHF1YW4gdHLhu41uZyDEkeG7kWkgduG7m2kgc+G7sSB4deG6pXQgaGnhu4duIGNhbyBodXnhur90IMOhcC4gVHJvbmcga2hpIMSRw7MsIHRoaeG6v3UgY8OibiBkxrDhu51uZyBuaMawIGtow7RuZyBsw6BtIHRoYXkgxJHhu5VpIMSRw6FuZyBr4buDIG5ndXkgY8ahIG3huq9jIGLhu4duaC4gTmjhu69uZyBwaMOhdCBoaeG7h24gbsOgeSBwaMO5IGjhu6NwIHbhu5tpIG5oaeG7gXUgbmdoacOqbiBj4bupdSBk4buLY2ggdOG7hSBo4buNYyB0csaw4bubYyDEkcOieSwgduG7kW4gxJHDoyBjaOG7iSByYSBt4buRaSBsacOqbiBo4buHIGdp4buvYSB0w6xuaCB0cuG6oW5nIHRo4burYSBjw6JuLCBiw6lvIHBow6wgdsOgIHPhu7EgZ2lhIHTEg25nIHThu7cgbOG7hyBt4bqvYyBjw6FjIGLhu4duaCBsw70gdGltIG3huqFjaCwgxJHhurdjIGJp4buHdCBsw6AgY2FvIGh1eeG6v3Qgw6FwLg0KDQojIyMjICoqMy4xLjQuIFBow6JuIHTDrWNoIE9kZCBSYXRpbyBnaeG7r2EgQk1JIHbDoCBt4bqvYyBjYW8gaHV54bq/dCDDoXAqKg0KDQpgYGB7cn0NCm9yX3Jlc3VsdCA8LSBvZGRzcmF0aW8odGFiLCByZXY9ImNvbHVtbnMiKQ0KIyBYZW0ga+G6v3QgcXXhuqMNCnByaW50KG9yX3Jlc3VsdCkNCmBgYA0KDQpQaMOibiB0w61jaCBPZGRzIFJhdGlvIChPUikgbmjhurFtIHNvIHPDoW5oIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBnaeG7r2EgY8OhYyBuaMOzbSBUaOG7gyBUcuG6oW5nLCB24bubaSBuaMOzbSBOb3JtYWwgxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91Lg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KIEvhur90IHF14bqjIHBow6JuIHTDrWNoIE9kZHMgUmF0aW8gKE9SKSBjaOG7iSByYSBy4bqxbmcgbmjDs20gdGjhu6thIGPDom4gY8OzIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiBuaMOzbSBiw6xuaCB0aMaw4budbmcgduG7m2kgT1IgPSAxLDM0NSAoOTUlIENJOiAxLDExNiDigJMgMSw2MjM7IHAg4omIIDAsMDAxKS4gxJBp4buBdSBuw6B5IMSR4buTbmcgbmdoxKlhIHbhu5tpIHZp4buHYyBuaOG7r25nIG5nxrDhu51pIHRodeG7mWMgbmjDs20gdGjhu6thIGPDom4gY8OzIG9kZHMgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGzhu5tuIGjGoW4ga2hv4bqjbmcgMzIlIHNvIHbhu5tpIG5ow7NtIGLDrG5oIHRoxrDhu51uZywgdsOgIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgbWFuZyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCk5nxrDhu6NjIGzhuqFpLCBuaMOzbSB0aGnhur91IGPDom4gY8OzIE9SID0gMCw5ODEgKDk1JSBDSTogMCw3OTEg4oCTIDEsMjMzOyBwIOKJiCAwLDkxKSwgdGjhu4MgaGnhu4duIHLhurFuZyBvZGRzIG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20gbsOgeSB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIG5ow7NtIGLDrG5oIHRoxrDhu51uZyB2w6Aga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KDQpL4bq/dCBxdeG6oyBuw6B5IGPhu6duZyBj4buRIG5o4bqtbiDEkeG7i25oIHLhurFuZyB0aOG7q2EgY8OibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBsacOqbiBxdWFuIG3huqFuaCDEkeG6v24gc+G7sSBnaWEgdMSDbmcga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLCB0cm9uZyBraGkgdMOsbmggdHLhuqFuZyB0aGnhur91IGPDom4ga2jDtG5nIGNobyB0aOG6pXkg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MuIFh1IGjGsOG7m25nIG7DoHkgcGjDuSBo4bujcCB24bubaSBuaGnhu4F1IG5naGnDqm4gY+G7qXUgZOG7i2NoIHThu4UgaOG7jWMgdHLGsOG7m2MgxJHDonksIHbhu5FuIMSRw6MgY2jhu4kgcmEgcuG6sW5nIHTDrWNoIGzFqXkgbeG7oSBjxqEgdGjhu4MsIMSR4bq3YyBiaeG7h3QgbMOgIG3hu6EgbuG7mWkgdOG6oW5nLCBjw7MgdmFpIHRyw7IgcXVhbiB0cuG7jW5nIHRyb25nIHZp4buHYyBsw6BtIHTEg25nIG5ndXkgY8ahIHTEg25nIGh1eeG6v3Qgw6FwIHRow7RuZyBxdWEgY8OhYyBjxqEgY2jhur8gbGnDqm4gcXVhbiDEkeG6v24gcuG7kWkgbG/huqFuIGNodXnhu4NuIGjDs2EgdsOgIMSRaeG7gXUgaMOyYSBt4bqhY2ggbcOhdS4NCg0KIyMjIyAqKjMuMS41LiBUaOG7kW5nIGvDqiBzdXkgZGnhu4VuKioNCg0KQ2jDum5nIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkeG7gyBraeG7g20gdHJhIGdp4bqjIHRodXnhur90IHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGdp4buvYSBCTUkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaC4NCg0KKipHaeG6oyB0aHV54bq/dCBraeG7g20gxJHhu4tuaDoqKg0KDQpI4oKAIChHaeG6oyB0aHV54bq/dCBraMO0bmcpIDogQk1JIHbDoCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wLg0KDQpI4oKBIChHaeG6oyB0aHV54bq/dCDEkeG7kWkpOiBCTUkgdsOgIG3huq9jIGNhbyBodXnhur90IMOhcCBsw6AgaGFpIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQpgYGB7cn0NCiMgS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nDQpjaGlzcS50ZXN0KHRhYmxlX2Nhb2h1eWV0YXBfYm1pKQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmgqKg0KDQpcWw0KXGNoaV4yID0gIDEwLjU2MixccXVhZCBkZiA9IDIsXHF1YWQgcFx0ZXh0ey12YWx1ZX0gPSAwLjAwNTA4OA0KXF0NCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggUGVhcnNvbidzIENoaS1zcXVhcmVkIHRlc3QgY2hvIGLhuqNuZyBjaMOpbyBnaeG7r2EgQk1JIHbDoCB0w6xuaCB0cuG6oW5nIGNhbyBodXnhur90IMOhcCBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogPSAxMC41NjIgduG7m2kgMiBi4bqtYyB04buxIGRvIHbDoCBnacOhIHRy4buLIHAgPSAwLjAwNTA4OC4gVsOsIHAgPCAwLjA1LCBjw7MgdGjhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgCkgcuG6sW5nIEJNSSB2w6AgdMOsbmggdHLhuqFuZyBjYW8gaHV54bq/dCDDoXAgbMOgIMSR4buZYyBs4bqtcC4gKirEkGnhu4F1IG7DoHkgaMOgbSDDvSBy4bqxbmcgY8OzIG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgY2jhu4kgc+G7kSBCTUkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCB0cm9uZyBxdeG6p24gdGjhu4MgxJHGsOG7o2MgcGjDom4gdMOtY2guKioNCg0KDQojIyMgKiozLjEuNi4gTcO0IGjDrG5oIGjhu5NpIHF1eSBjaG8gZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4qKg0KDQojIyMjIyMgKiozLjEuNi4xLiBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCoqDQoNCi0gU2F1IGtoaSB0aOG7sWMgaGnhu4duIGPDoWMga2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogbmjhurFtIMSRw6FuaCBnacOhIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGJtaSB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLCBr4bq/dCBxdeG6oyBjaG8gdGjhuqV5IFRI4buqQSBDw4JOIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcuG7h3QgxJHhur9uIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcC4gVHV5IG5oacOqbiwgxJHhu4MgaGnhu4N1IHLDtSBoxqFuIHbhu4EgbeG7qWMgxJHhu5kg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgY8WpbmcgbmjGsCB4w6J5IGThu7FuZyBt4buZdCBtw7QgaMOsbmggZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLCBuZ2hpw6puIGPhu6l1IHRp4bq/cCB04bulYyB0cmnhu4NuIGtoYWkgcGjDom4gdMOtY2ggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmguDQoNCi0gVmnhu4djIHPhu60gZOG7pW5nIG3DtCBow6xuaCBo4buTaSBxdXkgZ2nDunAgxJHhu4tuaCBsxrDhu6NuZyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBiaeG6v24gcGjhu6UgdGh14buZYyAobeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGhheSBraMO0bmcpIHbhu5tpIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCAoYm1pLCB0deG7lWksIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwLCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYywuLi4pLiBRdWEgxJHDsywgdGEgY8OzIHRo4buDIHjDoWMgxJHhu4tuaCDEkcaw4bujYyB54bq/dSB04buRIG7DoG8gbMOgIG5ndXkgY8ahIMSRw6FuZyBr4buDIMSR4buRaSB24bubaSBt4bqvYyBjYW8gaHV54bq/dCDDoXAsIGPFqW5nIG5oxrAgZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGPhu6dhIG3hu5l0IGLhu4duaCBuaMOibiBk4buxYSB0csOqbiDEkeG6t2MgxJFp4buDbSBsw6JtIHPDoG5nIGJhbiDEkeG6p3UuDQoNCsSQ4buDIHjDonkgZOG7sW5nIG3DtCBow6xuaCwgY2jDum5nIHRhIHPhur0gxJHhurd0IG5ow7NtIE5vcm1hbCBsw6BtIG3hu6ljIHRoYW0gY2hp4bq/dSDEkeG7gyBjw6FjIGjhu4cgc+G7kSBjw7MgdGjhu4MgxJHGsOG7o2MgZGnhu4VuIGdp4bqjaSBt4buZdCBjw6FjaCBo4bujcCBsw70uDQoNCmBgYHtyfQ0KIyDEkOG6t3QgbOG6oWkgbmjDs20gdGhhbSBjaGnhur91DQpkYXRhJEJNSSA8LSByZWxldmVsKGRhdGEkQk1JLCByZWYgPSAiTm9ybWFsIikNCmRhdGEkSHlwZXJ0ZW5zaW9uX2JpbiA8LSBpZmVsc2UoZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uID09ICJZZXMiLCAxLCAwKSMgQ2jhuqF5IGzhuqFpIG3DtCBow6xuaCBo4buTaSBxdXkNCm1vZGVsX3JlZl9iaW8gPC0gZ2xtKEh5cGVydGVuc2lvbl9iaW4gfiBCTUksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbF9yZWZfYmlvKQ0KYGBgDQoNClBoxrDGoW5nIHRyw6xuaCDGsOG7m2MgbMaw4bujbmc6DQoNCiQkDQpcaGF0e1l9ID0gMC40NzY1MjkgKyAwLjA3MzM4NiBcdGltZXMgQk1JX3tPdmVyd2VpZ2h0fSAtIDAuMDA2NTI5IFx0aW1lcyBCTUlfe1VuZGVyd2VpZ2h0fQ0KJCQNCg0KVHJvbmcgxJHDszoNCg0KJFxoYXR7WX0kOiBnacOhIHRy4buLIHRydW5nIGLDrG5oIGJp4bq/biAqKkh5cGVydGVuc2lvbl9iaW4qKiAoeOG6pXAgeOG7iSB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXApLg0KDQokQk1JX3tPdmVyd2VpZ2h0fSQgdsOgICRCTUlfe1VuZGVyd2VpZ2h0fSQ6IGJp4bq/biBnaeG6oyAoZHVtbXkgdmFyaWFibGVzKSwgduG7m2kgbmjDs20gdGhhbSBjaGnhur91IGzDoCAqKk5vcm1hbCoqLg0KDQp8IEJp4buDdSBoaeG7h24gICAgICB8IEjhu4cgc+G7kSAgICB8IEdp4bqjaSB0aMOtY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAoSW50ZXJjZXB0KSAgICB8IDAuNDc2NTI5ICB8IE5ow7NtICoqTm9ybWFsKiogY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBraG/huqNuZyAqKjQ3LjklKiouICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IEJNSU92ZXJ3ZWlnaHQgIHwgKzAuMDczMzg2IHwgTmjDs20gKipPdmVyd2VpZ2h0KiogY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCAqKmNhbyBoxqFuIDclKiogc28gduG7m2kgbmjDs20gTm9ybWFsICgqKnAgPSAwLjAwMyoqKS4gfA0KfCBCTUlVbmRlcndlaWdodCB8IC0wLjAwNjUyOSB8IE5ow7NtICoqVW5kZXJ3ZWlnaHQqKiBraMO0bmcga2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIE5vcm1hbCAoKipwID0gMC45MDIqKikuICAgICAgICAgICAgICAgICAgICAgICAgICB8DQoNCiMjIyMjIyAqKjMuMS42LjIuIE3DtCBow6xuaCBMb2dpdCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgTG9naXN0aWMgbMOgIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gcGjhu5UgYmnhur9uIG5o4bqldC4gTsOzIHRodeG7mWMgaOG7jSAqKkdMTSoqIHbhu5tpIGhhaSDEkeG6t2MgxJFp4buDbSBjaMOtbmg6DQoNCjEuICoqVGjDoG5oIHBo4bqnbiBuZ+G6q3Ugbmhpw6puKio6IEJp4bq/biBwaOG6o24gaOG7k2kgXCggWSBcKSB0dcOibiB0aGVvIHBow6JuIHBo4buRaSBCZXJub3VsbGkgKGhv4bq3YyBCaW5vbWlhbCkuICANCjIuICoqSMOgbSBsacOqbiBr4bq/dCoqOiBT4butIGThu6VuZyBow6BtIGxpw6puIGvhur90ICoqTG9naXQqKiwgXCggZyhccGkpID0gXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpIFwpLg0KDQpNw7QgaMOsbmggZ2nhuqMgxJHhu4tuaCBy4bqxbmcgKipsb2dpdCBj4bunYSB4w6FjIHN14bqldCB0aMOgbmggY8O0bmcqKiBcKCAoXHBpID0gUChZID0gMSBcbWlkIFxtYXRoYmZ7WH0pKSBcKSBsw6AgbeG7mXQgaMOgbSB0dXnhur9uIHTDrW5oIGPhu6dhIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcDoNCg0KXFsNClx0ZXh0e2xvZ2l0fShccGkpID0gXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpID0gXGJldGFfMCArIFxiZXRhXzEgWF8xICsgXGNkb3RzICsgXGJldGFfayBYX2sNClxdDQoNCkjDoG0gbmfGsOG7o2MgY+G7p2EgbsOzIOKAkyAqKmjDoG0gbG9naXN0aWMqKiDigJMgY2hvIHBow6lwIHTDrW5oIHRvw6FuIHjDoWMgc3XhuqV0Og0KDQpcWw0KXHBpID0gXGZyYWN7XGV4cChcYmV0YV8wICsgXGNkb3RzICsgXGJldGFfayBYX2spfXsxICsgXGV4cChcYmV0YV8wICsgXGNkb3RzICsgXGJldGFfayBYX2spfQ0KXF0NCg0KSMOgbSBuw6B5IGx1w7RuIHThuqFvIHJhIGdpw6EgdHLhu4sgXCggXHBpIFwpIHRyb25nIGtob+G6o25nICgwLCAxKSB2w6AgY8OzIGThuqFuZyBow6xuaCBjaOG7ryBTLg0KDQotIMSQ4buDIMSRw6FuaCBnacOhIOG6o25oIGjGsOG7n25nIGPhu6dhIHRo4buDIHRy4bqhbmcgxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCwgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyAobG9naXQpIMSRxrDhu6NjIHPhu60gZOG7pW5nIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgKDA6IEtow7RuZywgMTogQ8OzKSwgdsOgIGJp4bq/biDEkeG7mWMgbOG6rXAgbMOgIGJtaQ0KLiANCi0gTcO0IGjDrG5oIMSRxrDhu6NjIHjDonkgZOG7sW5nIHRoZW8gY8O0bmcgdGjhu6ljOg0KDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIHbhu5tpIGJp4bq/biBibWkNCm1vZGVsX2xvZ2l0X2JtaSA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJsb2dpdCIpLCBkYXRhID0gZGF0YSkNCg0KIyBYZW0ga+G6v3QgcXXhuqMNCnN1bW1hcnkobW9kZWxfbG9naXRfYm1pKQ0KDQpgYGANCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSAqKkxvZ2l0KiogbMOgIG3hu5l0IGThuqFuZyBj4bunYSBo4buTaSBxdXkgbG9naXN0aWMsIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgbG9naXQ6DQoNClxbDQpcdGV4dHtsb2dpdH0oXHBpKSA9IFxsb2dcbGVmdChcZnJhY3tccGl9ezEgLSBccGl9XHJpZ2h0KQ0KXF0NCg0KVOG7qyBr4bq/dCBxdeG6oyBtw7QgaMOsbmgsIHRhIHRodSDEkcaw4bujYyBwaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IGxvZ2l0Og0KDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpID0gLTAuMDkzOTUgKyAwLjI5NDI4IFxjZG90IFx0ZXh0e092ZXJ3ZWlnaHR9IC0wLjAyNjE5IFxjZG90IFx0ZXh0e1VuZGVyd2VpZ2h0fQ0KXF0NCg0KfCBOaMOzbSBCTUkgICAgfCBI4buHIHPhu5EgKGxvZy1vZGRzKSB8IHAtdmFsdWUgICB8IE9kZHMgUmF0aW8gKCRlXntcYmV0YX0kKSB8IEdp4bqjaSB0aMOtY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IChJbnRlcmNlcHQpIHwgLTAuMDkzOTUgICAgICAgICB8IDAuMjEzICAgICB8IDAuOTEgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgKipCw6xuaCB0aMaw4budbmcgKE5vcm1hbCB3ZWlnaHQpKiosIG9kZHMgbeG6r2MgdMSDbmcgaHV54bq/dCDDoXAgY8ahIGLhuqNuIFx+MC45MSAoa2jDtG5nIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhKS4gICAgICAgICB8DQp8IE92ZXJ3ZWlnaHQgIHwgKzAuMjk0MjggICAgICAgICB8IDAuMDAyXCpcKiB8IDEuMzQgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtICoqdGjhu6thIGPDom4qKiBjw7Mgb2RkcyBt4bqvYyB0xINuZyBodXnhur90IMOhcCAqKmNhbyBoxqFuIDEuMzQgbOG6p24qKiBzbyB24bubaSBuaMOzbSBiw6xuaCB0aMaw4budbmcgKCoqcCA9IDAuMDAyKiosIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6opLiB8DQp8IFVuZGVyd2VpZ2h0IHwgLTAuMDI2MTkgICAgICAgICB8IDAuOTAzICAgICB8IDAuOTcgICAgICAgICAgICAgICAgICAgICB8IE5ow7NtICoqdGhp4bq/dSBjw6JuKioga2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyB24buBIG9kZHMgbeG6r2MgdMSDbmcgaHV54bq/dCDDoXAgc28gduG7m2kgbmjDs20gYsOsbmggdGjGsOG7nW5nICgqKnAgPSAwLjkwMyoqKS4gICAgICAgICAgICB8DQoNCioqVOG7tyBz4buRIE9kZHMgKE9kZHMgUmF0aW8pKioNCg0KYGBge3J9DQojIFTDrW5oIE9kZHMgUmF0aW8NCmV4cChjb2VmKG1vZGVsX2xvZ2l0X2JtaSkpDQpgYGANCg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KLSBQaMOibiB0w61jaCBo4buTaSBxdXkgbG9naXN0aWMgxJHGsOG7o2MgdGjhu7FjIGhp4buHbiBuaOG6sW0gxJHDoW5oIGdpw6Eg4bqjbmggaMaw4bufbmcgY+G7p2EgdMOsbmggdHLhuqFuZyBCTUkgxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcC4gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGNobyBiaeG6v24gQk1JT3ZlcndlaWdodCBsw6AgMC4yOTQgKHAgPSAwLjAwMiksIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgbmjDs20gdGjhu6thIGPDom4gdsOgIG5ow7NtIEJNSSBiw6xuaCB0aMaw4budbmcgKHRoYW0gY2hp4bq/dSkuIEPhu6UgdGjhu4MsIG5ow7NtIHRo4burYSBjw6JuIGPDsyBsb2ctb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIEtoaSBjaHV54buDbiDEkeG7lWkgc2FuZyBvZGRzIHJhdGlvLCB0YSBjw7MgZXhwKDAuMjk0KeKJiDEuMzQsIG5naMSpYSBsw6AgbmjDs20gdGjhu6thIGPDom4gY8OzIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiBraG/huqNuZyAzNCUgc28gduG7m2kgbmjDs20gQk1JIGLDrG5oIHRoxrDhu51uZy4NCg0KLSDEkOG7kWkgduG7m2kgYmnhur9uIEJNSVVuZGVyd2VpZ2h0LCBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nIGzDoCAtMC4wMjYgKHAgPSAwLjkwMyksIGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuaMOzbSB0aGnhur91IGPDom4ga2jDtG5nIGtow6FjIGJp4buHdCByw7UgcuG7h3QgduG7gSBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgc28gduG7m2kgbmjDs20gYsOsbmggdGjGsOG7nW5nLg0KDQotIE3DtCBow6xuaCBjw7MgZ2nDoSB0cuG7iyBBSUMgPSAyNzQ0LjEsIHBo4bqjbiDDoW5oIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgY2jhuqVwIG5o4bqtbiDEkcaw4bujYyDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3UgxJHGoW4gYmnhur9uLg0KDQpL4bq/dCBxdeG6oyBuw6B5IGto4bqzbmcgxJHhu4tuaCB0aOG7q2EgY8OibiBsw6AgbeG7mXQgeeG6v3UgdOG7kSBuZ3V5IGPGoSDEkcOhbmcga+G7gyBsacOqbiBxdWFuIMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAsIHRyb25nIGtoaSB0aGnhur91IGPDom4ga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyByw7UgcuG7h3QuDQoNCiMjIyMjIyAqKjMuMS42LjMuIE3DtCBow6xuaCBQcm9iaXQqKg0KDQotIFBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGJtaSB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLCBz4butIGThu6VuZyBtw7QgaMOsbmggUHJvYml0LCBuaOG6sW0gc28gc8OhbmggduG7m2kgbcO0IGjDrG5oIExvZ2l0IMSRw6MgdGjhu7FjIGhp4buHbiB0csaw4bubYyDEkcOzLg0KDQotIE3DtCBow6xuaCBo4buTaSBxdXkgKipQcm9iaXQqKiBsw6AgbeG7mXQgZOG6oW5nIG3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4sIHTGsMahbmcgdOG7sSBuaMawIExvZ2lzdGljLCBuaMawbmcgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dCBk4buxYSB0csOqbiBwaMOibiBwaOG7kWkgY2h14bqpbiB04bqvYyB0w61jaCBsxal5IHRoYXkgdsOsIGjDoG0gbG9naXQuDQoNCi0gKipUaMOgbmggcGjhuqduIG5n4bqrdSBuaGnDqm46KioNCkJp4bq/biBwaOG6o24gaOG7k2kgXCggWSBcaW4gXHswLCAxXH0gXCkgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgQmVybm91bGxpIChob+G6t2MgQmlub21pYWwpLg0KDQoNCi0gTcO0IGjDrG5oIHPhu60gZOG7pW5nICoqaMOgbSBsacOqbiBr4bq/dCBQcm9iaXQqKiwgbMOgIG5naOG7i2NoIMSR4bqjbyBj4bunYSBow6BtIHBow6JuIHBo4buRaSB0w61jaCBsxal5IChDREYpIGNodeG6qW46DQoNClxbDQpnKFxwaSkgPSBcUGhpXnstMX0oXHBpKQ0KXF0NCg0KdHJvbmcgxJHDsyBcKCBcUGhpXnstMX0gXCkgbMOgICoqbmdo4buLY2ggxJHhuqNvKiogY+G7p2EgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiBjaHXhuqluIGjDs2EgKG1lYW4gPSAwLCBzdGQgPSAxKS4NCg0KLSAqKkThuqFuZyBtw7QgaMOsbmg6KioNCg0KICAtIE3DtCBow6xuaCBnaeG6oyDEkeG7i25oIHLhurFuZzoNCg0KXFsNClxQaGleey0xfShccGkpID0gXGJldGFfMCArIFxiZXRhXzEgWF8xICsgXGNkb3RzICsgXGJldGFfayBYX2sNClxdDQoNCiAgLSBIYXkgdmnhur90IGzhuqFpIHRoZW8geMOhYyBzdeG6pXQ6DQoNClxbDQpccGkgPSBcUGhpKFxiZXRhXzAgKyBcYmV0YV8xIFhfMSArIFxjZG90cyArIFxiZXRhX2sgWF9rKQ0KXF0NCg0KLSAqKkRp4buFbiBnaeG6o2k6KioNCg0KLSBNw7QgaMOsbmggUHJvYml0IGdp4bqjIMSR4buLbmggdOG7k24gdOG6oWkgbeG7mXQgKipiaeG6v24gdGnhu4FtIOG6qW4qKiBcKCBaIFxzaW0gXG1hdGhjYWx7Tn0oMCwgMSkgXCksIHbDoCB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiBcKCBZID0gMSBcKSBsw6AgeMOhYyBzdeG6pXQgbcOgIGJp4bq/biB0aeG7gW0g4bqpbiB2xrDhu6N0IG5nxrDhu6FuZy4NCi0gVsOsIHPhu60gZOG7pW5nIHBow6JuIHBo4buRaSBjaHXhuqluLCBQcm9iaXQgY8OzIG7hu4FuIHThuqNuZyBsw70gdGh1eeG6v3Qgc8OidSBoxqFuIHbhu4EgKip4w6FjIHN14bqldCB0aeG7gW0g4bqpbioqLCDEkeG6t2MgYmnhu4d0IHRyb25nIGPDoWMgbcO0IGjDrG5oIGtpbmggdOG6vyBsxrDhu6NuZy4NCg0KLSAqKlNvIHPDoW5oIHbhu5tpIExvZ2lzdGljOioqDQoNCi0gQ+G6oyBoYWkgbcO0IGjDrG5oIMSR4buBdSBwaMO5IGjhu6NwIGNobyBk4buvIGxp4buHdSBuaOG7iyBwaMOibi4NCi0gUHJvYml0IHRoxrDhu51uZyDEkcaw4bujYyBz4butIGThu6VuZyBraGkgY+G6p24gZ2nhuqMgxJHhu4tuaCB0w61uaCBjaHXhuqluIGPhu6dhIHNhaSBz4buRLg0KLSBT4buxIGtow6FjIGJp4buHdCBjaMOtbmggbuG6sW0g4bufIGjDrG5oIGThuqFuZyBow6BtIGxpw6puIGvhur90OiBMb2dpc3RpYyBjw7MgKirEkXXDtGkgZMOgeSBoxqFuKiogKHBow6JuIHBo4buRaSBMb2dpc3RpYyBjw7MgcGjDom4gcGjhu5FpIGNodeG6qW4gaMOzYSB0xrDGoW5nIHThu7EgY2h14bqpbiwgbmjGsG5nIGJp4bq/biB0aGnDqm4gbOG7m24gaMahbikuDQoNCi0gKipCaeG7g3UgZGnhu4VuIGjDrG5oIGNo4buvIFM6KioNCg0KQ8WpbmcgbmjGsCBtw7QgaMOsbmggbG9naXQsIG3DtCBow6xuaCBQcm9iaXQgdOG6oW8gcmEgeMOhYyBzdeG6pXQgXCggXHBpIFxpbiAoMCwgMSkgXCkgdsOgIGPDsyDEkeG7kyB0aOG7iyBk4bqhbmcgKipow6BtIGNo4buvIFMqKiAoc2lnbW9pZCksIG5oxrBuZyBk4buRYyB2w6AgdOG7kWMgxJHhu5kgaOG7mWkgdOG7pSBraMOhYyBzbyB24bubaSBsb2dpdC4NCg0KYGBge3J9DQojIE3DtCBow6xuaCBQcm9iaXQNCnByb2JpdF9tb2RlbF9ibWkgPC0gZ2xtKEh5cGVydGVuc2lvbl9iaW4gfiBCTUksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkYXRhKQ0KDQojIFhlbSBr4bq/dCBxdeG6oyBtw7QgaMOsbmgNCnN1bW1hcnkocHJvYml0X21vZGVsX2JtaSkNCmBgYA0KDQotIE3DtCBow6xuaCBo4buTaSBxdXkgKipQcm9iaXQqKiBsw6AgbeG7mXQgZOG6oW5nIGPhu6dhIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dCBk4buxYSB0csOqbiBwaMOibiBwaOG7kWkgY2h14bqpbiB04bqvYyB0w61jaCBsxal5Og0KDQpcWw0KZyhccGkpID0gXFBoaV57LTF9KFxwaSkNClxdDQoNCi0gVOG7qyBr4bq/dCBxdeG6oyBtw7QgaMOsbmgsIHRhIHRodSDEkcaw4bujYyBwaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IFByb2JpdDoNCk3DtCBow6xuaCBQcm9iaXQgbMOgIG3hu5l0IGThuqFuZyBo4buTaSBxdXkgbmjhu4sgcGjDom4sIHPhu60gZOG7pW5nIGjDoG0gbGnDqm4ga+G6v3QgZOG7sWEgdHLDqm4gcGjDom4gcGjhu5FpIGNodeG6qW4gdMOtY2ggbMWpeToNCg0KJCQNCmcoXHBpKSA9IFxQaGleey0xfShccGkpDQokJA0KDQpU4burIGvhur90IHF14bqjIG3DtCBow6xuaDoNCg0KJCQNClxwaSA9IFxQaGlcbGVmdCgtMC4wNTg4NyArIDAuMTg0MzEgXGNkb3QgXHRleHR7Qk1JT3ZlcndlaWdodH0gLSAwLjAxNjQwIFxjZG90IFx0ZXh0e0JNSVVuZGVyd2VpZ2h0fVxyaWdodCkNCiQkDQoNCktoaSBCTUkgdMSDbmcgdOG7qyBiw6xuaCB0aMaw4budbmcgc2FuZyAqKnRo4burYSBjw6JuKiosIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCB0xINuZyB0aMOqbToNCiAgXFsNCiAgXFBoaSgtMC4wNTg4NyArIDAuMTg0MzEpIC0gXFBoaSgtMC4wNTg4NykgDQogID0gXFBoaSgwLjEyNTQ0KSAtIFxQaGkoLTAuMDU4ODcpIA0KICBcYXBwcm94IDAuNTQ5OSAtIDAuNDc2NSA9IDAuMDczNA0KICBcXQ0KICDihpIgKipOaMOzbSB0aOG7q2EgY8OibiBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIGtob+G6o25nIDcuMyUgc28gduG7m2kgbmjDs20gYsOsbmggdGjGsOG7nW5nKiogKGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6opLg0KDQoqKkRp4buFbiBnaeG6o2kgaOG7hyBz4buRKioNCg0KfCBCaeG6v24gICAgICAgICAgICAgIHwgSOG7hyBz4buRIChFc3RpbWF0ZSkgfCBwLXZhbHVlIHwgR2nhuqNpIHRow61jaCB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tLS0tfA0KfCAoSW50ZXJjZXB0KSAgICAgICB8IC0wLjA1ODg3ICAgICAgICB8IDAuMjEzICAgfCBOaMOzbSAqKkJNSSBiw6xuaCB0aMaw4budbmcqKiAodGhhbSBjaGnhur91KSBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGtob+G6o25nIFwoIFxQaGkoLTAuMDU4ODcpIFxhcHByb3ggNDcuN1wlIFwpLiBLaMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gfA0KfCBCTUlPdmVyd2VpZ2h0ICAgICB8ICswLjE4NDMxICAgICAgICB8IDAuMDAyICAgfCBOaMOzbSAqKnRo4burYSBjw6JuKiogY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBraG/huqNuZyBcKCBcUGhpKC0wLjA1ODg3KzAuMTg0MzEpIFxhcHByb3ggNTQuOFwlIFwpLCB0xINuZyB+Ny4xIMSRaeG7g20gJSBzbyB24bubaSBuaMOzbSBiw6xuaCB0aMaw4budbmcgKCoqcCA8IDAuMDEqKikuIHwNCnwgQk1JVW5kZXJ3ZWlnaHQgICAgfCAtMC4wMTY0MCAgICAgICAgfCAwLjkwMyAgIHwgTmjDs20gKip0aGnhur91IGPDom4qKiBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGfhuqduIHTGsMahbmcgxJHGsMahbmcgbmjDs20gYsOsbmggdGjGsOG7nW5nICjiiYg0NyUpLCAqKmtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiouIHwNCg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KLSAqKlRo4burYSBjw6JuIChPdmVyd2VpZ2h0KSoqIGzDoCB54bq/dSB04buRIG5ndXkgY8ahIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiAgDQotICoqVGhp4bq/dSBjw6JuIChVbmRlcndlaWdodCkqKiBraMO0bmcgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDLiAgDQotICoqQUlDID0gMjc0NC4xKiosIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdMawxqFuZyDEkcawxqFuZyB24bubaSBtw7QgaMOsbmggbG9naXN0aWMuICANCg0KIyMjIyMgKiozLjEuNy4gxJDDoW5oIGdpw6EgbcO0IGjDrG5oKioNCg0KKipC4bqjbmcgdOG7lW5nIGjhu6NwIGvhur90IHF14bqjIGJhIG3DtCBow6xuaCBo4buTaSBxdXkqKg0KDQp8IE3DtCBow6xuaCB8IEjhu4cgc+G7kSBjaOG6t24gJFxoYXR7XGJldGF9XzAkIHwgSOG7hyBz4buRIEJNSU92ZXJ3ZWlnaHQgJFxoYXR7XGJldGF9XzEkIHwgR2nDoSB0cuG7iyBwIChCTUlPdmVyd2VpZ2h0KSB8IEFJQyAgICB8IERp4buFbiBnaeG6o2kgxJHDoW5nIGNow7ogw70gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IEdMTSAgICAgfCAwLjQ3NjUgICAgICAgICAgICAgICAgICAgICB8IDAuMDczNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMC4wMDIwNiAgICAgICAgICAgICAgICAgICB8IDI3NDQuMSB8IFRo4burYSBjw6JuIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGtob+G6o25nICoqNy4zJSoqIHwNCnwgTG9naXQgICB8IC0wLjA5Mzk1ICAgICAgICAgICAgICAgICAgIHwgMC4yOTQyOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAwLjAwMjA2ICAgICAgICAgICAgICAgICAgIHwgMjc0NC4xIHwgT1IgPSAkZV57MC4yOTQyOH0gXGFwcHJveCAxLjM0JCAobmd1eSBjxqEgY2FvIGjGoW4gXH4zNCUpICAgICB8DQp8IFByb2JpdCAgfCAtMC4wNTg4NyAgICAgICAgICAgICAgICAgICB8IDAuMTg0MzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMC4wMDIwNSAgICAgICAgICAgICAgICAgICB8IDI3NDQuMSB8ICRcUGhpKDAuMTI1NCkgLSBcUGhpKC0wLjA1ODkpIFxhcHByb3ggNy4zXCUkICAgICAgICAgICAgICAgIHwNCg0KDQpD4bqjIGJhIG3DtCBow6xuaCDEkeG7gXUgY2hvIHRo4bqleSBuaMOzbSB0aOG7q2EgY8OibiAoQk1JT3ZlcndlaWdodCkgY8OzIOG6o25oIGjGsOG7n25nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAg4omIIDAuMDAyKSDEkeG6v24gbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLCB24bubaSBt4bupYyB0xINuZyB4w6FjIHN14bqldCBraG/huqNuZyA3LjMlIHNvIHbhu5tpIG5ow7NtIEJNSSBiw6xuaCB0aMaw4budbmcuDQoNCkFJQyBi4bqxbmcgbmhhdSAoMjc0NC4xKSBjaG8gTG9naXQgdsOgIFByb2JpdCwgY2hvIHRo4bqleSBjaMO6bmcgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nIHbDoCDEkeG7gXUgdOG7kXQgaMahbiBMUE0gKEdMTSB0dXnhur9uIHTDrW5oKSB24buBIG3hurd0IGzDvSB0aHV54bq/dC4NCg0KVHJvbmcg4bupbmcgZOG7pW5nIHRo4buxYyB0aeG7hW46DQoNCkxvZ2l0IMSRxrDhu6NjIMawdSB0acOqbiB2w6wgZOG7hSBkaeG7hW4gZ2nhuqNpOiBuZ8aw4budaSB0aOG7q2EgY8OibiBjw7Mgb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4ga2hv4bqjbmcgMS4zNCBs4bqnbiBzbyB24bubaSBuZ8aw4budaSBiw6xuaCB0aMaw4budbmcuDQoNClByb2JpdCBtw7QgdOG6oyB0xrDGoW5nIHThu7EgbmjGsG5nIGPhuqduIGTDuW5nIHBow6JuIHBo4buRaSBjaHXhuqluIHTDrWNoIGzFqXkgxJHhu4MgZ2nhuqNpIHRow61jaC4NCg0KRG8gxJHDsywgbcO0IGjDrG5oIExvZ2l0IGzDoCBs4buxYSBjaOG7jW4gdGjDrWNoIGjhu6NwIMSR4buDIGLDoW8gY8OhbyBr4bq/dCBxdeG6oyB0cm9uZyBuZ2hpw6puIGPhu6l1IG7DoHkuDQogDQojIyMgKiozLjIgSMO6dCB0aHXhu5FjIHTDoWMgxJHhu5luZyDEkeG6v24ga2jhuqMgbsSDbmcgdMOhaSBi4buHbmgqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgY2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgY+G7p2EgYuG7h25oIG5ow6JuIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdW5nIHRoxrAgdHV54bq/biBnacOhcCBiaeG7h3QgaMOzYSBzYXUgxJFp4buBdSB0cuG7iy4gQmnhur9uIMSR4buZYyBs4bqtcCBsw6AgU21va2luZyAoY8OzIGhv4bq3YyBraMO0bmcgaMO6dCB0aHXhu5FjKSB2w6AgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIEh5cGVydGVuc2lvbiAoY8OzIGhv4bq3YyBraMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKS4NCg0KIyMjIyMgKiozLjIuMSBC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCBjaG8gYmnhur9uIEjDunQgdGh14buRYyAoU21va2luZykqKg0KDQpgYGB7cn0NCnRhYl9zbW9raW5nIDwtIHRhYmxlKGRhdGEkU21va2luZ19TdGF0dXMpDQp0YWJfc21va2luZw0KYGBgDQoNCi0gS+G6v3QgcXXhuqMgdHLDqm4gc+G6vSDEkcaw4bujYyB0cuG7sWMgcXVhbiBow7NhIGLhurFuZyBiaeG7g3UgxJHhu5MgY+G7mXQgxJHhu4Mgc28gc8Ohbmggc+G7kSBsxrDhu6NuZyBnaeG7r2EgaGFpIG5ow7NtLg0KDQpgYGB7cn0NCmJhcnBsb3QodGFiX3Ntb2tpbmcsDQogICAgICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHThuqduIHPhu5EgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMiLA0KICAgICAgICB4bGFiID0gIlTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIiwNCiAgICAgICAgeWxhYiA9ICJU4bqnbiBz4buRIiwNCiAgICAgICAgY29sID0gYygibGlnaHRjeWFuIiwgImxpZ2h0Y29yYWwiKSwNCiAgICAgICAgYm9yZGVyID0gIndoaXRlIiwNCiAgICAgICAgeWxpbSA9IGMoMCwgbWF4KHRhYl9zbW9raW5nKSArIDQwKSkgLT4gYnBfc21va2luZw0KDQp0ZXh0KHggPSBicF9zbW9raW5nLCB5ID0gdGFiX3Ntb2tpbmcgKyAxNSwgbGFiZWxzID0gdGFiX3Ntb2tpbmcpDQpgYGANCg0KLSBUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRIHbDoCBiaeG7g3UgxJHhu5MsIHRhIHRo4bqleSBy4bqxbmcgdHJvbmcgdOG7lW5nIHPhu5EgMzgzIGLhu4duaCBuaMOibiwgY8OzIDMyMyBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjIChObyksIGNoaeG6v20gxJFhIHPhu5EuIFRyb25nIGtoaSDEkcOzLCBz4buRIGLhu4duaCBuaMOibiBjw7MgaMO6dCB0aHXhu5FjIChZZXMpIGzDoCA2MCBuZ8aw4budaS4NClRp4bq/cCB0aGVvLCBjaMO6bmcgdGEgc+G6vSB0w61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtIHbDoCB24bq9IGJp4buDdSDEkeG7kyB0csOybiDEkeG7gyB0aOG7gyBoaeG7h24gcsO1IGjGoW4gc+G7sSBjaMOqbmggbOG7h2NoIHbhu4EgbeG6t3QgdMawxqFuZyDEkeG7kWkgZ2nhu69hIGhhaSBuaMOzbS4NCg0KYGBge3J9DQojIFThuqFvIGRhdGFmcmFtZSB04burIGLhuqNuZyB04bqnbiBz4buRDQpzbW9raW5nX2ZyZXEgPC0gYXMuZGF0YS5mcmFtZSh0YWJfc21va2luZykNCmNvbG5hbWVzKHNtb2tpbmdfZnJlcSkgPC0gYygiU21va2luZyIsICJGcmVxdWVuY3kiKQ0KDQojIFTDrW5oIHBo4bqnbiB0csSDbQ0Kc21va2luZ19mcmVxJFBlcmNlbnRhZ2UgPC0gc21va2luZ19mcmVxJEZyZXF1ZW5jeSAvIHN1bShzbW9raW5nX2ZyZXEkRnJlcXVlbmN5KSAqIDEwMA0KDQojIFThuqFvIG5ow6NuDQpzbW9raW5nX2ZyZXEkTGFiZWwgPC0gcGFzdGUwKHJvdW5kKHNtb2tpbmdfZnJlcSRQZXJjZW50YWdlLCAxKSwgIiUiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIHRyw7JuDQpnZ3Bsb3Qoc21va2luZ19mcmVxLCBhZXMoeCA9ICIiLCB5ID0gUGVyY2VudGFnZSwgZmlsbCA9IFNtb2tpbmcpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSArDQogIHRoZW1lX3ZvaWQoKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBMYWJlbCksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpLCBzaXplID0gNSkgKw0KICBsYWJzKHRpdGxlID0gIlBow6JuIGLhu5EgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgY+G7p2EgY8OhYyBi4buHbmggbmjDom4iKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJsaWdodGN5YW4iLCAiWWVzIiA9ICJsaWdodGNvcmFsIikpDQpgYGANCg0KDQotIEJp4buDdSDEkeG7kyB0csOybiBjaG8gdGjhuqV5IG3hu5l0IGPDoWNoIHRy4buxYyBxdWFuIHLhurFuZyBuaMOzbSBi4buHbmggbmjDom4ga2jDtG5nIGjDunQgdGh14buRYyBjaGnhur9tIMSR4bq/biA4NC4zJSB0cm9uZyBt4bqrdSBuZ2hpw6puIGPhu6l1LCB0cm9uZyBraGkgbmjDs20gaMO6dCB0aHXhu5FjIGNo4buJIGNoaeG6v20gMTUuNyUuIFPhu7EgY2jDqm5oIGzhu4djaCBs4bubbiBuw6B5IGNobyB0aOG6pXkgdGjDs2kgcXVlbiBow7p0IHRodeG7kWMga2jDtG5nIHBo4bqjaSBsw6AgbeG7mXQgxJHhurdjIMSRaeG7g20gcGjhu5UgYmnhur9uIHRyb25nIG5ow7NtIGLhu4duaCBuaMOibiDEkcaw4bujYyBraOG6o28gc8OhdC4gVHV5IG5oacOqbiwgxJFp4buBdSBxdWFuIHRy4buNbmcgbMOgIHBo4bqjaSBwaMOibiB0w61jaCB4ZW0gbGnhu4d1IG5ow7NtDQoNCiMjICoqMy4yLiBUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyBj4bunYSBi4buHbmggbmjDom4gdMOhYyDEkeG7mW5nIMSR4bq/biBjYW8gaHV54bq/dCDDoXAqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgY2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgY+G7p2EgYuG7h25oIG5ow6JuIHbDoCBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLiBCaeG6v24gxJHhu5ljIGzhuq1wIGzDoCBTbW9raW5nX1N0YXR1cyAoY8OzIGhv4bq3YyBraMO0bmcgaMO6dCB0aHXhu5FjKSB2w6AgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIEhhc19IeXBlcnRlbnNpb24gKGPDsyBob+G6t2Mga2jDtG5nIGLhu4sgY2FvIGh1eeG6v3Qgw6FwKS4NCg0KDQojIyMjICoqMy4yLjEgVGjhu5FuZyBrw6ogdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCB0cuG7sWMgcXVhbiBow7NhKioNCg0KIyMjIyAqKjMuMi4xIELhuqNuZyB04bqnbiBz4buRIC0gdOG6p24gc3XhuqV0IGNobyBiaeG6v24gSMO6dCB0aHXhu5FjIChTbW9raW5nX1N0YXR1cykqKg0KDQpgYGB7cn0NCnRhYl9zbW9raW5nIDwtIHRhYmxlKGRhdGEkU21va2luZ19TdGF0dXMpDQp0YWJfc21va2luZw0KYGBgDQoNCkvhur90IHF14bqjIHRyw6puIHPhur0gxJHGsOG7o2MgdHLhu7FjIHF1YW4gaMOzYSBi4bqxbmcgYmnhu4N1IMSR4buTIGPhu5l0IMSR4buDIHNvIHPDoW5oIHPhu5EgbMaw4bujbmcgZ2nhu69hIGhhaSBuaMOzbS4NCg0KYGBge3J9DQpiYXJwbG90KHRhYl9zbW9raW5nLA0KICAgICAgICBtYWluID0gIkJp4buDdSDEkeG7kyB04bqnbiBz4buRIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIiwNCiAgICAgICAgeGxhYiA9ICJUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgIHlsYWIgPSAiVOG6p24gc+G7kSIsDQogICAgICAgIGNvbCA9IGMoImJsdWUiLCAibGlnaHRjb3JhbCIpLA0KICAgICAgICBib3JkZXIgPSAid2hpdGUiLA0KICAgICAgICB5bGltID0gYygwLCBtYXgodGFiX3Ntb2tpbmcpICsgNDApKSAtPiBicF9zbW9raW5nDQoNCnRleHQoeCA9IGJwX3Ntb2tpbmcsIHkgPSB0YWJfc21va2luZyArIDE1LCBsYWJlbHMgPSB0YWJfc21va2luZykNCmBgYA0KDQpUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRIHbDoCBiaeG7g3UgxJHhu5MsIHRhIHRo4bqleSBy4bqxbmcgdHJvbmcgdOG7lW5nIHPhu5EgMTk4NSBi4buHbmggbmjDom4sIGPDsyAxNDE3IG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMgKE5vbi1TbW9rZXIpLCBjYW8gZ+G6p24gZ+G6pXAgMiw1IGzhuqduIHNvIHbhu5tpIG5ow7NtIGjDunQgdGh14buRYyAuIFRyb25nIGtoaSDEkcOzLCBz4buRIGLhu4duaCBuaMOibiBjw7MgaMO6dCB0aHXhu5FjIChTbW9rZXIpIGzDoCA1NjggbmfGsOG7nWkuIFRp4bq/cCB0aGVvLCBjaMO6bmcgdGEgc+G6vSB0w61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtIHbDoCB24bq9IGJp4buDdSDEkeG7kyB0csOybiDEkeG7gyB0aOG7gyBoaeG7h24gcsO1IGjGoW4gc+G7sSBjaMOqbmggbOG7h2NoIHbhu4EgbeG6t3QgdMawxqFuZyDEkeG7kWkgZ2nhu69hIGhhaSBuaMOzbS4NCg0KKipUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQpwbG90X3BpZShkYXRhLCAiU21va2luZ19TdGF0dXMiLCAiUGjDom4gTG/huqFpIFTDrG5oIFRy4bqhbmcgSMO6dCBUaHXhu5FjIikNCmBgYA0KDQpiaeG7g3UgxJHhu5MgdHLDsm4gdGjhu4MgaGnhu4duIHThu7cgbOG7hyBwaOG6p24gdHLEg206IG5ow7NtIE5vbi1TbW9rZXIgY2hp4bq/bSA3MSw0JSwgdHJvbmcga2hpIG5ow7NtIFNtb2tlciBjaGnhur9tIDI4LDYlLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBwaOG6p24gbOG7m24gxJHhu5FpIHTGsOG7o25nIHRyb25nIG5naGnDqm4gY+G7qXUga2jDtG5nIGjDunQgdGh14buRYywgcGjhuqNuIMOhbmggeHUgaMaw4bubbmcgaOG6oW4gY2jhur8gaMOgbmggdmkgaMO6dCB0aHXhu5FjIHRyb25nIHF14bqnbiB0aOG7gyBraOG6o28gc8OhdC4gU+G7sSBjaMOqbmggbOG7h2NoIGzhu5tuIG7DoHkgY2hvIHRo4bqleSB0aMOzaSBxdWVuIGjDunQgdGh14buRYyBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCDEkeG6t2MgxJFp4buDbSBwaOG7lSBiaeG6v24gdHJvbmcgbmjDs20gYuG7h25oIG5ow6JuIMSRxrDhu6NjIGto4bqjbyBzw6F0LiBUdXkgbmhpw6puLCDEkWnhu4F1IHF1YW4gdHLhu41uZyBsw6AgcGjhuqNpIHBow6JuIHTDrWNoIHhlbSBsaeG7h3UgbmjDs20gdGhp4buDdSBz4buRIG7DoHkgY8OzIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiBoYXkga2jDtG5nLg0KDQojIyMjICoqMy4yLjIuIFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBoYWkgYmnhur9uIEjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KQ2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIGhhaSBiaeG6v24gU21va2luZyB2w6AgSGFzX0h5cGVydGVuc2lvbiDEkeG7gyB4ZW0geMOpdCBt4buRaSBxdWFuIGjhu4cgc8ahIGLhu5kgZ2nhu69hIGNow7puZy4NCg0KYGBge3J9DQojIMSQ4buVaSB0w6puIGxldmVscyBj4bunYSBiaeG6v24gU21va2luZw0KZGF0YSRTbW9raW5nIDwtIGZhY3RvcihkYXRhJFNtb2tpbmdfU3RhdHVzLCBsZXZlbHMgPSBjKCJOb24tU21va2VyIiwgIlNtb2tlciIpLA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBow7p0IHRodeG7kWMiLCAiSMO6dCB0aHXhu5FjIikpDQoNCiMgVOG6oW8gbOG6oWkgYuG6o25nIHThuqduIHPhu5ENCnRhYmxlX0h5cGVydGVuc2lvbl9zbW9raW5nIDwtIHRhYmxlKGRhdGEkU21va2luZywgZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uKQ0KdGFibGVfSHlwZXJ0ZW5zaW9uX3Ntb2tpbmcNCmBgYA0KDQpC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBjaG8gdGjhuqV5Og0KDQpUcm9uZyBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjIChObyk6IGPDsyA3OTMgbmfGsOG7nWkga2jDtG5nIG3huq9jIGNhbyBodXnhur90IMOhcCB2w6AgNjI0IG5nxrDhu51pIG3huq9jIGNhbyBodXnhur90IMOhcC4NClRyb25nIG5ow7NtIGPDsyBow7p0IHRodeG7kWMgKFllcyk6IGPDsyAxNjAgbmfGsOG7nWkga2jDtG5nIG3huq9jIGNhbyBodXnhur90IMOhcCB2w6AgNDA4IG5nxrDhu51pIG3huq9jIGNhbyBodXnhur90IMOhcC4NCg0KTeG7mXQgcXVhbiBzw6F0IGJhbiDEkeG6p3UgxJHDoW5nIGNow7ogw70gbMOgIOG7nyBuaMOzbSBow7p0IHRodeG7kWMsIHPhu5EgY2EgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICg0MDgpIGfhuqduIGNhbyBoxqFuIGfhuqVwIGfhuqduIDMgbOG6p24gc28gduG7m2kgc+G7kSBjYSBraMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICgxNjApLiAuIMSQaeG7gXUgbsOgeSBn4bujaSDDvSBy4bqxbmcgdOG7tyBs4buHIG3huq9jIGLhu4duaCDhu58gbmjDs20gYuG7h25oIG5ow6JuIGjDunQgdGh14buRYyBjw7MgdGjhu4MgY2FvIGjGoW4uDQoNCiMjIyMjICoqMy4yLjIuMS5UcuG7sWMgcXVhbiBow7NhKioNCg0KxJDhu4MgbMOgbSByw7UgaMahbiBuaOG6rW4gxJHhu4tuaCB0csOqbiwgY2jDum5nIHRhIHPhur0gc+G7rSBk4bulbmcgYmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtLg0KDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBi4bqjbmcgdOG6p24gc+G7kSB0aMOgbmggZGF0YSBmcmFtZSDEkcO6bmcgY2hp4buBdQ0KZGZfcGxvdF9zbW9raW5nIDwtIGFzLmRhdGEuZnJhbWUodGFibGVfSHlwZXJ0ZW5zaW9uX3Ntb2tpbmcpDQpjb2xuYW1lcyhkZl9wbG90X3Ntb2tpbmcpIDwtIGMoIlNtb2tpbmdfU3RhdHVzIiwgIkhhc19IeXBlcnRlbnNpb24iLCAiQ291bnQiKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTDQpsaWJyYXJ5KGdncGxvdDIpDQoNCmdncGxvdChkZl9wbG90X3Ntb2tpbmcsIGFlcyh4ID0gU21va2luZ19TdGF0dXMsIHkgPSBDb3VudCwgZmlsbCA9IEhhc19IeXBlcnRlbnNpb24pKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBsYWJzKHRpdGxlID0gIlTDrG5oIHRy4bqhbmcgY2FvIGh1eeG6v3QgdGhlbyB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgeCA9ICJUw6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyIsDQogICAgICAgeSA9ICJT4buRIGzGsOG7o25nIGLhu4duaCBuaMOibiIsDQogICAgICAgZmlsbCA9ICJUw6xuaCB0cuG6oW5nIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJza3libHVlIiwgIlllcyIgPSAic2FsbW9uIikpDQpgYGANCg0KQmnhu4N1IMSR4buTIGPhu5l0IHRy4buxYyBxdWFuIGjDs2EgbeG7mXQgY8OhY2ggcsO1IHLDoG5nIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6MgbsOqdToNCg0K4bueIG5ow7NtIGtow7RuZyBow7p0IHRodeG7kWM6IEPhu5l0ICJLaMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIiAobcOgdSB4YW5oKSBjYW8gaMahbiBj4buZdCAibeG6r2MgY2FvIGh1eeG6v3Qgw6FwIiAobcOgdSBo4buTbmcpLg0KDQrhu54gbmjDs20gY8OzIGjDunQgdGh14buRYzogQ+G7mXQgIm3huq9jIGNhbyBodXnhur90IMOhcCIgKG3DoHUgaOG7k25nKSBjYW8gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIGPhu5l0ICJLaMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIiAobcOgdSB4YW5oKS4NCg0KQmnhu4N1IMSR4buTIGPhu6duZyBj4buRIG3huqFuaCBt4bq9IGdp4bqjIHRodXnhur90IHLhurFuZyB2aeG7h2MgaMO6dCB0aHXhu5FjIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4uIELhu4duaCBuaMOibiBow7p0IHRodeG7kWMgZMaw4budbmcgbmjGsCBjw7MgdOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gZ+G6pXAgMjUwJSwgdHJvbmcga2hpIHThu7cgbOG7hyBuw6B5IOG7nyBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLg0KDQojIyMjICoqMy4yLjMuIFBow6JuIHTDrWNoIFJlbGF0aXZlIFJpc2sgZ2nhu69hIEjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KVGnhur9wIHRoZW8sIGNow7puZyB0YSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzayAtIFJSKSDEkeG7gyDEkeG7i25oIGzGsOG7o25nIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHZp4buHYyBow7p0IHRodeG7kWMgxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcC4gTmjDs20ga2jDtG5nIGjDunQgdGh14buRYyBz4bq9IMSRxrDhu6NjIGNvaSBsw6AgbmjDs20gcGjGoWkgbmhp4buFbSBn4buRYyAoYmFzZWxpbmUpLg0KDQpgYGB7cn0NCnJpc2tyYXRpbyh0YWJsZV9IeXBlcnRlbnNpb25fc21va2luZykNCmBgYA0KDQpE4buxYSB0csOqbiBi4bqjbmcgdOG6p24gc+G7kSDEkcOjIMSRxrDhu6NjIGdp4bqjaSB0aMOtY2ggcsO1IOG7nyBwaOG6p24gdHLGsOG7m2MgdMO0aSBz4bq9IHTDrW5oIHRvw6FuIFJlbGF0aXZlIFJpc2sgdHJvbmcgxJHDsyBiaeG6v24gxJHhu5ljIGzhuq1wIGzDoCB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyB2w6AgcGjhu6UgdGh14buZYyBsw6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBOaMOzbSB0aGFtIGNoaeG6v3UgbMOgIGLhu4duaCBuaMOibiBraMO0bmcgaMO6dCB0aHXhu5FjIHbDoCBraMO0bmcgYuG7iyBt4bqvYyBjYW8gaHV54bq/dCDDoXAuIFbDoCBuaMOzbSDEkeG7kWkgdMaw4bujbmcgY+G6p24gcXVhbiB0w6JtIGzDoCBi4buHbmggbmjDom4gxJFhbmcgdHJvbmcgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgdsOgIGLhu4sgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiANCg0KKipQaMOibiB0w61jaCBSaXNrIFJhdGlvIChSUikgZ2nhu69hIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIHbDoCBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAqKg0KDQoqKkLhuqNuZyB04bqnbiBz4buRKioNCg0KfCBOaMOzbSBow7p0IHRodeG7kWMgICB8IENhbyBodXnhur90IMOhcCAoWWVzKSB8IEtow7RuZyBjYW8gaHV54bq/dCDDoXAgKE5vKSB8IFThu5VuZyB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8LS0tLS06fA0KfCBLaMO0bmcgaMO6dCB0aHXhu5FjICB8IDYyNCAgICAgICAgICAgICAgIHwgNzkzICAgICAgICAgICAgICAgICAgICB8IDE0MTcgfA0KfCBIw7p0IHRodeG7kWMgICAgICAgIHwgNDA4ICAgICAgICAgICAgICAgfCAxNjAgICAgICAgICAgICAgICAgICAgIHwgNTY4ICB8DQp8ICoqVOG7lW5nKiogICAgICAgICB8ICoqMTAzMioqICAgICAgICAgIHwgKio5NTMqKiAgICAgICAgICAgICAgICB8ICoqMTk4NSoqIHwNCg0KIEPDtG5nIHRo4bupYyB0w61uaCBuZ3V5IGPGoSAoUmlzaykNCg0KJCQNClx0ZXh0e1Jpc2t9ID0gXGZyYWN7XHRleHR7U+G7kSBjYSBt4bqvYyAoWWVzKX19e1x0ZXh0e1Thu5VuZyBz4buRIHRyb25nIG5ow7NtfX0NCiQkDQoNCiQkXHRleHR7Umlza31fe1x0ZXh0e0tow7RuZyBow7p0IHRodeG7kWN9fSA9IFxmcmFjezYyNH17MTQxN30gXGFwcHJveCAwLjQ0MDMkJA0KJCRcdGV4dHtSaXNrfV97XHRleHR7SMO6dCB0aHXhu5FjfX0gPSBcZnJhY3s0MDh9ezU2OH0gXGFwcHJveCAwLjcxODMkJA0KDQoqKkPDtG5nIHRo4bupYyB0w61uaCBSaXNrIFJhdGlvIChSUikqKg0KDQokJA0KUlIgPSBcZnJhY3tcdGV4dHtSaXNrfV97XHRleHR7SMO6dCB0aHXhu5FjfX19e1x0ZXh0e1Jpc2t9X3tcdGV4dHtLaMO0bmcgaMO6dCB0aHXhu5FjfX19DQokJA0KDQokJA0KUlIgPSBcZnJhY3swLjcxODN9ezAuNDQwM30gXGFwcHJveCAxLjYzDQokJA0KDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KVOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20gaMO6dCB0aHXhu5FjIGzDoCA0MDgvNTY4IOKJiCA3MSw4JSwgY2FvIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgbmjDs20ga2jDtG5nIGjDunQgdGh14buRYyAoNjI0LzE0MTcg4omIIDQ0LDElKS4NCg0KUmlzayBSYXRpbyAoUlIpID0gMSw2MzsgOTUlIENJOiBbMSw1MSDigJMgMSw3Nl07IHAgPCAwLDAwMToNCuKGkiDEkGnhu4F1IG7DoHkgY2jhu6luZyBtaW5oIHLhurFuZyBuaMOzbSBow7p0IHRodeG7kWMgY8OzIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gZ+G6pXAga2hv4bqjbmcgMSw2MyBs4bqnbiBzbyB24bubaSBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjLCB2w6Aga+G6v3QgcXXhuqMgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggKHAgZ+G6p24gYuG6sW5nIDApLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgKENJKSBraMO0bmcgYmFvIGfhu5NtIDEsIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IOG7lW4gxJHhu4tuaCB2w6AgxJHDoW5nIHRpbiBj4bqteS4NCg0KKipL4bq/dCBsdeG6rW4gdOG7qyBjw6FjIGtp4buDbSDEkeG7i25oOioqDQoNCnwgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHwgbWlkcC5leGFjdCAgICAgfCBmaXNoZXIuZXhhY3QgICB8IGNoaS5zcXVhcmUgICAgIHwNCnw6LS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS06fA0KfCBObyAgICAgICB8IE5BICAgICAgICAgICAgIHwgTkEgICAgICAgICAgICAgfCBOQSAgICAgICAgICAgICB8DQp8IFllcyAgICAgIHwgMCAgICAgICAgICAgICAgfCAwIDguMjEyNDg0ZS0zMCB8ICAzLjk3MTE5NGUtMjkgIHwNCg0KQ8OhYyBnacOhIHRy4buLIHAtdmFsdWUgdOG7qyBj4bqjIGJhIHBoxrDGoW5nIHBow6FwIGtp4buDbSDEkeG7i25oIChNaWQtcCBleGFjdCwgRmlzaGVyIGV4YWN0LCB2w6AgQ2hpLXNxdWFyZSkgxJHhu4F1IHLhuqV0IG5o4buPIChwIDwgMC4wMDEpLiDEkGnhu4F1IG7DoHkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgDoga2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow7p0IHRodeG7kWMgdsOgIG3huq9jIGNhbyBodXnhur90IMOhcCkgdsOgIGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgY8OzIG3hu5l0IG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBt4bqhbmggbeG6vSBnaeG7r2EgaGFpIGJp4bq/biBuw6B5Lg0KDQoNCiMjIyMgKiozLjIuNC4gUGjDom4gdMOtY2ggT2RkIFJhdGlvIGdp4buvYSBIw7p0IHRodeG7kWMgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCoqDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKHRhYmxlX0h5cGVydGVuc2lvbl9zbW9raW5nLCBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQoqKkPDtG5nIHRo4bupYyB0w61uaCBPZGRzKioNCg0KJCQNClx0ZXh0e09kZHN9ID0gXGZyYWN7XHRleHR7U+G7kSBjYSBt4bqvYyAoWWVzKX19e1x0ZXh0e1Phu5EgY2Ega2jDtG5nIG3huq9jIChObyl9fQ0KJCQNCiANCioqQ8O0bmcgdGjhu6ljIHTDrW5oIE9kZHMgUmF0aW8gKE9SKSoqDQoNCiQkDQpcdGV4dHtPZGRzfSA9IFxmcmFje1x0ZXh0e09kZHMgSMO6dCB0aHXhu5FjfX17XHRleHR7T2RkcyBraMO0bmcgSMO6dCB0aHXhu5FjfX0NCiQkDQoNCioqTmjhuq1uIHjDqXQ6KioNCkvhur90IHF14bqjIGNobyB0aOG6pXkgVOG7tyBz4buRIGNow6puaCAoT1IpIGzDoCAzLjIzNyDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgIm9kZHMiICh04bu3IGzhu4cgZ2nhu69hIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHbDoCBraMO0bmcgeOG6o3kgcmEpIGPhu6dhIHZp4buHYyBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIGLhu4duaCBuaMOibiBow7p0IHRodeG7kWMgY2FvIGfhuqVwIDMuMjM3IGzhuqduIHNvIHbhu5tpICJvZGRzIiBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIGLhu4duaCBuaMOibiBraMO0bmcgaMO6dCB0aHXhu5FjLiAgS+G6v3QgcXXhuqMgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGNhbyAocC12YWx1ZSA8IDAuMDAxKSwgY2hvIHRo4bqleSBow7p0IHRodeG7kWMgbMOgIG3hu5l0IHnhur91IHThu5Egbmd1eSBjxqEgY8OzIGxpw6puIHF1YW4gbeG6oW5oIG3hur0gxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUuDQoNCiMjIyMgKiozLjIuNS4gVGjhu5FuZyBrw6ogc3V5IGRp4buFbioqDQoNCiMjIyMjICoqMy4yLjUuMS4gS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu5ljIGzhuq1wKioNCg0KQ2jDum5nIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkeG7gyBraeG7g20gdHJhIGdp4bqjIHRodXnhur90IHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGdp4buvYSB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCiAtIEjigoAgKEdp4bqjIHRodXnhur90IGtow7RuZyk6IFTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wIChraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KIC0gSOKCgSAoR2nhuqMgdGh1eeG6v3QgxJHhu5FpKTogVMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBoYWkgYmnhur9uIHBo4bulIHRodeG7mWMgKGPDsyBt4buRaSBsacOqbiBo4buHKS4NCg0KYGBge3J9DQojIEtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZw0KY2hpc3EudGVzdCh0YWJsZV9IeXBlcnRlbnNpb25fc21va2luZykNCmBgYA0KDQpL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogY2hpIGLDrG5oIHBoxrDGoW5nIGzDoCAxMjQuMzggduG7m2kgMSBi4bqtYyB04buxIGRvLCB2w6AgZ2nDoSB0cuG7iyBwIHTGsMahbmcg4bupbmcgbMOgIDwgMi4yIMOXIDEw4oG7wrkuIFbhu5tpIHAtdmFsdWUgbmjhu48gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIG5nxrDhu6FuZyDDvSBuZ2jEqWEgdGjDtG5nIHRoxrDhu51uZyAozrEgPSAwLjA1KSwgdGEgY8OzIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcsIHLhurFuZyBoYWkgYmnhur9uIG7DoHkgxJHhu5ljIGzhuq1wIHbhu5tpIG5oYXUuIMSQaeG7gXUgbsOgeSBjaOG7qW5nIHThu48gdOG7k24gdOG6oWkgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSB0w6xuaCB0cuG6oW5nIGjDunQgdGh14buRYyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBD4bulIHRo4buDLCBuaOG7r25nIG5nxrDhu51pIGjDunQgdGh14buRYyBjw7MgeHUgaMaw4bubbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHbhu5tpIHThu7cgbOG7hyBjYW8gaMahbiBzbyB24bubaSBuaOG7r25nIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMuIFBow6F0IGhp4buHbiBuw6B5IHBow7kgaOG7o3AgduG7m2kgY8OhYyBuZ2hpw6puIGPhu6l1IHkgaOG7jWMgdHLGsOG7m2MgxJHDonksIHbhu5FuIMSRw6MgY2jhu4kgcmEgcuG6sW5nIHZp4buHYyBow7p0IHRodeG7kWMgbMOgbSBnaWEgdMSDbmcgbmd1eSBjxqEgcuG7kWkgbG/huqFuIGNo4bupYyBuxINuZyBt4bqhY2ggbcOhdSwgZOG6q24gxJHhur9uIHTEg25nIGh1eeG6v3Qgw6FwIHbDoCBjw6FjIGJp4bq/biBjaOG7qW5nIHRpbSBt4bqhY2ggbGnDqm4gcXVhbi4NCg0KIyMjIyMgKiozLjIuNS4yLiBLaeG7g20gxJHhu4tuaCBoaeG7h3UgdOG7tyBs4buHKioNCg0KxJDhu4Mgc28gc8OhbmggdHLhu7FjIHRp4bq/cCB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGdp4buvYSBoYWkgbmjDs20sIGNow7puZyB0YSB0aeG6v24gaMOgbmgga2nhu4NtIMSR4buLbmggaGnhu4d1IGhhaSB04bu3IGzhu4cuDQoNCkfhu41pIHAxIGzDoCB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuaMOzbSBow7p0IHRodeG7kWMsIHAyIGzDoCB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuaMOzbSBraMO0bmcgaMO6dCB0aHXhu5FjLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCi0gSOKCgDogcDEgLSBwMiA9IDAgKFThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIGhhaSBuaMOzbSBsw6AgbmjGsCBuaGF1KS4NCg0KLSBI4oKBOiBwMSAtIHAyID4gMCAoVOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20gaMO6dCB0aHXhu5FjIGNhbyBoxqFuIG5ow7NtIGtow7RuZyBow7p0IHRodeG7kWMpLg0KDQpgYGB7cn0NCiMgU+G7kSBjYSBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIGjDunQgdGh14buRYyB2w6Aga2jDtG5nIGjDunQgdGh14buRYw0Kc3VjY2Vzc19zbW9raW5nIDwtIGMoNDA4LCA2MjQpDQoNCiMgVOG7lW5nIHPhu5EgYuG7h25oIG5ow6JuIHRyb25nIG3hu5dpIG5ow7NtDQpuX3Ntb2tpbmcgPC0gYyg1NjgsIDE0MTcpDQoNCiMgS2nhu4NtIMSR4buLbmggaGnhu4d1IHThu7cgbOG7hyBt4buZdCBwaMOtYQ0KcHJvcC50ZXN0KHN1Y2Nlc3Nfc21va2luZywgbl9zbW9raW5nLCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29ycmVjdCA9IEZBTFNFKQ0KYGBgDQoNCiAqKk5o4bqtbiB4w6l0IGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGhhaSB04bu3IGzhu4cqKg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBoYWkgdOG7tyBs4buHIMSR4buZYyBs4bqtcCAodHdvLXNhbXBsZSBwcm9wb3J0aW9uIHRlc3QpIGNobyB0aOG6pXk6DQoNCi0gR2nDoSB0cuG7iyB0aOG7kW5nIGvDqjogXChYXjIgPSAxMjUuNDlcKQ0KLSBC4bqtYyB04buxIGRvOiBcKGRmID0gMVwpDQotIFwocFwpLXZhbHVlOiBcKHAgPCAyLjIgXHRpbWVzIDEwXnstMTZ9XCkNCg0KVuG7m2kgXChwXCktdmFsdWUgbmjhu48gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIG3hu6ljIMO9IG5naMSpYSBcKFxhbHBoYSA9IDAuMDVcKSwgdGEgKipiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nKiogXCgoSF8wOiBwXzEgLSBwXzIgPSAwKVwpIHbDoCAqKmNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgxJHhu5FpKiogXCgoSF8xOiBwXzEgLSBwXzIgPiAwKVwpLg0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSAqKnThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIGjDunQgdGh14buRYyoqIFwoKHBfMSA9IDcxLjgzXCUpXCkgKipjYW8gaMahbiBt4buZdCBjw6FjaCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiogc28gduG7m2kgbmjDs20ga2jDtG5nIGjDunQgdGh14buRYyBcKChwXzIgPSA0NC4wNFwlKVwpLg0KDQpLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBoaeG7h3UgdOG7tyBs4buHIFwoKHBfMSAtIHBfMilcKSBu4bqxbSB0cm9uZyBraG/huqNuZyBcKFswLjI0MDsgMS4wMDBdXCksIHjDoWMgbmjhuq1uIHLhurFuZyBz4buxIGNow6puaCBs4buHY2ggbsOgeSBsw6AgZMawxqFuZyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KKipL4bq/dCBsdeG6rW46KiogSMOgbmggdmkgaMO6dCB0aHXhu5FjIGPDsyBsacOqbiBxdWFuIGNo4bq3dCBjaOG6vSDEkeG6v24gdmnhu4djIGdpYSB0xINuZyBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQoNCiMjIyMgKiozLjIuNi4gTcO0IGjDrG5oIGjhu5NpIHF1eSBjaG8gZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4qKg0KDQojIyMjIyAqKjMuMi42LjEuIE3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCoqDQoNCkNow7puZyB0YSBz4bq9IHjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCDEkeG7gyB4ZW0geMOpdCDhuqNuaCBoxrDhu59uZyBj4bunYSB2aeG7h2MgaMO6dCB0aHXhu5FjIMSR4bq/biB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQoNCmBgYHtyfQ0KIyBCaeG6v24gbmjhu4sgcGjDom4gSHlwZXJ0ZW5zaW9uIMSRw6MgxJHGsOG7o2MgdOG6oW8g4bufIHBo4bqnbiB0csaw4bubYw0KSHlwZXJ0ZW5zaW9uX2JpbiA8LSBpZmVsc2UoZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uID09ICJZZXMiLCAxLCAwKQ0KDQojIFjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaA0KaHF0dF9tb2RlbF9zbW9raW5nIDwtIGdsbShIeXBlcnRlbnNpb25fYmluIH4gU21va2luZywgZGF0YSA9IGRhdGEpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQpzdW1tYXJ5KGhxdHRfbW9kZWxfc21va2luZykNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KS+G6v3QgcXXhuqMgbcO0IGjDrG5oIGjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIGNobyB0aOG6pXkgaOG7hyBz4buRIGPhu6dhIGJp4bq/biBTbW9raW5nICjEkWFuZyBow7p0IHRodeG7kWMpIGzDoCAwLjI3Nzk0LCB24bubaSBwLXZhbHVlIHLhuqV0IG5o4buPIChwIDwgMC4wMDEpLiDEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AsIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMsIG5nxrDhu51pIGPDsyBow7p0IHRodeG7kWMgY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiB0cnVuZyBiw6xuaCBsw6Aga2hv4bqjbmcgMjcuNyUuIEjhu4cgc+G7kSBjaOG6t24gKDAuNDQwMzcpIGNow61uaCBsw6AgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIMaw4bubYyB0w61uaCBjaG8gbmjDs20ga2jDtG5nIGjDunQgdGh14buRYy4NCg0KTeG6t2MgZMO5IG3DtCBow6xuaCBuw6B5IGThu4UgZGnhu4VuIGdp4bqjaSwgT0xTIGtow7RuZyBwaOG6o2kgbcO0IGjDrG5oIGNodeG6qW4gY2hvIGThu68gbGnhu4d1IG5o4buLIHBow6JuIG7Dqm4gc+G6vSBuaOG7r25nIGjhuqFuIGNo4bq/IGzDvSB0aHV54bq/dCBraGkgw6FwIGThu6VuZyBjaG8gYmnhur9uIHBo4bulIHRodeG7mWMgbmjhu4sgcGjDom4gLiBEbyDEkcOzLCBjaMO6bmcgdGEgc+G6vSB4ZW0geMOpdCBjw6FjIG3DtCBow6xuaCBwaMO5IGjhu6NwIGjGoW4gbmjGsCBMb2dpdCB2w6AgUHJvYml0Lg0KDQojIyMjIyAqKjMuMi42LjIuIE3DtCBow6xuaCBMb2dpdCoqIA0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IExvZ2lzdGljIMSRxrDhu6NjIMOhcCBk4bulbmcgxJHhu4MgbcO0IGjDrG5oIGjDs2EgbG9nIGPhu6dhIHThu7cgc+G7kSBjaMOqbmggKGxvZy1vZGRzKSBj4bunYSB2aeG7h2MgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQpgYGB7cn0NCiMgTcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyB24bubaSBiaeG6v24gU21va2luZw0KbW9kZWxfbG9naXRfc21va2luZyA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IFNtb2tpbmcsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgZGF0YSA9IGRhdGEpDQoNCiMgWGVtIGvhur90IHF14bqjDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0X3Ntb2tpbmcpDQpgYGANCg0KKipQaMOibiB0w61jaCBr4bq/dCBxdeG6oyoqDQpQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IExvZ2l0IGPDsyBk4bqhbmc6DQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpID0gLTAuMjM5NjcgKyAxLjE3NTc3IFxjZG90IFx0ZXh0e0jDunQgdGh14buRY30NClxdDQoNCi0gKipI4buHIHPhu5EgY2jhurduKiogXChcaGF0e1xiZXRhfV8wID0gLTAuMjM5NjdcKTogxJDDonkgbMOgIGxvZy1vZGRzIG3huq9jIGNhbyBodXnhur90IMOhcCBj4bunYSBt4buZdCBi4buHbmggbmjDom4ga2jDtG5nIGjDunQgdGh14buRYy4NCg0KLSAqKkjhu4cgc+G7kSBo4buTaSBxdXkqKiBcKFxoYXR7XGJldGF9XzEgPSAxLjE3NTc3XCkgKHAgPCAwLjAwMSk6IENobyB0aOG6pXkgbG9nLW9kZHMgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuZ8aw4budaSBow7p0IHRodeG7kWMgY2FvIGjGoW4gMS4xNzU3NyDEkcahbiB24buLIHNvIHbhu5tpIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMuDQoNCioqVOG7tyBz4buRIE9kZHMgKE9kZHMgUmF0aW8pOioqDQoNCmBgYHtyfQ0KIyBUw61uaCBPZGRzIFJhdGlvDQpleHAoY29lZihtb2RlbF9sb2dpdF9zbW9raW5nKSkNCmBgYA0KDQpcWw0KXHRleHR7T1J9ID0gZV57MS4xNzU3NyB9IFxhcHByb3ggMy4yNDA2MjUwDQpcXQ0KS+G6v3QgcXXhuqMgbsOgeSBjaG8gdGjhuqV5ICJvZGRzIiBtxINjIGNhbyBodXnhur90IMOhcCDhu58gbmfGsOG7nWkgaMO6dCB0aHXhu5FjIGNhbyBn4bqlcCAqKjMuMjQgbOG6p24qKiBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjLCBob8OgbiB0b8OgbiBwaMO5IGjhu6NwIHbhu5tpIGvhur90IHF14bqjIHThu6sgaMOgbSBgb2Rkc3JhdGlvYCB0csaw4bubYyDEkcOzLCBt4bupYyDEkeG7mSBjaMOqbmggbOG7h2NoIGtow7RuZyBxdcOhIGzhu5tuLiANCg0KIyMjIyMgKiozLjIuNi4zLiBNw7QgaMOsbmggUHJvYml0KioNCkNow7puZyB0YSB0aeG6v3AgdOG7pWMgduG7m2kgbcO0IGjDrG5oIFByb2JpdCwgc+G7rSBk4bulbmcgaMOgbSBwaMOibiBwaOG7kWkgdMOtY2ggbMWpeSBjaHXhuqluLg0KDQpgYGB7cn0NCiMgTcO0IGjDrG5oIFByb2JpdCB24bubaSBiaeG6v24gU21va2luZw0KcHJvYml0X21vZGVsX3Ntb2tpbmcgPC0gZ2xtKEh5cGVydGVuc2lvbl9iaW4gfiBTbW9raW5nLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCBkYXRhID0gZGF0YSkNCg0KIyBYZW0ga+G6v3QgcXXhuqMgbcO0IGjDrG5oDQpzdW1tYXJ5KHByb2JpdF9tb2RlbF9zbW9raW5nKQ0KYGBgDQoNCsSQ4buDIMSRw6FuaCBnacOhIOG6o25oIGjGsOG7n25nIGPhu6dhIGjDoG5oIHZpIGjDunQgdGh14buRYyDEkeG6v24ga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCwgbcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgxJHGsOG7o2MgeMOieSBk4buxbmcgduG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIEhhc19IeXBlcnRlbmlzb24gKDA6IEtow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAsIDE6IGPDsyBt4bqvYyBjYW8gaHV54bq/dCDhuqVwKSB2w6AgYmnhur9uIMSR4buZYyBs4bqtcCBsw6AgU21va2luZyAoMDoga2jDtG5nIGjDunQgdGh14buRYyDigJMgbmjDs20gdGhhbSBjaGnhur91LCAxOiBow7p0IHRodeG7kWMpLg0KDQpQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IMaw4bubYyBsxrDhu6NuZyBuaMawIHNhdToNCg0KXFsNClxwaSA9IFxQaGkoLTAuMTUwMDQgKyAwLjcyNzg3IFxjZG90IFx0ZXh0e1Ntb2tpbmd9KQ0KXF0NCg0KVHJvbmcgxJHDszoNCi0gXCggXFBoaShcY2RvdCkgXCk6IGjDoG0gcGjDom4gcGjhu5FpIHTDrWNoIGzFqXkgY2h14bqpbiB04bqvYyAoc3RhbmRhcmQgbm9ybWFsIENERikuDQotIFwoIFxwaSBcKTogeMOhYyBzdeG6pXQgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcA0KDQoqKkRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMqKg0KLSAqKkjhu4cgc+G7kSBjaOG6t24qKiBcKCBcYmV0YV8wID0gLTAuMTUwMDQgXCksIHAgPCAwLjAwMTogIA0KICDEkOG6oWkgZGnhu4duIGNobyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtICoqa2jDtG5nIGjDunQgdGh14buRYyoqOg0KDQpcWw0KXHBpX3tcdGV4dHtraMO0bmcgaMO6dH19ID0gXFBoaSgtMC4xNTAwNCkgXGFwcHJveCAwLjQ0MA0KXF0NCg0KLSAqKkjhu4cgc+G7kSBo4buTaSBxdXkqKiBcKCBcYmV0YV8xID0gMS4yMDY0IFwpLCBwIDwgMC4wMDE6ICANCiAgS2hpIGLhu4duaCBuaMOibiAqKmPDsyBow7p0IHRodeG7kWMqKiwgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGzDoDoNCg0KXFsNClxwaV97XHRleHR7aMO6dCB0aHXhu5FjfX0gPSBcUGhpKC0wLjE1MDA0ICsgMC43Mjc4NykgPSBcUGhpKDAuNTc4KSBcYXBwcm94IDAuNzE4DQpcXQ0KDQoqKlNvIHPDoW5oIHjDoWMgc3XhuqV0IGdp4buvYSAyIG5ow7NtKioNCg0KXFsNClxEZWx0YSBccGkgPSBccGlfe1x0ZXh0e2jDunQgdGh14buRY319IC0gXHBpX3tcdGV4dHtraMO0bmcgaMO6dH19IFxhcHByb3ggMC43MTggLSAwLjQ0MCA9IDAuMjc4DQpcXQ0KDQoqKkvhur90IGx14bqtbioqDQoNCk3DtCBow6xuaCBQcm9iaXQgY2hvIHRo4bqleSBuZ8aw4budaSBow7p0IHRodeG7kWMgY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiBraG/huqNuZyAyNy44JSBzbyB24bubaSBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjLiBD4bqjIGhhaSBo4buHIHPhu5EgxJHhu4F1IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvIChwIDwgMC4wMDEpLCBraOG6s25nIMSR4buLbmggcuG6sW5nIGjDoG5oIHZpIGjDunQgdGh14buRYyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBuZ3V5IGPGoSDEkcOhbmcga+G7gyB0cm9uZyBz4buxIHh14bqldCBoaeG7h24gY2FvIGh1eeG6v3Qgw6FwLCBj4bqnbiDEkcaw4bujYyBsxrB1IMO9IHRyb25nIGPDtG5nIHTDoWMgdGhlbyBkw7VpIHbDoCBxdeG6o24gbMO9IHPhu6ljIGto4buPZS4NCg0KIyMjIyMgKiozLjIuNi40LiBNw7QgaMOsbmggY2xvZ2xvZyoqDQoNCiBNw7QgaMOsbmggaOG7k2kgcXV5IGNsb2dsb2cgbMOgIG3hu5l0IGThuqFuZyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuLCBz4butIGThu6VuZyBow6BtIGxpw6puIGvhur90IGLhuqV0IMSR4buRaSB44bupbmcgxJHhu4MgbcO0IHThuqMgbeG7kWkgcXVhbiBo4buHIGdp4buvYSB4w6FjIHN14bqldCB44bqjeSByYSBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYyB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLiBIw6BtIGxpw6puIGvhur90IGNsb2dsb2cgxJHGsOG7o2MgxJHhu4tuaCBuZ2jEqWEgbmjGsCBzYXU6DQoNClxbDQpnKFxwaSkgPSBcbG9nKC1cbG9nKDEgLSBccGkpKQ0KXF0NCg0KVHJvbmcgxJHDszoNCi0gXCggXHBpID0gXFByKFkgPSAxIFxtaWQgWCkgXCkgbMOgIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIGhp4buHbiB0xrDhu6NuZyBxdWFuIHTDom0gKHbDrSBk4bulOiBt4bqvYyBjYW8gaHV54bq/dCDDoXAgYuG7h25oKS4NCi0gXCggZyhccGkpIFwpIGzDoCBow6BtIGxpw6puIGvhur90IHRoZW8gY2xvZ2xvZy4NCg0KS2hpIMOhcCBk4bulbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSwgdGEgY8OzIHBoxrDGoW5nIHRyw6xuaDoNCg0KXFsNClxsb2coLVxsb2coMSAtIFxwaSkpID0gXGJldGFfMCArIFxiZXRhXzEgWF8xICsgXGNkb3RzICsgXGJldGFfayBYX2sNClxdDQoNCkdp4bqjaSBuZ8aw4bujYyDEkeG7gyB0w61uaCB4w6FjIHN14bqldDoNCg0KXFsNClxwaSA9IDEgLSBcZXhwXGxlZnQoIC1cZXhwKFxldGEpIFxyaWdodCksIFxxdWFkIFx0ZXh0e3Ryb25nIMSRw7MgfSBcZXRhID0gXGJldGFfMCArIFxzdW1fe2o9MX1ee2t9IFxiZXRhX2ogWF9qDQpcXQ0KDQoqKsSQ4bq3YyDEkWnhu4NtIGPhu6dhIG3DtCBow6xuaCBjbG9nbG9nKioNCg0KLSBQaMO5IGjhu6NwIGtoaSB4w6FjIHN14bqldCB44bqjeSByYSBz4buxIGtp4buHbiB0aeG7h20gY+G6rW4gMCBob+G6t2MgMSBt4buZdCBjw6FjaCBraMO0bmcgxJHhu5FpIHjhu6luZy4NCi0gVGjGsOG7nW5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIG3DtCBow6xuaCBy4bunaSBybywgcGjDom4gdMOtY2ggc+G7kW5nIHPDs3QgaG/hurdjIGtoaSBk4buvIGxp4buHdSB0aGnDqm4gbOG7h2NoIHbhu4EgbeG7mXQgcGjDrWEuDQoNCmBgYHtyfQ0KbW9kZWxfY2xvZ2xvZyA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IFNtb2tpbmcsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfY2xvZ2xvZykNCmBgYA0KDQpUcm9uZyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIHbhu5tpIGjDoG0gbGnDqm4ga+G6v3QgKipjb21wbGVtZW50YXJ5IGxvZy1sb2cgKGNsb2dsb2cpKio6DQoNClxbDQpnKFxwaSkgPSBcbG9nKC1cbG9nKDEgLSBccGkpKSA9IFxiZXRhXzAgKyBcYmV0YV8xIFxjZG90IFx0ZXh0e1Ntb2tpbmd9DQpcXQ0KDQpUYSB0aHUgxJHGsOG7o2MgcGjGsMahbmcgdHLDrG5oIMaw4bubYyBsxrDhu6NuZzoNCg0KXFsNClxsb2coLVxsb2coMSAtIFxwaSkpID0gLTAuNTQzOTEgKyAwLjc4MDUyIFxjZG90IFx0ZXh0e1Ntb2tpbmd9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KLSBcKCBcdGV4dHtTbW9raW5nfSA9IDEgXCkgbuG6v3UgYuG7h25oIG5ow6JuIGjDunQgdGh14buRYywgdsOgIFwoID0gMCBcKSBu4bq/dSBraMO0bmcgaMO6dCB0aHXhu5FjLg0KLSBCaeG6v24gcGjhu6UgdGh14buZYyBcKCBccGkgXCkgbMOgIHjDoWMgc3XhuqV0IG3huq9jIGLhu4duaC4NCg0KKipEaeG7hW4gZ2nhuqNpIGvhur90IHF14bqjOioqDQoNCi0gKipI4buHIHPhu5EgY2jhurduKiogXCggXGJldGFfMCA9IC0wLjU0MzkxIFwpIChwIDwgMC4wMDEpIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIEtoaSBi4buHbmggbmjDom4gKipraMO0bmcgaMO6dCB0aHXhu5FjKiosIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCDEkcaw4bujYyB0w61uaCBuaMawIHNhdToNCg0KXFsNClxwaV97XHRleHR7a2jDtG5nIGjDunQgdGh14buRY319ID0gMSAtIFxleHBcbGVmdCggLVxleHAoLTAuNTQzOTEpIFxyaWdodCkgXGFwcHJveCAwLjQ0MA0KXF0NCg0KLSAqKkjhu4cgc+G7kSBow7p0IHRodeG7kWMqKiBcKCBcYmV0YV8xID0gMC43ODA1IFwpIChwIDwgMC4wMDEpOiBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhbywgY2hvIHRo4bqleSBow6BuaCB2aSBow7p0IHRodeG7kWMgbMOgbSAqKnTEg25nIMSRw6FuZyBr4buDKiogeMOhYyBzdeG6pXQgbeG6r2MgYuG7h25oLiBYw6FjIHN14bqldCBt4bqvYyBi4buHbmggY2hvIG5ow7NtIGjDunQgdGh14buRYyBsw6A6DQoNClxbDQpccGlfe1x0ZXh0e2jDunQgdGh14buRY319ID0gMSAtIFxleHBcbGVmdCggLVxleHAo4oiSMC41NDM5ICsgMC43ODA1KSBccmlnaHQpIFxhcHByb3ggMC43MTgNClxdDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gKipNw7QgaMOsbmggY2xvZ2xvZyBjaG8gdGjhuqV5IGjDunQgdGh14buRYyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBuZ3V5IGPGoSDEkcOhbmcga+G7gyDEkeG7kWkgduG7m2kgY2FvIGh1eeG6v3Qgw6FwIChwIDwgMC4wMDEpLiBYw6FjIHN14bqldCBt4bqvYyBi4buHbmgg4bufIG5ow7NtIGjDunQgdGh14buRYyAoNzEuOCUpIGNhbyBn4bqnbiAxLjYzIGzhuqduIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBow7p0IHRodeG7kWMoNDQlKSwgdsOgIHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmguKiouDQoNCi0gTcO0IGjDrG5oIGNsb2dsb2cgbMOgIGzhu7FhIGNo4buNbiBwaMO5IGjhu6NwIHbDrCBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gKG3huq9jIGNhbyBodXnhur90IMOhcCkgY8OzIHTDrW5oIGNo4bqldCAqKmLhuqV0IMSR4buRaSB44bupbmcqKi4NCg0KIyMjIyAqKjMuMi43LiDEkMOhbmggZ2nDoSBtw7QgaMOsbmgqKg0KDQoqKkLhuqNuZyB04buVbmcgaOG7o3AgNCBtw7QgaMOsbmgqKg0KDQpcWw0KXGJlZ2lue2FycmF5fXt8bHxsfGN8fQ0KXGhsaW5lDQpcdGV4dGJme03DtCBow6xuaH0gJiBcdGV4dGJme0jDoG0gbGnDqm4ga+G6v3QgKExpbmsgZnVuY3Rpb24pfSAmIFx0ZXh0YmZ7QUlDfSBcXA0KXGhsaW5lDQpcdGV4dHtI4buTaSBxdXkgdHV54bq/biB0w61uaCAoTGluZWFyIFJlZ3Jlc3Npb24pfSAmIFx0ZXh0e0lkZW50aXR5IChHYXVzc2lhbil9ICYgMjc1NC42IFxcDQpcaGxpbmUNClx0ZXh0e0jhu5NpIHF1eSBsb2dpc3RpYyAoTG9naXQpfSAmIFx0ZXh0e0xvZ2l0fSAmIDI2MjMuNiBcXA0KXGhsaW5lDQpcdGV4dHtI4buTaSBxdXkgcHJvYml0fSAmIFx0ZXh0e1Byb2JpdH0gJiAyNjIzLjYgXFwNClxobGluZQ0KXHRleHR7SOG7k2kgcXV5IGNsb2dsb2d9ICYgXHRleHR7Q29tcGxlbWVudGFyeSBsb2ctbG9nfSAmIDI2MjMuNiBcXA0KXGhsaW5lDQpcZW5ke2FycmF5fQ0KXF0NCg0KKirEkMOhbmggZ2nDoSoqDQoNCiBUcm9uZyBwaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSBow6BuaCB2aSBow7p0IHRodeG7kWMgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCwgdMOhYyBnaeG6oyB4w6J5IGThu7FuZyB2w6Agc28gc8OhbmggYuG7kW4gbcO0IGjDrG5oOiB0dXnhur9uIHTDrW5oLCBsb2dpdCwgcHJvYml0IHbDoCBjbG9nbG9nLg0KDQpNw7QgaMOsbmggdHV54bq/biB0w61uaCBjw7MgQUlDIGNhbyBuaOG6pXQgKDI3NTQuNiksIHBo4bqjbiDDoW5oIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4Mgc28gduG7m2kgYmEgbcO0IGjDrG5oIG5o4buLIHBow6JuLg0KDQpCYSBtw7QgaMOsbmggbG9naXQsIHByb2JpdCB2w6AgY2xvZ2xvZyBjw7MgQUlDIGLhurFuZyBuaGF1ICgyNjIzLjYpLCBjaG8gdGjhuqV5IG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdOG7kXQgaMahbiDEkcOhbmcga+G7gy4NCg0KIETDuSBBSUMgdMawxqFuZyDEkcawxqFuZywgbeG7l2kgbcO0IGjDrG5oIGPDsyB0aOG6vyBt4bqhbmggcmnDqm5nOiANCiANCiAgLSBMb2dpdCB0aHXhuq1uIHRp4buHbiBraGkgbXXhu5FuIGRp4buFbiBnaeG6o2kgYuG6sW5nIE9kZHMgUmF0aW8gKE9SKSDigJMgbeG7mXQgY2jhu4kgc+G7kSBwaOG7lSBiaeG6v24gdHJvbmcgeSB04bq/Lg0KDQogIC0gUHJvYml0IHBow7kgaOG7o3Aga2hpIGdp4bqjIMSR4buLbmggcGjDom4gcGjhu5FpIGNodeG6qW4gdGnhu4FtIOG6qW4uDQoNCiAgLSBDbG9nbG9nIGhp4buHdSBxdeG6oyBoxqFuIGtoaSBoaeG7h24gdMaw4bujbmcgbmdoacOqbiBj4bupdSBjw7MgcGjDom4gcGjhu5FpIGLhuqV0IMSR4buRaSB44bupbmcgKHbDrSBk4bulOiBi4buHbmggw610IGfhurdwIGhv4bq3YyBuZ3V5IGPGoSBraMO0bmcgxJHhu5FpIHjhu6luZykuDQoNClRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwgY+G6oyBiYSBtw7QgaMOsbmggbmjhu4sgcGjDom4gxJHhu4F1IGNobyB0aOG6pXkgaMO6dCB0aHXhu5FjIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIG3hu5l0IGPDoWNoIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogKHAgPCAwLjAwMSkuIE7hur91IMawdSB0acOqbiBraOG6oyBuxINuZyBnaeG6o2kgdGjDrWNoIGzDom0gc8OgbmcgdGjDtG5nIHF1YSBPUiwgbG9naXQgbMOgIGzhu7FhIGNo4buNbiB0aMOtY2ggaOG7o3AuIE7hur91IGPhuqduIG3DtCBow6xuaCBow7NhIGhp4buHbiB0xrDhu6NuZyBuZ3V5IGPGoSBraMO0bmcgxJHhu5FpIHjhu6luZywgY2xvZ2xvZyBjw7MgdGjhu4MgbMOgIHBoxrDGoW5nIMOhbiBo4bujcCBsw70gaMahbi4NCg0KIyMgKiozLjMgVMOtbmggY2jhuqV0IHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHTDoWMgxJHhu5luZyDEkeG6v24ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGLhu4duaCoqDQoNCg0KVHJvbmcgcGjhuqduIG7DoHksIGNow7puZyB0YSBz4bq9IHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIMSR4bq3YyDEkWnhu4NtIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGPhu6dhIGLhu4duaCBuaMOibiAoIGhheSApIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGh1eeG6v3Qgw6FwIGJp4buHdCBow7NhIC4gQmnhur9uIMSR4buZYyBs4bqtcCBsw6AgRmFtaWx5X0hpc3RvcnkgdsOgIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBIYXNfSHlwZXJ0ZW5zaW9uLg0KDQojIyMjICoqMy4zLjEgQuG6o25nIHThuqduIHPhu5EgLSB04bqnbiBzdeG6pXQgY2hvIGJp4bq/biBGYW1pbHlfSGlzdG9yeSoqDQoNCsSQ4bqndSB0acOqbiwgY2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2hvIGJp4bq/biBGYW1pbHlfSGlzdG9yeSDEkeG7gyBoaeG7g3UgcsO1IHPhu7EgcGjDom4gYuG7kSBj4bunYSBuaMOzbSBi4buHbmggbmjDom4gY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHRyb25nIHThuq1wIGThu68gbGnhu4d1Lg0KDQpgYGB7cn0NCnRhYl9GYW1pbHlfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEZhbWlseV9IaXN0b3J5KQ0KdGFiX0ZhbWlseV9IaXN0b3J5DQpgYGANCg0KS+G6v3QgcXXhuqMgc+G6vSDEkcaw4bujYyB0cuG7sWMgcXVhbiBow7NhIGLhurFuZyBiaeG7g3UgxJHhu5MgY+G7mXQgxJHhu4MgZOG7hSBkw6BuZyBzbyBzw6FuaCBz4buRIGzGsOG7o25nIGdp4buvYSBoYWkgbmjDs20uDQoNCmBgYHtyfQ0KYmFycGxvdCh0YWJfRmFtaWx5X0hpc3RvcnksDQogICAgICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHThuqduIHPhu5EgdMOtbmggIGPhu6dhIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIiwNCiAgICAgICAgeGxhYiA9ICJUw61uaCBjaOG6pXQgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAiLA0KICAgICAgICB5bGFiID0gIlThuqduIHPhu5EiLA0KICAgICAgICBjb2wgPSBjKCJraGFraSIsICJvbGl2ZWRyYWIiKSwNCiAgICAgICAgYm9yZGVyID0gIndoaXRlIiwNCiAgICAgICAgeWxpbSA9IGMoMCwgbWF4KHRhYl9GYW1pbHlfSGlzdG9yeSkgKyA0MCkpIC0+IGJwX0ZhbWlseV9IaXN0b3J5DQoNCnRleHQoeCA9IGJwX0ZhbWlseV9IaXN0b3J5LCB5ID0gdGFiX0ZhbWlseV9IaXN0b3J5ICsgMTUsIGxhYmVscyA9IHRhYl9GYW1pbHlfSGlzdG9yeSkNCmBgYA0KDQpUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRIHbDoCBiaeG7g3UgxJHhu5MsIHRhIHRo4bqleSBy4bqxbmcgdHJvbmcgdOG7lW5nIHPhu5EgMTk4NSBi4buHbmggbmjDom4sIGPDsyA5ODUgbmfGsOG7nWkgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIChZZXMpLiBUcm9uZyBraGkgxJHDsywgc+G7kSBi4buHbmggbmjDom4ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCAoTm8pIGzDoCAxMDAwIG5nxrDhu51pLg0KDQpUaeG6v3AgdGhlbywgY2jDum5nIHRhIHPhur0gdMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbSB2w6AgduG6vSBiaeG7g3UgxJHhu5MgdHLDsm4gxJHhu4MgdGjhu4MgaGnhu4duIHLDtSBoxqFuIHPhu7EgY2jDqm5oIGzhu4djaCB24buBIG3hurd0IHTGsMahbmcgxJHhu5FpIGdp4buvYSBoYWkgbmjDs20uDQoNCmBgYHtyfQ0KIyBUaGF5IMSR4buVaSBuaMOjbg0KZGF0YSRGYW1pbHlfSGlzdG9yeSA8LSBpZmVsc2UoZGF0YSRGYW1pbHlfSGlzdG9yeSA9PSAiWWVzIiwgIkPDsyIsICJLaMO0bmciKQ0KDQojIMSQ4bqjbSBi4bqjbyBiaeG6v24gduG6q24gbMOgIGZhY3Rvcg0KZGF0YSRGYW1pbHlfSGlzdG9yeSA8LSBmYWN0b3IoZGF0YSRGYW1pbHlfSGlzdG9yeSwgbGV2ZWxzID0gYygiS2jDtG5nIiwgIkPDsyIpKQ0KDQojIEtp4buDbSB0cmEga+G6v3QgcXXhuqMNCnRhYmxlKGRhdGEkRmFtaWx5X0hpc3RvcnkpDQpwbG90X3BpZShkYXRhLCAiRmFtaWx5X0hpc3RvcnkiLCAiUGjDom4gTG/huqFpIFRp4buBbiBT4butIEdpYSDEkMOsbmggbcSDYyBjYW8gaHV54bq/dCDDoXAiKQ0KYGBgDQoNCkJp4buDdSDEkeG7kyB0csOybiBjaG8gdGjhuqV5IG3hu5l0IGPDoWNoIHRy4buxYyBxdWFuIHLhurFuZyBuaMOzbSBi4buHbmggbmjDom4gY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNoaeG6v20gxJHhur9uIDQ5LjYlIHRyb25nIG3huqt1IG5naGnDqm4gY+G7qXUsIHRyb25nIGtoaSBuaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICBjaGnhur9tIDUwLjQlLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCBsw6AgdHLGsOG7nW5nIGjhu6NwIMOtdCBwaOG7lSBiaeG6v24gaMahbi4gUGjDom4gdMOtY2ggdGnhur9wIHRoZW8gc+G6vSBsw6BtIHLDtSBsaeG7h3UgxJHhurdjIMSRaeG7g20gbsOgeSBjw7Mg4bqjbmggaMaw4bufbmcgxJHhur9uIG5ndXkgY8ahIG3huq9jIGNhbyBodXnhur90IMOhcCBoYXkga2jDtG5nLg0KDQojIyMgKiozLjMuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIGhhaSBiaeG6v24gRmFtaWx5X0hpc3RvcnkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCoqDQoNCkNow7puZyB0YSBz4bq9IGzhuq1wIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGdp4buvYSBoYWkgYmnhur9uIEZhbWlseV9IaXN0b3J5IHbDoCBIYXNfSHlwZXJ0ZW5zaW9uIMSR4buDIHhlbSB4w6l0IG3hu5FpIHF1YW4gaOG7hyBzxqEgYuG7mSBnaeG7r2EgY2jDum5nLg0KDQpgYGB7cn0NCnRhYmxlX0h5cGVydGVuc2lvbl9GYW1pbHlfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEZhbWlseV9IaXN0b3J5LCBkYXRhJEhhc19IeXBlcnRlbnNpb24pDQp0YWJsZV9IeXBlcnRlbnNpb25fRmFtaWx5X0hpc3RvcnkNCmBgYA0KDQpC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBjaG8gdGjhuqV5Og0KDQogIC0gVHJvbmcgbmjDs20gdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgIChjw7MpOiBjw7MgMzMzIG5nxrDhu51pIGtow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdsOgIDY1MiBuZ8aw4budaSBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQogIC0gVHJvbmcgbmjDs20gdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBraMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICAoa2jDtG5nKTogY8OzIDYyMCBuZ8aw4budaSBraMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHbDoCAzODAgbmfGsOG7nWkgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSB0w6xuaCB0cuG6oW5nIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICBjw7MgdGjhu4MgbGnDqm4gcXVhbiDEkeG6v24gbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIHNvIHbhu5tpIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIC4gVHV5IG5oacOqbiwgY+G6p24gdGjhu7FjIGhp4buHbiBraeG7g20gxJHhu4tuaCB0aOG7kW5nIGvDqiDEkeG7gyB4w6FjIMSR4buLbmggbeG7qWMgxJHhu5kgw70gbmdoxKlhIGPhu6dhIG3hu5FpIGxpw6puIGjhu4cgbsOgeS4NCg0KxJDhu4MgbMOgbSByw7UgaMahbiBuaOG6rW4gxJHhu4tuaCB0csOqbiwgY2jDum5nIHRhIHPhur0gc+G7rSBk4bulbmcgYmnhu4N1IMSR4buTIGPhu5l0IG5ow7NtLg0KDQpgYGB7cn0NCiMgVOG6oW8gYuG6o25nIHThuqduIHPhu5EgY2jDqW8NCnRhYmxlX0h5cGVydGVuc2lvbl9GYW1pbHlfSGlzdG9yeSA8LSB0YWJsZShkYXRhJEZhbWlseV9IaXN0b3J5LCBkYXRhJEhhc19IeXBlcnRlbnNpb24pDQoNCiMgQ2h1eeG7g24gYuG6o25nIGNow6lvIHRow6BuaCBkYXRhIGZyYW1lDQpkZl9wbG90X0ZhbWlseV9IaXN0b3J5IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfSHlwZXJ0ZW5zaW9uX0ZhbWlseV9IaXN0b3J5KQ0KY29sbmFtZXMoZGZfcGxvdF9GYW1pbHlfSGlzdG9yeSkgPC0gYygiRmFtaWx5X0hpc3RvcnkiLCAiSGFzX0h5cGVydGVuc2lvbiIsICJDb3VudCIpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MNCmdncGxvdChkZl9wbG90X0ZhbWlseV9IaXN0b3J5LCBhZXMoeCA9IEZhbWlseV9IaXN0b3J5LCB5ID0gQ291bnQsIGZpbGwgPSBIYXNfSHlwZXJ0ZW5zaW9uKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgbGFicyh0aXRsZSA9ICJUw6xuaCB0cuG6oW5nIG3huq9jIGNhbyBodXnhur90IMOhcCB0aGVvIHTDrW5oICBj4bunYSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCIsDQogICAgICAgeCA9ICJUw61uaCBjaOG6pXQgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgKEZhbWlseV9IaXN0b3J5KSIsDQogICAgICAgeSA9ICJT4buRIGzGsOG7o25nIGLhu4duaCBuaMOibiIsDQogICAgICAgZmlsbCA9ICJN4bqvYyBjYW8gaHV54bq/dCDDoXAiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJza3libHVlIiwgIlllcyIgPSAic2FsbW9uIikpDQpgYGANCg0KLSBCaeG7g3UgxJHhu5MgY+G7mXQgdHLhu7FjIHF1YW4gaMOzYSBt4buZdCBjw6FjaCByw7UgcsOgbmcgc+G7sSBraMOhYyBiaeG7h3QgxJHDoyBuw6p1Og0KICAtIOG7niBuaMOzbSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGtow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgIChLaMO0bmcpOiBD4buZdCAiS2jDtG5nIG3huq9jIGNhbyBodXnhur90IMOhcCIgY2FvIGjGoW4gaOG6s24gY+G7mXQgIm3huq9jIGNhbyBodXnhur90IMOhcCIuDQogIC0g4bueIG5ow7NtIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICAoQ8OzKTogQ+G7mXQgIm3huq9jIGNhbyBodXnhur90IMOhcCIgbOG6oWkgY2FvIGjGoW4gZ+G6pXAgxJHDtGkgY+G7mXQgIktow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAiLg0KICANCi0gQmnhu4N1IMSR4buTIGPhu6duZyBj4buRIG3huqFuaCBt4bq9IGdp4bqjIHRodXnhur90IHLhurFuZyB2aeG7h2MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY8OzIHTDrW5oICBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4uIELhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgIGTGsOG7nW5nIG5oxrAgY8OzIHThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4gNTAlLCB0cm9uZyBraGkgdOG7tyBs4buHIG7DoHkg4bufIG5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCAgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MuDQoNCg0KIyMjIyAqKjMuMy4zLiBQaMOibiB0w61jaCBSZWxhdGl2ZSBSaXNrIGdp4buvYSBGYW1pbHlfSGlzdG9yeSB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KVGnhur9wIHRoZW8sIGNow7puZyB0YSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUmVsYXRpdmUgUmlzayAtIFJSKSDEkeG7gyDEkeG7i25oIGzGsOG7o25nIG3hu6ljIMSR4buZIOG6o25oIGjGsOG7n25nIGPhu6dhIHTDrW5oICDEkeG6v24ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBOaMOzbSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgc+G6vSDEkcaw4bujYyBjb2kgbMOgIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KYGBge3J9DQpyaXNrcmF0aW8odGFibGVfSHlwZXJ0ZW5zaW9uX0ZhbWlseV9IaXN0b3J5KQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQ6KioNCg0KKioxLiBDw6FjaCB0w61uaCBSaXNrIFJhdGlvIChSUikqKg0KDQpSUiDEkcaw4bujYyB0w61uaCBi4bqxbmcgY8O0bmcgdGjhu6ljOg0KDQpcWw0KUlIgPSBcZnJhY3tcdGV4dHtU4bu3IGzhu4cgbeG6r2MgYuG7h25oIOG7nyBuaMOzbSBwaMahaSBuaGnhu4VtfX17XHRleHR7VOG7tyBs4buHIG3huq9jIGLhu4duaCDhu58gbmjDs20ga2jDtG5nIHBoxqFpIG5oaeG7hW19fQ0KXF0NCg0KLSAqKk5ow7NtIHBoxqFpIG5oaeG7hW0gKEPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCkqKjoNCg0KXFsNCnBfe1x0ZXh0e0PDs319ID0gXGZyYWN7NjUyfXs5ODV9IFxhcHByb3ggMC42NjINClxdDQoNCi0gKipOaMOzbSBraMO0bmcgcGjGoWkgbmhp4buFbSAoS2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCkqKjoNCg0KXFsNCnBfe1x0ZXh0e0tow7RuZ319ID0gXGZyYWN7MzgwfXsxMDAwfSA9IDAuMzgwDQpcXQ0KDQrih5IgKipSUioqOg0KDQpcWw0KUlIgPSBcZnJhY3swLjY2Mn17MC4zODB9IFxhcHByb3ggMS43NDINClxdDQoNCg0KDQoqKk5o4bqtbiB4w6l0IGvhur90IHF14bqjKioNCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleToNCg0KLSAqKlJSID0gMS43NDIgKDk1JSBDSTogMS41OTEg4oCTIDEuOTA4KSwgcCA8IDAuMDAxKiouICANCi0gTmjhu69uZyBuZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIGNhbyBodXnhur90IMOhcCBjw7Mgbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICoqY2FvIGjGoW4ga2hv4bqjbmcgMS43NCBs4bqnbioqIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oLiAgDQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEgdsOgIHAtdmFsdWUgcuG6pXQgbmjhu48gKDwgMC4wNSksIGNo4bupbmcgdOG7jyBz4buxIGtow6FjIGJp4buHdCAqKmPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oKiouICANCi0gWeG6v3UgdOG7kSAqKkZhbWlseSBIaXN0b3J5KiogbMOgIG3hu5l0IHnhur91IHThu5Egbmd1eSBjxqEgcXVhbiB0cuG7jW5nLCBjw7MgbGnDqm4gcXVhbiBjaOG6t3QgY2jhur0gxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcC4NCg0KIA0KKipL4bq/dCBsdeG6rW4gdOG7qyBjw6FjIGtp4buDbSDEkeG7i25oOioqDQoNCnwgRmFtaWx5X0hpc3RvcnkgICAgICB8IG1pZHAuZXhhY3QgICAgfCBmaXNoZXIuZXhhY3QgIHwgY2hpLnNxdWFyZSAgIHwNCnw6LS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tOnwNCnwga2jDtG5nICAgfCBOQSAgICAgICAgICAgIHwgTkEgICAgICAgICAgICB8IE5BICAgICAgICAgICB8DQp8IGPDsyAgICB8IDAgICAgICB8IDEuNjUyMjhlLTM2ICAgICAgfCAzLjA2ODcxZS0zNiAgICAgfA0KDQpE4buxYSB0csOqbiBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBnaeG7r2EgdMOtbmggY2jhuqV0IHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIChGYW1pbHlfSGlzdG9yeSkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBi4buHbmgsIHRhIHRo4bqleSBy4bqxbmcg4bufIG5ow7NtICoqdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgIChjw7MpKiosIGPDoWMgZ2nDoSB0cuG7iyBwIHThu6sgY+G6oyBiYSBwaMawxqFuZyBwaMOhcCBraeG7g20gxJHhu4tuaCBtaWQtcCBleGFjdCwgRmlzaGVyIGV4YWN0IHbDoCBDaGktc3F1YXJlIMSR4buBdSBy4bqldCBuaOG7jywgbmjhu48gaMahbiBuaGnhu4F1IHNvIHbhu5tpIG5nxrDhu6FuZyDDvSBuZ2jEqWEgMC4wNS4gxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOtbmggY2jhuqV0IHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgYuG7h25oIGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBOw7NpIGPDoWNoIGtow6FjLCAqKnTDrW5oIGNo4bqldCBj4bunYSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCBjw7MgdGjhu4MgbMOgIG3hu5l0IHnhur91IHThu5Egbmd1eSBjxqEgbMOgbSB0xINuZyBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAqKi4NCg0KDQojIyMjICoqMy4zLjQuIFBow6JuIHTDrWNoIE9kZCBSYXRpbyBnaeG7r2EgRmFtaWx5X0hpc3RvcnkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCoqDQoNClTGsMahbmcgdOG7sSwgY2jDum5nIHRhIHPhur0gdMOtbmggVOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbyAtIE9SKS4NCg0KYGBge3J9DQpvZGRzcmF0aW8odGFibGVfSHlwZXJ0ZW5zaW9uX0ZhbWlseV9IaXN0b3J5LCBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KDQpPUiDEkcaw4bujYyB0w61uaCBi4bqxbmcgY8O0bmcgdGjhu6ljOg0KDQpcWw0KT1IgPSBcZnJhY3tcZGZyYWN7YX17Yn19e1xkZnJhY3tjfXtkfX0gPSBcZnJhY3thIFx0aW1lcyBkfXtiIFx0aW1lcyBjfQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKGFcKTogc+G7kSBuZ8aw4budaSAqKkPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKiogdsOgICoqYuG7iyBjYW8gaHV54bq/dCDDoXAqKiA9IDY1MiAgDQotIFwoYlwpOiBz4buRIG5nxrDhu51pICoqQ8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiBuaMawbmcgKipraMO0bmcgYuG7iyBjYW8gaHV54bq/dCDDoXAqKiA9IDMzMyAgDQotIFwoY1wpOiBz4buRIG5nxrDhu51pICoqS2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKiogdsOgICoqYuG7iyBjYW8gaHV54bq/dCDDoXAqKiA9IDM4MCAgDQotIFwoZFwpOiBz4buRIG5nxrDhu51pICoqS2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKiogdsOgICoqa2jDtG5nIGLhu4sgY2FvIGh1eeG6v3Qgw6FwKiogPSA2MjAgIA0KDQpLaGkgxJHDszoNCg0KXFsNCk9SID0gXGZyYWN7NjUyIFx0aW1lcyA2MjB9ezMzMyBcdGltZXMgMzgwfSBcYXBwcm94IDMuMTkNClxdDQoNCg0KLSAqKk9SID0gMy4xOSAoOTUlIENJOiAyLjY2IOKAkyAzLjg0KSwgcCA8IDAuMDAxKiouICANCi0gTmjhu69uZyBuZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBi4buLIGNhbyBodXnhur90IMOhcCBjw7MgKipvZGRzIG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gZ+G6pXAga2hv4bqjbmcgMy4xOSBs4bqnbioqIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oLiAgDQotIEtob+G6o25nIHRpbiBj4bqteSA5NSUga2jDtG5nIGNo4bupYSBnacOhIHRy4buLIDEgdsOgIHAtdmFsdWUgcuG6pXQgbmjhu48sIGNo4bupbmcgdOG7jyBz4buxIGtow6FjIGJp4buHdCBuw6B5ICoqY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmgqKi4gIA0KLSAqKk5ow7NtIHRoYW0gY2hp4bq/dSoqIHRyb25nIHBow6JuIHTDrWNoIGzDoCAqKuKAnEtow7RuZyBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaOKAnSoqLiAgDQotIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHnhur91IHThu5EgZGkgdHJ1eeG7gW4gKGZhbWlseSBoaXN0b3J5KSBsw6AgbeG7mXQgKip54bq/dSB04buRIG5ndXkgY8ahIHF1YW4gdHLhu41uZyoqLCBj4bqnbiDEkcaw4bujYyB4ZW0geMOpdCB0cm9uZyBjw6FjIG3DtCBow6xuaCBk4buxIMSRb8OhbiB2w6AgdHJvbmcgY8O0bmcgdMOhYyBwaMOybmcgbmfhu6thIGNhbyBodXnhur90IMOhcC4NCg0KDQojIyMjICoqMy4zLjUuIFRo4buRbmcga8OqIHN1eSBkaeG7hW4qKg0KDQpDaMO6bmcgdGEgc+G7rSBk4bulbmcga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIMSR4buDIGtp4buDbSB0cmEgZ2nhuqMgdGh1eeG6v3QgduG7gSB0w61uaCDEkeG7mWMgbOG6rXAgZ2nhu69hIHTDrW5oICB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQoqKkdp4bqjIHRodXnhur90IGtp4buDbSDEkeG7i25oOioqDQoNCkjigoAgKEdp4bqjIHRodXnhur90IGtow7RuZyk6IFTDrW5oIGNo4bqldCBUaeG7gW4gc+G7rSBnaWEgxJHDrG5oIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgbMOgIGhhaSBiaeG6v24gxJHhu5ljIGzhuq1wIChraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KSOKCgSAoR2nhuqMgdGh1eeG6v3QgxJHhu5FpKTogVMOtbmggY2jhuqV0IHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgbMOgIGhhaSBiaeG6v24gcGjhu6UgdGh14buZYyAoY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KDQpgYGB7cn0NCiMgS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nDQpjaGlzcS50ZXN0KHRhYmxlX0h5cGVydGVuc2lvbl9GYW1pbHlfSGlzdG9yeSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nIFBlYXJzb24gduG7m2kgaGnhu4d1IGNo4buJbmggbGnDqm4gdOG7pWMgY+G7p2EgWWF0ZXMgY2hvIGdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogWC1zcXVhcmVkIGzDoCAxNTYuODksIHbhu5tpIGLhuq1jIHThu7EgZG8gbMOgIDEuIEdpw6EgdHLhu4sgcC12YWx1ZSB0xrDGoW5nIOG7qW5nIGzDoCAyLjJlLTE2LCBt4buZdCBnacOhIHRy4buLIGPhu7FjIGvhu7Mgbmjhu48uDQoNCkRvIHAtdmFsdWUgbmjhu48gaMahbiBy4bqldCBuaGnhu4F1IHNvIHbhu5tpIG3hu6ljIMO9IG5naMSpYSB0aMO0bmcgdGjGsOG7nW5nICjOsSA9IDAuMDUpLCBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZyAoSOKCgCkuIMSQaeG7gXUgbsOgeSBjdW5nIGPhuqVwIGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIG3huqFuaCBt4bq9IMSR4buDIGvhur90IGx14bqtbiBy4bqxbmcgY8OzIG3hu5l0IG3hu5FpIGxpw6puIGjhu4cgcGjhu6UgdGh14buZYyBy4bqldCByw7UgcsOgbmcgZ2nhu69hIHZp4buHYyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCBsw6AgIGhheSAgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBi4buHbmguDQoNCsSQ4buDIHNvIHPDoW5oIHRy4buxYyB0aeG6v3AgdOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCBnaeG7r2EgaGFpIG5ow7NtLCBjaMO6bmcgdGEgdGnhur9uIGjDoG5oIGtp4buDbSDEkeG7i25oIGhp4buHdSBoYWkgdOG7tyBs4buHLiANCkfhu41pIHAxIGzDoCB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuaMOzbSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggLCBwMiBsw6AgdOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCAuDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KSOKCgDogcDEgLSBwMiA9IDAgKFThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIGhhaSBuaMOzbSBsw6AgbmjGsCBuaGF1KS4NCkjigoE6IHAxIC0gcDIgPiAwIChU4bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuaMOzbSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggIGNhbyBoxqFuIG5ow7NtIGPDsm4gbOG6oWkgKS4NCg0KDQpgYGB7cn0NCiMgU+G7kSBjYSBt4bqvYyBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtICB2w6AgDQpzdWNjZXNzX0ZhbWlseV9IaXN0b3J5IDwtIGMoNjUyLCAzODApDQoNCiMgVOG7lW5nIHPhu5EgYuG7h25oIG5ow6JuIHRyb25nIG3hu5dpIG5ow7NtDQpuX0ZhbWlseV9IaXN0b3J5IDwtIGMoOTg1LCAxMDAwKQ0KDQojIEtp4buDbSDEkeG7i25oIGhp4buHdSB04bu3IGzhu4cgbeG7mXQgcGjDrWENCnByb3AudGVzdChzdWNjZXNzX0ZhbWlseV9IaXN0b3J5LCBuX0ZhbWlseV9IaXN0b3J5LCBhbHRlcm5hdGl2ZSA9ICJncmVhdGVyIiwgY29ycmVjdCA9IEZBTFNFKQ0KYGBgDQoNCi0gS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggaGFpIHThu7cgbOG7hyBjaG8gdGjhuqV5ICoqdOG7tyBs4buHIG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20gYuG7h25oIG5ow6JuIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCAgKHDigoEgPSA2Ni4yJSkgY2FvIGjGoW4gcsO1IHLhu4d0IHNvIHbhu5tpIG5ow7NtIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCAgKHDigoIgPSAzOCUpKiouIEdpw6EgdHLhu4sgcCBy4bqldCBuaOG7jyAoXChwID0gMi4yIFx0aW1lcyAxMF57LTE2fVwpKSBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiDhu58gbeG7qWMgw70gbmdoxKlhIDUlLg0KDQotICAqKkLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBcKCBIXzAgXCkqKiwga+G6v3QgbHXhuq1uIHLhurFuZyB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIOG7nyBuaMOzbSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCAqKmNhbyBoxqFuIG3hu5l0IGPDoWNoIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiBzbyB24bubaSBuaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butLg0KDQoNCiMjIyMgKiozLjMuNi4gTcO0IGjDrG5oIGjhu5NpIHF1eSBjaG8gZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4qKg0KDQojIyMjIyAqKjMuMy42LjEuIE3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCoqDQoNCkNow7puZyB0YSB4w6J5IGThu7FuZyBtw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggxJHhu4MgeGVtIHjDqXQg4bqjbmggaMaw4bufbmcgY+G7p2EgdMOtbmggY2jhuqV0IHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIMSR4bq/biB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQoNCmBgYHtyfQ0KIyBCaeG6v24gbmjhu4sgcGjDom4gSGFzX0h5cGVydGVuc2lvbl9iaW4gxJHDoyDEkcaw4bujYyB04bqhbyDhu58gcGjhuqduIHRyxrDhu5tjDQpIYXNfSHlwZXJ0ZW5zaW9uX2JpbiA8LSBpZmVsc2UoZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uID09ICJZZXMiLCAxLCAwKQ0KDQojIFjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaA0KaHF0dF9tb2RlbF9GYW1pbHlfSGlzdG9yeSA8LSBnbG0oSGFzX0h5cGVydGVuc2lvbl9iaW4gfiBGYW1pbHlfSGlzdG9yeSwgZGF0YSA9IGRhdGEpDQoNCiMgSGnhu4NuIHRo4buLIGvhur90IHF14bqjDQpzdW1tYXJ5KGhxdHRfbW9kZWxfRmFtaWx5X0hpc3RvcnkpDQpgYGANCg0KICoqS+G6v3QgcXXhuqMgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmg6IOG6om5oIGjGsOG7n25nIGPhu6dhIHRp4buBbiBz4butIGdpYSDEkcOsbmggxJHhur9uIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCoqDQoNCkvhur90IHF14bqjIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaDoNCg0KICoqSOG7hyBz4buRIGNo4bq3biAoSW50ZXJjZXB0KSA9IDAuMzgwMDAsIHAgPCAyZS0xNioqICANCiAgIMSQ4bqhaSBkaeG7h24gY2hvIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCDhu58gbmjDs20gKipraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgYuG7h25oKiosIGtob+G6o25nICoqMzguMCUqKi4NCg0KICoqSOG7hyBz4buRIEZhbWlseV9IaXN0b3J5Q8OzID0gMC4yODE5MywgcCA8IDJlLTE2KiogIA0KICAgTmjDs20gKipjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmgqKiBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICoqdMSDbmcgdGjDqm0gMjguMiDEkWnhu4NtIHBo4bqnbiB0csSDbSoqIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7MgdGnhu4FuIHPhu60uICANCiAgIFjDoWMgc3XhuqV0IGThu7EgxJFvw6FuIGNobyBuaMOzbSBuw6B5IGzDoDoNCiAgXFsNCiAgcF97XHRleHR7IGPDs319ID0gMC4zODAwMCArIDAuMjgxOTMgPSAwLjY2MTkzIFxhcHByb3ggNjYuMlwlDQogIFxdDQoNCiAqKsOdIG5naMSpYSB0aOG7kW5nIGvDqjoqKiBwLXZhbHVlIHLhuqV0IG5o4buPICg8IDAuMDAxKSwgY2jhu6luZyB04buPIG3hu5FpIHF1YW4gaOG7hyBnaeG7r2EgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwICoqcuG6pXQgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqLg0KDQojIyMjIyAqKjMuMy42LjIuIE3DtCBow6xuaCBMb2dpdCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgTG9naXN0aWMgxJHGsOG7o2Mgw6FwIGThu6VuZyDEkeG7gyBtw7QgaMOsbmggaMOzYSBsb2cgY+G7p2EgdOG7tyBz4buRIGNow6puaCAobG9nLW9kZHMpIGPhu6dhIHZp4buHYyBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIHbhu5tpIGJp4bq/biBGYW1pbHlfSGlzdG9yeQ0KbW9kZWxfbG9naXRfRmFtaWx5X0hpc3RvcnkgPC0gZ2xtKEhhc19IeXBlcnRlbnNpb25fYmluIH4gRmFtaWx5X0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgZGF0YSA9IGRhdGEpDQoNCiMgWGVtIGvhur90IHF14bqjDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0X0ZhbWlseV9IaXN0b3J5KQ0KYGBgDQoNCmBgYHtyfQ0KZXhwKGNvZWYobW9kZWxfbG9naXRfRmFtaWx5X0hpc3RvcnkpKQ0KYGBgDQoNCg0KROG7sWEgdHLDqm4ga+G6v3QgcXXhuqMsIHBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgbG9naXN0aWMgxrDhu5tjIGzGsOG7o25nIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBi4buHbmggKEhhc19IeXBlcnRlbnNpb25fYmluKSB0aGVvIMSR4bq3YyDEkWnhu4NtIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIChGYW1pbHlfSGlzdG9yeSkgbmjGsCBzYXU6DQoNClxbDQpcbG9nXGxlZnQoIFxmcmFje1AoXHRleHR7beG6r2MgY2FvIGh1eeG6v3Qgw6FwfSl9ezEgLSBQKFx0ZXh0e23huq9jIGNhbyBodXnhur90IMOhcH0pfSBccmlnaHQpID0gLTAuNDg5NTUgKyAxLjE2MTQ1ICBcdGltZXMgXHRleHR7RmFtaWx5X0hpc3Rvcnl9X3tcdGV4dHtZZXN9fQ0KXF0NCg0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCkjhu4cgc+G7kSBo4buTaSBxdXkgXCgxLjE2MTQ1XCkgY2hvIG5ow7NtICoqdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgIChZZXMpKiogY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gKHAtdmFsdWUgIHLhuqV0IGLDqSkpLCBjaG8gdGjhuqV5ICoqc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSBnaeG7r2EgaGFpIG5ow7NtKiouIEPhu6UgdGjhu4MsIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBi4buHbmgg4bufIGLhu4duaCBuaMOibiBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgICoqY2FvIGjGoW4gxJHDoW5nIGvhu4MqKiBzbyB24bubaSBi4buHbmggbmjDom4ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGNhbyBodXnhur90IMOhcCAuDQoNCi0gS2hpICoqa2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKiosIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcDoNCg0KXFsNClxwaV97XHRleHR7S2jDtG5nfX0gPSBcZnJhY3tlXnstMC40ODk2fX17MSArIGVeey0wLjQ4OTZ9fSBcYXBwcm94IDAuNjEzDQpcXSB0xrDGoW5nIMSRxrDGoW5nIDYxLjMlDQoNCi0gS2hpICoqY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiwgeMOhYyBzdeG6pXQgbMOgOg0KDQpcWw0KXHBpX3tcdGV4dHtDw7N9fSA9IFxmcmFje2Veey0wLjQ4OTYgKyAxLjE2MTV9fXsxICsgZV57LTAuNDg5NiArIDEuMTYxNX19IFxhcHByb3ggMC44MDUNClxdIHTGsMahbmcgxJHGsMahbmcgODAuNSUNCg0KLSAqKk9kZHMgUmF0aW8gKE9SKToqKg0KDQpcWw0KXHRleHR7T1J9ID0gZV57MS4xNjE1fSBcYXBwcm94IDMuMTkNClxdDQoNCuKGkiBOaOG7r25nIG5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCBjw7Mgb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4ga2hv4bqjbmcgKiozLjE5IGzhuqduKiogc28gduG7m2kgbmjDs20ga2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oLg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQpUaeG7gW4gc+G7rSBnaWEgxJHDrG5oIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIHF1YW4gdHLhu41uZywgY8OzIOG6o25oIGjGsOG7n25nIMSRw6FuZyBr4buDIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG3huqFuaCBt4bq9IMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAuIE5o4buvbmcgY8OhIG5ow6JuIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCBj4bqnbiDEkcaw4bujYyBxdWFuIHTDom0gdsOgIHRoZW8gZMO1aSBuaGnhu4F1IGjGoW4gdHJvbmcgY8OhYyBjaMawxqFuZyB0csOsbmggcGjDsm5nIG5n4burYS4NCg0KIyMjIyMgKiozLjMuNi4yLiBNw7QgaMOsbmggUHJvYml0KioNCg0KYGBge3J9DQojIE3DtCBow6xuaCBQcm9iaXQgduG7m2kgYmnhur9uIEZhbWlseV9IaXN0b3J5DQpwcm9iaXRfbW9kZWxfRmFtaWx5X0hpc3RvcnkgPC0gZ2xtKEhhc19IeXBlcnRlbnNpb25fYmluIH4gRmFtaWx5X0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkYXRhKQ0KDQojIFhlbSBr4bq/dCBxdeG6oyBtw7QgaMOsbmgNCnN1bW1hcnkocHJvYml0X21vZGVsX0ZhbWlseV9IaXN0b3J5KQ0KYGBgDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHRp4buBbiBz4butIGdpYSDEkcOsbmggKEZhbWlseV9IaXN0b3J5KSB2w6AgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBQaMawxqFuZyB0csOsbmggaOG7k2kgcXV5IMaw4bubYyBsxrDhu6NuZzoNCg0KXFsNClxQaGleey0xfShccGkpID0gLTAuMzA1NSArIDAuNzIzMiBcdGltZXMgXHRleHR7RmFtaWx5XF9IaXN0b3J5Q8OzfQ0KXF0NCg0KVHJvbmcgxJHDszoNCg0KLSBcKFxwaVwpIGzDoCB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQotIFwoXFBoaV57LTF9KFxwaSlcKSBsw6AgaMOgbSBuZ2jhu4tjaCDEkeG6o28gY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4gdMOtY2ggbMWpeSAoQ0RGIGNodeG6qW4gdOG6r2MpLg0KLSBOaMOzbSB0aGFtIGNoaeG6v3U6ICoqIktow7RuZyBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCIgKEZhbWlseV9IaXN0b3J5ID0gS2jDtG5nKSoqLg0KDQoNCi0gS2hpICoqa2jDtG5nIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKio6DQoNClxbDQpccGlfe1x0ZXh0e0tow7RuZ319ID0gXFBoaSgtMC4zMDU1KSBcYXBwcm94IDAuMzgwDQpcXQ0KDQotIEtoaSAqKmPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKio6DQoNClxbDQpccGlfe1x0ZXh0e0PDs319ID0gXFBoaSgtMC4zMDU1ICsgMC43MjMyKSA9IFxQaGkoMC40MTc3KSBcYXBwcm94IDAuNjYyDQpcXQ0KDQotICoqQ2jDqm5oIGzhu4djaCB4w6FjIHN14bqldDoqKg0KDQpcWw0KXERlbHRhXHBpID0gXHBpX3tcdGV4dHtDw7N9fSAtIFxwaV97XHRleHR7S2jDtG5nfX0gXGFwcHJveCAwLjY2MiAtIDAuMzgwID0gMC4yODINClxdDQoNCuKGkiBOaOG7r25nIG5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIGtob+G6o25nICoqMjguMiBwaOG6p24gdHLEg20qKiBzbyB24bubaSBuaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butLg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQpUaeG7gW4gc+G7rSBnaWEgxJHDrG5oIGzDoCBt4buZdCB54bq/dSB04buRIG5ndXkgY8ahIHF1YW4gdHLhu41uZyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmggKHAgPCAwLjAwMSksIGzDoG0gdMSDbmcgxJHDoW5nIGvhu4Mga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBNw7QgaMOsbmggUHJvYml0IGNobyBwaMOpcCDGsOG7m2MgbMaw4bujbmcgdHLhu7FjIHRp4bq/cCB4w6FjIHN14bqldCwgcGjDuSBo4bujcCBraGkgZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbiBjaG8gYmnhur9uIHRp4buBbSDhuqluLg0KDQoNCiMjIyMjICoqMy4zLjYuMy4gTcO0IGjDrG5oIGNsb2dsb2cqKg0KDQpgYGB7cn0NCiMgTcO0IGjDrG5oIGNsb2dsb2cgduG7m2kgYmnhur9uIEZhbWlseV9IaXN0b3J5DQpjbG9nbG9nX21vZGVsX0ZhbWlseV9IaXN0b3J5IDwtIGdsbShIYXNfSHlwZXJ0ZW5zaW9uX2JpbiB+IEZhbWlseV9IaXN0b3J5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSwgZGF0YSA9IGRhdGEpDQoNCiMgWGVtIGvhur90IHF14bqjIG3DtCBow6xuaA0Kc3VtbWFyeShjbG9nbG9nX21vZGVsX0ZhbWlseV9IaXN0b3J5KQ0KYGBgDQoNCioqS+G6v3QgcXXhuqMgaOG7k2kgcXV5IGNsb2dsb2cgY2hvIGJp4bq/biBGYW1pbHlfSGlzdG9yeSoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbmjhu4sgcGjDom4gduG7m2kgaMOgbSBsacOqbiBr4bq/dCAqKmNvbXBsZW1lbnRhcnkgbG9nLWxvZyAoY2xvZ2xvZykqKiDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyDEkcOhbmggZ2nDoSDhuqNuaCBoxrDhu59uZyBj4bunYSB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIChGYW1pbHlfSGlzdG9yeSkgxJHhur9uIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcC4gUGjGsMahbmcgdHLDrG5oIMaw4bubYyBsxrDhu6NuZzoNCg0KXFsNClxsb2dcbGVmdCgtXGxvZygxIC0gXHBpKVxyaWdodCkgPSAtMC43MzgxICsgMC44MTkyIFx0aW1lcyBcdGV4dHtGYW1pbHlcX0hpc3RvcnlDw7N9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoXHBpXCkgbMOgIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcC4NCi0gTmjDs20gdGhhbSBjaGnhur91OiAqKiJLaMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgiIChGYW1pbHlfSGlzdG9yeSA9IEtow7RuZykqKi4NCg0KLSBLaGkgKipraMO0bmcgY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKjoNCg0KXFsNClxwaV97XHRleHR7S2jDtG5nfX0gPSAxIC0gXGV4cFxsZWZ0Wy1cZXhwKC0wLjczODEpXHJpZ2h0XSBcYXBwcm94IDAuMzgwDQpcXQ0KDQotIEtoaSAqKmPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKio6DQoNClxbDQpccGlfe1x0ZXh0e0PDs319ID0gMSAtIFxleHBcbGVmdFstXGV4cCgtMC43MzgxICsgMC44MTkyKVxyaWdodF0gXGFwcHJveCAwLjY2Mg0KXF0NCg0KLSAqKkNow6puaCBs4buHY2ggeMOhYyBzdeG6pXQ6KioNCg0KXFsNClxEZWx0YVxwaSA9IFxwaV97XHRleHR7Q8OzfX0gLSBccGlfe1x0ZXh0e0tow7RuZ319IFxhcHByb3ggMC42NjIgLSAwLjM4MCA9IDAuMjgyDQpcXQ0KDQrihpIgTmjDs20gY8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgYuG7h25oIGPDsyB4w6FjIHN14bqldCBi4buLIGNhbyBodXnhur90IMOhcCAqKmNhbyBoxqFuIGtob+G6o25nIDI4LjIgxJFp4buDbSBwaOG6p24gdHLEg20qKiBzbyB24bubaSBuaMOzbSBraMO0bmcgY8OzIHRp4buBbiBz4butLg0KDQoqKkvhur90IGx14bqtbjoqKg0KDQpUaeG7gW4gc+G7rSBnaWEgxJHDrG5oIGPDsyB0w6FjIMSR4buZbmcgcsO1IHLhu4d0IHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaCAocCA8IDAuMDAxKSDEkeG6v24gbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiBIw6BtIGxpw6puIGvhur90IGNsb2dsb2cgcGjDuSBo4bujcCBraGkgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24gbWFuZyB0w61uaCBi4bqldCDEkeG7kWkgeOG7qW5nLCB2w6Aga+G6v3QgcXXhuqMgbcO0IGjDrG5oIG7DoHkgY8WpbmcgbmjhuqV0IHF1w6FuIHbhu5tpIGPDoWMgbcO0IGjDrG5oIExvZ2l0IHbDoCBQcm9iaXQuDQoNCiMjIyMgKiozLjMuNy4gxJDDoW5oIGdpw6EgbcO0IGjDrG5oKioNCg0KKipC4bqjbmcgdOG7lW5nIGjhu6NwIDQgbcO0IGjDrG5oKioNCnwgTcO0IGjDrG5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgSOG7hyBz4buRIChFc3RpbWF0ZSkgfCBQLXZhbHVlICAgICAgIHwgQUlDICAgIHwgRGnhu4VuIGdp4bqjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IEjhu5NpIHF1eSB0dXnhur9uIHTDrW5oIChMaW5lYXIpICAgICB8IDAuMjgxOSAgICAgICAgICAgfCA8MmUtMTYgXCpcKlwqIHwgMjcxOS42IHwgS2jDtG5nIHBow7kgaOG7o3AgY2hvIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuLCBjaOG7iSBtYW5nIHTDrW5oIG1pbmggaOG7jWEgICAgICAgICAgIHwNCnwgTG9naXN0aWMgcmVncmVzc2lvbiAobG9naXQpICAgICB8IDEuMTYxNSAgICAgICAgICAgfCA8MmUtMTYgXCpcKlwqIHwgMjU5Mi40IHwgTcO0IGjDrG5oIGNodeG6qW4gY2hvIGThu68gbGnhu4d1IG5o4buLIHBow6JuLCBk4buFIGRp4buFbiBnaeG6o2kgcXVhIE9kZHMgUmF0aW8gICAgICAgICAgICAgfA0KfCBQcm9iaXQgcmVncmVzc2lvbiAgICAgICAgICAgICAgIHwgMC43MjMyICAgICAgICAgICB8IDwyZS0xNiBcKlwqXCogfCAyNTkyLjQgfCBHaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluLCBr4bq/dCBxdeG6oyB0xrDGoW5nIHThu7EgbG9naXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBDb21wbGVtZW50YXJ5IGxvZy1sb2cgKGNsb2dsb2cpIHwgMC44MTkyICAgICAgICAgICB8IDwyZS0xNiBcKlwqXCogfCAyNTkyLjQgfCBQaMO5IGjhu6NwIG7hur91IGJp4bq/biBz4buxIGtp4buHbiBoaeG6v20sIG5oxrBuZyDhu58gxJHDonkgdOG6p24gc3XhuqV0IGNhbyBuw6puIGtow7RuZyBj4bqnbiB0aGnhur90IHwNCg0KDQoqKk5o4bqtbiB4w6l0KioNCg0KLSBD4bqjIDQgbcO0IGjDrG5oIMSR4buBdSBjaG8gdGjhuqV5IEZhbWlseV9IaXN0b3J5ICh0aeG7gW4gc+G7rSBnaWEgxJHDrG5oKSBjw7MgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIHbDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGNhbyAocCA8IDAuMDAxKSDEkeG6v24ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQogIC0gTGluZWFyIHJlZ3Jlc3Npb24gdHV5IGNobyBo4buHIHPhu5EgY8OzIMO9IG5naMSpYSBuaMawbmcga2jDtG5nIHBow7kgaOG7o3AgduG7gSBt4bq3dCBsw70gdGh1eeG6v3QgdsOsIGJp4bq/biBwaOG7pSB0aHXhu5ljIGzDoCBuaOG7iyBwaMOibi4NCg0KICAtIExvZ2lzdGljIHJlZ3Jlc3Npb24gKGxvZ2l0KSBsw6AgbOG7sWEgY2jhu41uIGjhu6NwIGzDvSBuaOG6pXQ6IGPDsyBBSUMgdGjhuqVwIG5o4bqldCAoMjU5Mi40KSwga+G6v3QgcXXhuqMgcsO1IHLDoG5nLCBk4buFIGRp4buFbiBnaeG6o2kgcXVhIE9kZHMgUmF0aW8gKE9SIOKJiCAzLjE5KS4NCg0KICAtIFByb2JpdCByZWdyZXNzaW9uIGNobyBr4bq/dCBxdeG6oyB0xrDGoW5nIHThu7EgbG9naXQgdsOgIGPDsyB0aOG7gyBz4butIGThu6VuZyB0aGF5IHRo4bq/IGtoaSBtdeG7kW4gZ2nhuqMgxJHhu4tuaCBwaMOibiBwaOG7kWkgY2h14bqpbi4NCg0KICAtIENsb2dsb2cgcmVncmVzc2lvbiB0aMOtY2ggaOG7o3AgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIHPhu7Ega2nhu4duIGhp4bq/bSwgbmjGsG5nIOG7nyDEkcOieSB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGtow7RuZyBoaeG6v20g4oaSIGNsb2dsb2cga2jDtG5nIGPDsyBs4bujaSB0aOG6vyByw7UgcuG7h3QuDQoNCiMjICoqMy40LiBFeGVyY2lzZV9MZXZlbCAtIE3hu6ljIMSR4buZIHbhuq1uIMSR4buZbmcgdGjhu4MgdGhhbyB0w6FjIMSR4buZbmcgxJHhur9uIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAqKg0KDQojIyMjICoqMy40LjEgVGjhu5FuZyBrw6ogdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCB0cuG7sWMgcXVhbiBow7NhKioNCg0KKipUSOG7kE5HIEvDiiBU4bqmTiBT4buQLCBU4bqmTiBTVeG6pFQqKg0KDQpgYGB7cn0NCmFmZmVjdF9mcmVxIDwtIHRhYmxlKGRhdGEkRXhlcmNpc2VfTGV2ZWwpDQphZmZlY3RfcGVyY2VudCA8LSBwcm9wLnRhYmxlKGFmZmVjdF9mcmVxKSAqIDEwMA0KZGF0YS5mcmFtZShBZmZlY3RzID0gbmFtZXMoYWZmZWN0X2ZyZXEpLA0KICAgICAgICAgICBGcmVxdWVuY3kgPSBhcy5udW1lcmljKGFmZmVjdF9mcmVxKSwNCiAgICAgICAgICAgUGVyY2VudGFnZSA9IHJvdW5kKGFzLm51bWVyaWMoYWZmZWN0X3BlcmNlbnQpLCAxKSkNCmBgYA0KDQoNCioqVHLhu7FjIHF1YW4gaMOzYSoqDQoNCmBgYHtyfQ0KcGxvdF9waWUoZGF0YSwgIkV4ZXJjaXNlX0xldmVsIiwgIlBow6JuIExv4bqhaSBN4bupYyDEkOG7mSBW4bqtbiDEkOG7mW5nIikNCmBgYA0KDQpgYGB7cn0NCnRhYl9FeDwtIHRhYmxlKGRhdGEkRXhlcmNpc2VfTGV2ZWwpDQp0YWJfRXgNCg0KYmFycGxvdCh0YWJfRXgsDQogICAgICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHThuqduIHPhu5EgbeG7qWMgxJHhu5kgduG6rW4gxJHhu5luZyIsDQogICAgICAgIHhsYWIgPSAibeG7qWMgxJHhu5kgduG6rW4gxJHhu5luZyIsDQogICAgICAgIHlsYWIgPSAiVOG6p24gc+G7kSIsDQogICAgICAgIGNvbCA9IGMoInNreWJsdWUiLCAibGlnaHRncmVlbiIsICJsaWdodGNvcmFsIiksDQogICAgICAgIGJvcmRlciA9ICJ3aGl0ZSIsDQogICAgICAgIHlsaW0gPSBjKDAsIG1heCh0YWJfRXgpICsgNDApKSAtPiBicF9FeGVyY2lzZV9MZXZlbA0KDQp0ZXh0KHggPSBicF9FeGVyY2lzZV9MZXZlbCwgeSA9IHRhYl9FeCArIDE1LCBsYWJlbHMgPSB0YWJfRXgpDQpgYGANCg0KKipC4bqjbmcgZOG7i2NoIHRodeG6rXQqKg0KDQp8IE3hu6ljIMSR4buZIHbhuq1uIMSR4buZbmcgKHRp4bq/bmcgQW5oKSAgICAgfCBUaeG6v25nIFZp4buHdCB0xrDGoW5nIOG7qW5nICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgSElHSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFbhuq1uIMSR4buZbmcgY2FvICAgICAgICAgICAgICB8DQp8IE1vZGVyYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBW4bqtbiDEkeG7mW5nIGLDrG5oIHRoxrDhu51uZyAgICAgIHwNCnwgTG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IMONdCB24bqtbiDEkeG7mW5nICAgICAgICAgICAgICAgfA0KDQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIE5ow7NtIMOtdCB24bqtbiDEkeG7mW5nICAoTG93KSBjaGnhur9tIHThu7cgbOG7hyBjYW8gbmjhuqV0IHbhu5tpIDQ3LDIlICg5MzYgbmfGsOG7nWkpLCBjaG8gdGjhuqV5IGfhuqduIG3hu5l0IG7hu61hIHPhu5EgxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IGPDsyB0aMOzaSBxdWVuIHbhuq1uIMSR4buZbmcgaOG6oW4gY2jhur8uDQoNCi0gTmjDs20gduG6rW4gxJHhu5luZyB0cnVuZyBiw6xuaCAoTW9kZXJhdGUpIGNoaeG6v20gMzMsMSUgKDY1OCBuZ8aw4budaSksIHBo4bqjbiDDoW5oIG3hu5l0IGLhu5kgcGjhuq1uIMSRw6FuZyBr4buDIGPDsyBt4bupYyB24bqtbiDEkeG7mW5nIOG7nyBt4bupYyB24burYSBwaOG6o2kuDQoNCi0gTmjDs20gduG6rW4gxJHhu5luZyBjYW8gKEhpZ2gpIGNo4buJIGNoaeG6v20gMTksNyUgKDM5MSBuZ8aw4budaSksIGNobyB0aOG6pXkgdOG7tyBs4buHIGR1eSB0csOsIHRow7NpIHF1ZW4gduG6rW4gxJHhu5luZyB0w61jaCBj4buxYyB0cm9uZyBj4buZbmcgxJHhu5NuZyBuZ2hpw6puIGPhu6l1IGPDsm4ga2jDoSB0aOG6pXAuDQoNCkvhur90IHF14bqjIG7DoHkgY2hvIHRo4bqleSDEkWEgc+G7kSDEkeG7kWkgdMaw4bujbmcga2jDtG5nIMSR4bqhdCDEkcaw4bujYyBt4bupYyB24bqtbiDEkeG7mW5nIGNhbywgxJFp4buBdSBuw6B5IGPDsyB0aOG7gyBsacOqbiBxdWFuIMSR4bq/biBuZ3V5IGPGoSBnaWEgdMSDbmcgY8OhYyBi4buHbmggbMO9IG3huqFuIHTDrW5oLCDEkeG6t2MgYmnhu4d0IGzDoCBjYW8gaHV54bq/dCDDoXAuIFZp4buHYyBuw6JuZyBjYW8gbmjhuq1uIHRo4bupYyB2w6Aga2h1eeG6v24ga2jDrWNoIGzhu5FpIHPhu5FuZyBuxINuZyDEkeG7mW5nIGjGoW4gbMOgIGPhuqduIHRoaeG6v3QgxJHhu4MgY+G6o2kgdGhp4buHbiBz4bupYyBraOG7j2UgdGltIG3huqFjaCB0cm9uZyBxdeG6p24gdGjhu4MgbsOgeS4NCg0KIyMjIyAqKjMuNC4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gaGFpIGJp4bq/biBFeGVyY2lzZV9MZXZlbCB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KQ2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIGhhaSBiaeG6v24gRXhlcmNpc2VfTGV2ZWwgdsOgIEhhc19IeXBlcnRlbnNpb24gxJHhu4MgeGVtIHjDqXQgbeG7kWkgcXVhbiBo4buHIHPGoSBi4buZIGdp4buvYSBjaMO6bmcuDQoNCmBgYHtyfQ0KIyBC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIG3huq9jIGNhbyBodXnhur90IMOhcA0KdGFibGVfSHlwZXJ0ZW5zaW9uX0V4ZXJjaXNlX0xldmVsIDwtIHRhYmxlKGRhdGEkRXhlcmNpc2VfTGV2ZWwsIGRhdGEkSGFzX0h5cGVydGVuc2lvbikNCg0KIyBUaMOqbSBow6BuZyB2w6AgY+G7mXQgdOG7lW5nDQphZGRtYXJnaW5zKHRhYmxlX0h5cGVydGVuc2lvbl9FeGVyY2lzZV9MZXZlbCkNCmBgYA0KDQotIEhpZ2h0OiAzOTEgYuG7h25oIG5ow6JuLCBjw7MgMjEzIGNhIG3huq9jIGNhbyBodXnhur90IMOhcCANCg0KLSBMb3c6IDkzNiBi4buHbmggbmjDom4sIDQ3MiBjYSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgDQoNCi0gTW9kZXJhdGU6IDY1OCBi4buHbmggbmjDom4sIDM0NyBjYSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgDQoNCsSQ4buDIGzDoG0gcsO1IGjGoW4gbmjhuq1uIMSR4buLbmggbeG7qWMgxJHhu5kgduG6rW4gxJHhu5luZyBjw7MgbGnDqm4gcXVhbiDEkeG6v24gYuG7h25oIGNhbyBodXnhur90IMOhcCAsIGNow7puZyB0YSBz4bq9IHPhu60gZOG7pW5nIGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbS4NCg0KYGBge3J9DQojIENodXnhu4NuIGLhuqNuZyBjaMOpbyB0aMOgbmggZGF0YSBmcmFtZQ0KZGZfcGxvdF9FeGVyY2lzZV9MZXZlbCA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlX0h5cGVydGVuc2lvbl9FeGVyY2lzZV9MZXZlbCkNCmNvbG5hbWVzKGRmX3Bsb3RfRXhlcmNpc2VfTGV2ZWwpIDwtIGMoIkV4ZXJjaXNlX0xldmVsIiwgIkhhc19IeXBlcnRlbnNpb24iLCAiQ291bnQiKQ0KDQojIMSQ4bqjbSBi4bqjbyB0aOG7qSB04buxIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHRoZW8gbMOibSBzw6BuZw0KZGZfcGxvdF9FeGVyY2lzZV9MZXZlbCRFeGVyY2lzZV9MZXZlbCA8LSBmYWN0b3IoZGZfcGxvdF9FeGVyY2lzZV9MZXZlbCRFeGVyY2lzZV9MZXZlbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkhpZ2giLCAiTW9kZXJhdGUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvdyIpKQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIGPhu5l0IHThu7cgbOG7hw0KbGlicmFyeShnZ3Bsb3QyKQ0KZ2dwbG90KGRmX3Bsb3RfRXhlcmNpc2VfTGV2ZWwsIGFlcyh4ID0gRXhlcmNpc2VfTGV2ZWwsIHkgPSBDb3VudCwgZmlsbCA9IEhhc19IeXBlcnRlbnNpb24pKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImZpbGwiKSArICAjIHThu7cgbOG7hyBwaOG6p24gdHLEg20gdGhlbyBj4buZdA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdCgpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJsaWdodGJsdWUiLCAiWWVzIiA9ICJwaW5rIiksDQogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAiLCAibeG6r2MgY2FvIGh1eeG6v3Qgw6FwIikpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHRoZW8gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iyIsDQogICAgICAgeCA9ICJt4bupYyDEkeG7mSB24bqtbiDEkeG7mW5nIHRo4buDIGNo4bqldCIsDQogICAgICAgeSA9ICJU4bu3IGzhu4cgKCUpIiwNCiAgICAgICBmaWxsID0gIlTDrG5oIHRy4bqhbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIikgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEzKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gMjUsIGhqdXN0ID0gMSkpDQpgYGANCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleSB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHTEg25nIGThuqduIHRoZW8gbeG7qWMgxJHhu5kgduG6rW4gxJHhu5luZyB0aOG7gyBjaOG6pXQ6IG5ow7NtIHbhuq1uIMSR4buZbmcgdGjhuqVwIGPDsyB04bu3IGzhu4cgY2FvIGh1eeG6v3Qgw6FwIGtob+G6o25nIDUwLjQlICg0NzIvOTM2KSwgbmjDs20gduG6rW4gxJHhu5luZyB0cnVuZyBiw6xuaCBsw6AgNTIuNyUgKDM0Ny82NTgpLCB0cm9uZyBraGkgbmjDs20gduG6rW4gxJHhu5luZyBjYW8gxJHhuqF0IDU0LjUlICgyMTMvMzkxKS4NCg0KSGnhu4duIHTGsOG7o25nIG7DoHkga2jDtG5nIGhvw6BuIHRvw6BuIHBow7kgaOG7o3AgduG7m2kgZ2nhuqMgdGh1eeG6v3QgcGjhu5UgYmnhur9uIHLhurFuZyB24bqtbiDEkeG7mW5nIHRoxrDhu51uZyB4dXnDqm4gZ2nDunAgZ2nhuqNtIG5ndXkgY8ahIGNhbyBodXnhur90IMOhcC4gTmd1ecOqbiBuaMOibiBjw7MgdGjhu4MgYmFvIGfhu5NtOg0KDQotIEPGsOG7nW5nIMSR4buZIHbhuq1uIMSR4buZbmc6IHbhuq1uIMSR4buZbmcgcXXDoSBt4bupYyBob+G6t2MgdGhp4bq/dSBwaOG7pWMgaOG7k2kgY8OzIHRo4buDIGzDoG0gdMSDbmcgxJHDoXAg4bupbmcgdGjhuqduIGtpbmggZ2lhbyBj4bqjbSB2w6AgZOG6q24gxJHhur9uIGh1eeG6v3Qgw6FwIGNhbyBoxqFuLg0KDQotIFBow6JuIGLhu5EgdHXhu5VpIHbDoCBnaeG7m2k6IG7hur91IG5ow7NtIHbhuq1uIMSR4buZbmcgY2FvIGPDsyB04bu3IGzhu4cgbmFtIGdp4bubaSBob+G6t2MgbmfGsOG7nWkgbOG7m24gdHXhu5VpIGNhbyBoxqFuLCBuZ3V5IGPGoSB0xINuZyBodXnhur90IMOhcCBjxaluZyBz4bq9IHTEg25nIHRoZW8uDQoNCkRvIMSRw7MsIGvhur90IHF14bqjIG7DoHkgY+G6p24gxJHGsOG7o2MgeGVtIHjDqXQgdGjhuq1uIHRy4buNbmcuIMSQ4buDIGto4bqzbmcgxJHhu4tuaCBt4buRaSBxdWFuIGjhu4cgdGjhu7FjIHPhu7EsIGPhuqduIHBow6JuIHTDrWNoIHPDonUgaMahbiBi4bqxbmcgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IMSRYSBiaeG6v24gxJHhu4Mga2nhu4NtIHNvw6F0IGPDoWMgYmnhur9uIG5oaeG7hXUgbmjGsCB0deG7lWksIGdp4bubaSwgQk1JLCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIHbDoCBow7p0IHRodeG7kWMuDQoNCiMjIyMgKiozLjQuMy4gUGjDom4gdMOtY2ggUmVsYXRpdmUgUmlzayBnaeG7r2EgRXhlcmNpc2VfTGV2ZWwgdsOgIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCoqDQoNCkNow7puZyB0YSBz4bq9IHTDrW5oIHRvw6FuIE5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSUiksIGzhuqV5IG5ow7NtIEhpZ2ggbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQoNCmBgYHtyfQ0Kcmlza3JhdGlvKHRhYmxlX0h5cGVydGVuc2lvbl9FeGVyY2lzZV9MZXZlbCkNCmBgYA0KDQpL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBjaG8gdGjhuqV5Og0KDQotIE5ow7NtICoqTG93KiogY8OzICoqUlIgPSAwLjkyNioqIChLVEMgOTUlOiAwLjgyOSDigJMgMS4wMzQsIHAg4omIIDAuMTgpLCB04bupYyBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgKip0aOG6pXAgaMahbiBraG/huqNuZyA3LjQlKiogc28gduG7m2kgbmjDs20gduG6rW4gxJHhu5luZyBjYW8gKCoqSGlnaCoqKSwgbmjGsG5nIHPhu7Ega2jDoWMgYmnhu4d0ICoqa2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiAocCA+IDAuMDUpLg0KDQotIE5ow7NtICoqTW9kZXJhdGUqKiBjw7MgKipSUiA9IDAuOTY4KiogKEtUQyA5NSU6IDAuODYyIOKAkyAxLjA4NywgcCDiiYggMC41OSksIHPhu7Ega2jDoWMgYmnhu4d0IHNvIHbhu5tpIG5ow7NtIEhpZ2ggcuG6pXQgbmjhu48gdsOgIGPFqW5nICoqa2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KKipL4bq/dCBsdeG6rW46KiogS2jDtG5nIHTDrG0gdGjhuqV5IGLhurFuZyBjaOG7qW5nIHRo4buRbmcga8OqIGNobyB0aOG6pXkgbeG7qWMgxJHhu5kgduG6rW4gxJHhu5luZyB0aOG7gyBjaOG6pXQgKExvdyBob+G6t2MgTW9kZXJhdGUpIGzDoG0gdGhheSDEkeG7lWkgbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHNvIHbhu5tpIG5ow7NtIHbhuq1uIMSR4buZbmcgY2FvLiDEkGnhu4F1IG7DoHkgY8OzIHRo4buDIGNo4buLdSDhuqNuaCBoxrDhu59uZyBi4bufaSBjw6FjIHnhur91IHThu5EgZ8OieSBuaGnhu4V1IGtow6FjDQoNCiMjIyMgKiozLjQuNC4gUGjDom4gdMOtY2ggT2RkIFJhdGlvIGdp4buvYSBFeGVyY2lzZV9MZXZlbCB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKioNCg0KYGBge3J9DQpvZGRzcmF0aW8odGFibGVfSHlwZXJ0ZW5zaW9uX0V4ZXJjaXNlX0xldmVsKQ0KYGBgDQoNClBow6JuIHTDrWNoIE9kZHMgUmF0aW8gKE9SKSBuaOG6sW0gc28gc8Ohbmgga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGLhu4duaCBnaeG7r2EgY8OhYyBuaMOzbSBt4bupYyDEkeG7mSB24bqtbiDEkeG7mW5nIHRo4buDIGNo4bqldCwgduG7m2kgbmjDs20gaGlnaCDEkcaw4bujYyBjaOG7jW4gbMOgbSBuaMOzbSB0aGFtIGNoaeG6v3UuDQoNCkvhur90IHF14bqjIHBow6JuIHTDrWNoOg0KDQotIE5ow7NtICoqTG93KiogY8OzICoqT1IgPSAwLjg1KiogKEtUQyA5NSU6IDAuNjcxIOKAkyAxLjA3NywgcCDiiYggMC4xOCksIGNobyB0aOG6pXkgb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdGjhuqVwIGjGoW4ga2hv4bqjbmcgMTUlIHNvIHbhu5tpIG5ow7NtIHbhuq1uIMSR4buZbmcgY2FvICgqKkhpZ2gqKiksIG5oxrBuZyBz4buxIGtow6FjIGJp4buHdCAqKmtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqKiogKHAgPiAwLjA1KS4NCg0KLSBOaMOzbSAqKk1vZGVyYXRlKiogY8OzICoqT1IgPSAwLjkzKiogKEtUQyA5NSU6IDAuNzI1IOKAkyAxLjE5OSwgcCDiiYggMC41OSksIHPhu7Ega2jDoWMgYmnhu4d0IHNvIHbhu5tpIG5ow7NtIEhpZ2ggcuG6pXQgbmjhu48gdsOgIGPFqW5nICoqa2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKi4NCg0KKipL4bq/dCBsdeG6rW46KiogS2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiBjaG8gdGjhuqV5IG3hu6ljIMSR4buZIHbhuq1uIMSR4buZbmcgdGjhu4MgY2jhuqV0IChMb3cgaG/hurdjIE1vZGVyYXRlKSDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgc28gduG7m2kgbmjDs20gduG6rW4gxJHhu5luZyBjYW8uDQoNCioqRG8gxJHDsywgxJHhu4MgdGnhur9wIHThu6VjIHTDrG0ga2nhur9tIGPDoWMgeeG6v3UgdOG7kSBsacOqbiBxdWFuIGNo4bq3dCBjaOG6vSBoxqFuIMSR4bq/biBiaeG6v24gcGjhu6UgdGh14buZYywgdMO0aSBz4bq9IGNodXnhu4NuIHNhbmcgcGjDom4gdMOtY2ggY8OhYyBiaeG6v24ga2jDoWMqKg0KDQojIyAqKjMuNS4gTG/huqFpIHRodeG7kWMgc+G7rSBk4bulbmcgdMOhYyDEkeG7mW5nIMSR4bq/biBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwKioNCg0KVHJvbmcgcGjhuqduIG7DoHksIGNow7puZyB0YSBz4bq9IHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGxv4bqhaSB0aHXhu5FjIGLhu4duaCBuaMOibiDEkWFuZyBz4butIGThu6VuZyB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3QuIEJp4bq/biDEkeG7mWMgbOG6rXAgbMOgIE1lZGljYXRpb24gKHbhu5tpIGPDoWMgbG/huqFpIHRodeG7kWM6IE5vbmU6IEtow7RuZywgT3RoZXIsIERpdXJldGljLCBCZXRhIEJsb2NrZXIsIEFDRSBJbmhpYml0b3IpIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyBsw6AgSGFzX0h5cGVydGVuc2lvbiAoY8OzIGhv4bq3YyBraMO0bmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwKS4NCg0KIyMjIyAqKjMuNS4xIELhuqNuZyB04bqnbiBz4buRIC0gdOG6p24gc3XhuqV0IGNobyBiaeG6v24gTWVkaWNhdGlvbioqDQoNCsSQ4bqndSB0acOqbiwgY2jDum5nIHRhIHPhur0gbOG6rXAgYuG6o25nIHThuqduIHPhu5EgY2hvIGJp4bq/biBNZWRpY2F0aW9uIMSR4buDIGhp4buDdSByw7Ugc+G7sSBwaMOibiBi4buRIGPhu6dhIGPDoWMgbmjDs20gYuG7h25oIG5ow6JuIHRoZW8gbG/huqFpIHRodeG7kWMgxJFp4buBdSB0cuG7iy4NCg0KYGBge3J9DQp0YWJfTWVkaWNhdGlvbiA8LSB0YWJsZShkYXRhJE1lZGljYXRpb24pDQp0YWJfTWVkaWNhdGlvbg0KYGBgDQoNCkvhur90IHF14bqjIHRyw6puIHPhur0gxJHGsOG7o2MgdHLhu7FjIHF1YW4gaMOzYSBi4bqxbmcgYmnhu4N1IMSR4buTIGPhu5l0IMSR4buDIHNvIHPDoW5oIHPhu5EgbMaw4bujbmcgZ2nhu69hIGPDoWMgbmjDs20uDQoNCmBgYHtyfQ0KYmFycGxvdCh0YWJfTWVkaWNhdGlvbiwNCiAgICAgICAgbWFpbiA9ICJCaeG7g3UgxJHhu5MgdOG6p24gc+G7kSBjw6FjIGxv4bqhaSB0aHXhu5FjIiwNCiAgICAgICAgeGxhYiA9ICJMb2FpIHRodeG7kWMgc+G7rSBk4bulbmciLA0KICAgICAgICB5bGFiID0gIlThuqduIHPhu5EiLA0KICAgICAgICBjb2wgPSBjKCJza3libHVlIiwgImxpZ2h0Z3JlZW4iLCAibGlnaHRjb3JhbCIsICJwbHVtIiksDQogICAgICAgIGJvcmRlciA9ICJ3aGl0ZSIsDQogICAgICAgIHlsaW0gPSBjKDAsIG1heCh0YWJfTWVkaWNhdGlvbikgKyA0MCkpIC0+IGJwX01lZGljYXRpb24NCg0KdGV4dCh4ID0gYnBfTWVkaWNhdGlvbiwgeSA9IHRhYl9NZWRpY2F0aW9uICsgMjAsIGxhYmVscyA9IHRhYl9NZWRpY2F0aW9uKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIFRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EgdsOgIGJp4buDdSDEkeG7kywgdGEgdGjhuqV5IHLhurFuZyB0cm9uZyB04buVbmcgc+G7kSAxOTg1IGLhu4duaCBuaMOibjoNCg0KICAtIE5ow7NtIGtow7RuZyBz4butIGThu6VuZyB0aHXhu5FjIChOb25lKSBjaGnhur9tIHThu7cgbOG7hyBs4bubbiBuaOG6pXQgKDc5OSB0csaw4budbmcgaOG7o3ApLCBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiDEkeG7kWkgdMaw4bujbmcga2jhuqNvIHPDoXQgY2jGsGEgaG/hurdjIGtow7RuZyDEkWnhu4F1IHRy4buLIGLhurFuZyBjw6FjIGxv4bqhaSB0aHXhu5FjIG7DoHkuDQoNCiAgLSBUcm9uZyBjw6FjIG5ow7NtIGTDuW5nIHRodeG7kWMsIEJldGEgQmxvY2tlciBsw6AgbG/huqFpIMSRxrDhu6NjIHPhu60gZOG7pW5nIHBo4buVIGJp4bq/biBuaOG6pXQgKDQxMiB0csaw4budbmcgaOG7o3ApLCB0aeG6v3AgdGhlbyBsw6AgQUNFIEluaGliaXRvciAoMzIzKSwgRGl1cmV0aWMgKDI0NSkgdsOgIG5ow7NtIHRodeG7kWMga2jDoWMgKE90aGVyOiAyMDYpLg0KDQogIC0gUGjDom4gYuG7kSBuw6B5IGfhu6NpIMO9IHLhurFuZyDEkWnhu4F1IHRy4buLIGLhurFuZyB0aHXhu5FjIGjhuqEgaHV54bq/dCDDoXAgY2jGsGEgxJHhu5NuZyDEkeG7gXU7IHBo4bqnbiBs4bubbiBuZ8aw4budaSB0aGFtIGdpYSBjaMawYSBjYW4gdGhp4buHcCBi4bqxbmcgdGh14buRYyBob+G6t2MgxJFhbmcg4bufIGdpYWkgxJFv4bqhbiB0aeG7gW4gxJFp4buBdSB0cuG7iy4NCiAgDQpUaeG6v3AgdGhlbywgY2jDum5nIHRhIHPhur0gdMOtbmggdOG7tyBs4buHIHBo4bqnbiB0csSDbSB2w6AgduG6vSBiaeG7g3UgxJHhu5MgdHLDsm4gxJHhu4MgdGjhu4MgaGnhu4duIHLDtSBoxqFuIHPhu7EgcGjDom4gYuG7kSB0xrDGoW5nIMSR4buRaSBnaeG7r2EgY8OhYyBuaMOzbS4NCg0KDQpgYGB7cn0NCnBsb3RfcGllKGRhdGEsICJNZWRpY2F0aW9uIiwgIlBow6JuIExv4bqhaSBUaHXhu5FjIMSRYW5nIHPhu60gZOG7pW5nIikNCmBgYA0KDQpCaeG7g3UgxJHhu5MgaMOsbmggdHLDsm4gdGjhu4MgaGnhu4duIHLDtSBz4buxIHBow6JuIGLhu5EgY8OhYyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLICBj4bunYSBi4buHbmggbmjDom4gY2FvIGh1eeG6v3Qgw6FwLiBUcm9uZyDEkcOzOg0KDQogIC0gTmjDs20g4oCcTm9uZeKAnSBjaGnhur9tIHThu7cgbOG7hyBjYW8gbmjhuqV0ICg0MC4zJSksIHBo4bqjbiDDoW5oIHLhurFuZyBwaOG6p24gbOG7m24gxJHhu5FpIHTGsOG7o25nIGto4bqjbyBzw6F0IGNoxrBhIGhv4bq3YyBraMO0bmcgxJFp4buBdSB0cuG7iyBi4bqxbmcgdGh14buRYyBo4bqhIGh1eeG6v3Qgw6FwLg0KDQogIC0gVHJvbmcgbmjDs20gc+G7rSBk4bulbmcgdGh14buRYywgQmV0YSBCbG9ja2VyICgyMC44JSkgbMOgIGxv4bqhaSDEkcaw4bujYyBkw7luZyBuaGnhu4F1IG5o4bqldCwgdGnhur9wIHRoZW8gbMOgIEFDRSBJbmhpYml0b3IgKDE2LjMlKSB2w6AgRGl1cmV0aWMgKDEyLjMlKS4NCg0KICAtIE5ow7NtIHRodeG7kWMga2jDoWMgKE90aGVyOiAxMC40JSkgY2hp4bq/bSB04bu3IGzhu4cgdGjhuqVwLCBjaG8gdGjhuqV5IMOtdCBuZ8aw4budaSBz4butIGThu6VuZyBjw6FjIGxv4bqhaSB0aHXhu5FjIG5nb8OgaSBiYSBuaMOzbSBjaMOtbmggdHLDqm4uDQoNCk5ow6xuIGNodW5nLCDEkWEgc+G7kSBi4buHbmggbmjDom4gY8OzIHPhu60gZOG7pW5nIHRodeG7kWMgdsOgIGPFqW5nIGPDsyBraMOhIG5oaeG7gXUgbmfGsOG7nWkga2jDtG5nIHPhu60gZOG7pW5nIHRodeG7kWMNCg0KIyMjIyAqKjMuNS4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gaGFpIGJp4bq/biBNZWRpY2F0aW9uIHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAqKg0KDQpDaMO6bmcgdGEgc+G6vSBs4bqtcCBi4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgaGFpIGJp4bq/biBNZWRpY2F0aW9uIHbDoCBIYXNfSHlwZXJ0ZW5zaW9uIMSR4buDIHhlbSB4w6l0IG3hu5FpIHF1YW4gaOG7hyBzxqEgYuG7mSBnaeG7r2EgY2jDum5nLg0KDQpgYGB7cn0NCiMgQuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCBt4bqvYyBjYW8gaHV54bq/dCDDoXANCnRhYmxlX2Nhb2h1eWV0YXBfTWVkaWNhdGlvbiA8LSB0YWJsZShkYXRhJE1lZGljYXRpb24sIGRhdGEkSGFzX0h5cGVydGVuc2lvbikNCg0KIyBUaMOqbSBow6BuZyB2w6AgY+G7mXQgdOG7lW5nDQphZGRtYXJnaW5zKHRhYmxlX2Nhb2h1eWV0YXBfTWVkaWNhdGlvbikNCmBgYA0KKipOaOG6rW4geMOpdCoqDQoNClBow6JuIGLhu5EgdOG7tyBs4buHIGNhbyBodXnhur90IMOhcCB0aGVvIG5ow7NtIHRodeG7kWMNCg0KLSBOaMOzbSBCZXRhIEJsb2NrZXIgdsOgIERpdXJldGljIGPDsyB04bu3IGzhu4cgbmfGsOG7nWkgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIChZZXMvU3VtKSB0xrDGoW5nIMSR4buRaSBjYW8gKOKJiCA1MiUgdsOgIDU3JSkuDQoNCi0gTmjDs20gQUNFIEluaGliaXRvciBn4bqnbiBuaMawIGPDom4gYuG6sW5nICjiiYggNTAlKS4NCg0KLSBOaMOzbSBOb25lIChraMO0bmcgZMO5bmcgdGh14buRYykgduG6q24gY8OzIHThu7cgbOG7hyBt4bqvYyBjYW8gKOKJiCA1MSUpLCBjaG8gdGjhuqV5IG3hu5l0IGLhu5kgcGjhuq1uIGzhu5tuIG5nxrDhu51pIGNoxrBhIMSRaeG7gXUgdHLhu4sgbmjGsG5nIHbhuqtuIMSRYW5nIHRyb25nIHTDrG5oIHRy4bqhbmcgdMSDbmcgaHV54bq/dCDDoXAuDQoNCi0gTmjDs20gT3RoZXIgY8OzIHThu7cgbOG7hyB0xrDGoW5nIHThu7EgKOKJiCA1MSUpLg0KDQrEkOG7gyBsw6BtIHLDtSBoxqFuIG5o4bqtbiDEkeG7i25oIHRyw6puLCBjaMO6bmcgdGEgc+G6vSBz4butIGThu6VuZyBiaeG7g3UgxJHhu5MgY+G7mXQgbmjDs20uDQoNCmBgYHtyfQ0KIyBDaHV54buDbiBi4bqjbmcgY2jDqW8gdGjDoG5oIGRhdGEgZnJhbWUNCmRmX3Bsb3RfTWVkaWNhdGlvbiA8LSBhcy5kYXRhLmZyYW1lKHRhYmxlX2Nhb2h1eWV0YXBfTWVkaWNhdGlvbikNCmNvbG5hbWVzKGRmX3Bsb3RfTWVkaWNhdGlvbikgPC0gYygiTWVkaWNhdGlvbiIsICJIYXNfSHlwZXJ0ZW5zaW9uIiwgIkNvdW50IikNCg0KIyDEkOG6o20gYuG6o28gdGjhu6kgdOG7sSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCB0aGVvIGzDom0gc8OgbmcNCmRmX3Bsb3RfTWVkaWNhdGlvbiRNZWRpY2F0aW9uIDwtIGZhY3RvcihkZl9wbG90X01lZGljYXRpb24kTWVkaWNhdGlvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIkFDRSBJbmhpYml0b3IiLCAiQmV0YSBCbG9ja2UiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRpdXJldGljIiwgIk5vbmUiLCAiT3RoZXIiKSkNCg0KIyBW4bq9IGJp4buDdSDEkeG7kyBj4buZdCB04bu3IGzhu4cNCmxpYnJhcnkoZ2dwbG90MikNCmdncGxvdChkZl9wbG90X01lZGljYXRpb24sIGFlcyh4ID0gTWVkaWNhdGlvbiwgeSA9IENvdW50LCBmaWxsID0gSGFzX0h5cGVydGVuc2lvbikpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIpICsgICMgdOG7tyBs4buHIHBo4bqnbiB0csSDbSB0aGVvIGPhu5l0DQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KCkpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygiTm8iID0gImxpZ2h0Ymx1ZSIsICJZZXMiID0gInBpbmsiKSwNCiAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiS2jDtG5nIG3huq9jIGNhbyBodXnhur90IMOhcCIsICJt4bqvYyBjYW8gaHV54bq/dCDDoXAiKSkgKw0KICBsYWJzKHRpdGxlID0gIlThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdGhlbyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLIiwNCiAgICAgICB4ID0gIkxv4bqhaSB0aHXhu5FjIHPhu60gZOG7pW5nIiwNCiAgICAgICB5ID0gIlThu7cgbOG7hyAoJSkiLA0KICAgICAgIGZpbGwgPSAiVMOsbmggdHLhuqFuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAiKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTMpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkNCmBgYA0KDQotIEJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IHThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY+G7p2EgY8OhYyBi4buHbmggbmjDom4gc+G7rSBk4bulbmcgdGh14buRYyB4b2F5IHF1YW5oIG3hu6ljIDUwJS4gQ+G7pSB0aOG7gzoNCg0KLSDEkMOhbmcgY2jDuiDDvSwgbmjDs20gRGl1cmV0aWMgY8OzIHThu7cgbOG7hyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIG5o4bqldCB0cm9uZyBjw6FjIGxv4bqhaSB0aHXhu5FjLiBWw6AgbmjDs20gc+G7rSBk4bulbmcgdGh14buRYyBBQ0UgSW5oaWJpdG9yIGPDsyB04bu3IGzhu4cgbeG6r2MgYuG7h25oIHRo4bqlcCBuaOG6pXQNCg0KIyMjIyAqKjMuNS4zLiBQaMOibiB0w61jaCBSZWxhdGl2ZSBSaXNrIGdp4buvYSBNZWRpY2F0aW9uIHbDoCBraOG6oyBuxINuZyBt4bqvYyBi4buHbmgqKg0KDQpDaMO6bmcgdGEgc+G6vSB0w61uaCB0b8OhbiBOZ3V5IGPGoSB0xrDGoW5nIMSR4buRaSAoUlIpLCBs4bqleSBuaMOzbSBBQ0UgSW5oaWJpdG9yIGzDoG0gbmjDs20gdGhhbSBjaGnhur91Lg0KDQpgYGB7cn0NCnJpc2tyYXRpbyh0YWJsZV9jYW9odXlldGFwX01lZGljYXRpb24pDQpgYGANCg0KVHJvbmcgbmdoacOqbiBj4bupdSBuw6B5LCBuaMOzbSBBQ0UgSW5oaWJpdG9yIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSDEkeG7gyDEkcOhbmggZ2nDoSBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAgYuG7h25oIOG7nyBjw6FjIG5ow7NtIMSRw6FwIOG7qW5nIMSRaeG7gXUgdHLhu4sga2jDoWMgbmhhdS4gVmnhu4djIHBow6JuIHTDrWNoIHThu4kgc+G7kSBuZ3V5IGPGoSAoUmVsYXRpdmUgUmlzayDigJMgUlIpIGNobyBwaMOpcCBzbyBzw6FuaCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgZ2nhu69hIGPDoWMgbmjDs20gbeG7mXQgY8OhY2ggdHLhu7FjIHF1YW4gdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCg0KKipOaMOzbSBCZXRhIEJsb2NrZXIqKjoNCg0KUlIgPSAxLjA0ICg5NSUgQ0k6IDAuOTDigJMxLjIwKSwgcCDiiYggMC41Ny4NCg0KTmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIGtob+G6o25nIDQlIHNvIHbhu5tpIG5ow7NtIEFDRSBJbmhpYml0b3IsIG5oxrBuZyBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KKipOaMOzbSBEaXVyZXRpYzoqKg0KDQpSUiA9IDEuMTQgKDk1JSBDSTogMC45OOKAkzEuMzMpLCBwIOKJiCAwLjEwLg0KDQpOZ3V5IGPGoSBjYW8gaMahbiAxNCUgc28gduG7m2kgQUNFIEluaGliaXRvci4gTeG6t2MgZMO5IHh1IGjGsOG7m25nIHTEg25nIHLDtSBoxqFuLCBuaMawbmcgduG6q24gY2jGsGEgxJHhuqF0IMO9IG5naMSpYSB0aOG7kW5nIGvDqiAocCA+IDAuMDUpLg0KDQoqKk5ow7NtIE5vbmUgKGtow7RuZyBkw7luZyB0aHXhu5FjKToqKg0KDQpSUiA9IDEuMDMgKDk1JSBDSTogMC45MeKAkzEuMTgpLCBwIOKJiCAwLjYwLg0KDQpOZ3V5IGPGoSBn4bqnbiBuaMawIGtow7RuZyBraMOhYyBiaeG7h3Qgc28gduG7m2kgQUNFIEluaGliaXRvci4NCg0KKipOaMOzbSBPdGhlcjoqKg0KDQpSUiA9IDEuMDMgKDk1JSBDSTogMC44N+KAkzEuMjMpLCBwIOKJiCAwLjcyLg0KDQpOZ3V5IGPGoSB0xrDGoW5nIHThu7EgbmjDs20gQUNFIEluaGliaXRvciB2w6Aga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCg0KIyMjIyAqKjMuNS40LiBQaMOibiB0w61jaCBPZGQgUmF0aW8gZ2nhu69hIE1lZGljYXRpb24gdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCoqDQoNCmBgYHtyfQ0Kb2Rkc3JhdGlvKHRhYmxlX2Nhb2h1eWV0YXBfTWVkaWNhdGlvbikNCmBgYA0KDQpQaMOibiB0w61jaCBPZGRzIFJhdGlvIChPUikgbmjhurFtIHNvIHPDoW5oIGto4bqjIG7Eg25nIG3huq9jIGNhbyBodXnhur90IMOhcCBi4buHbmggZ2nhu69hIGPDoWMgbmjDs20gdGh14buRYyBraMOhYyBuaGF1LCB24bubaSBuaMOzbSBBQ0UgSW5oaWJpdG9yIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KTmjDs20gQmV0YSBCbG9ja2VyDQpSUiA9IDEuMDQgKDk1JSBDSTogMC45MOKAkzEuMjApLCBwIOKJiCAwLjU3Lg0KDQpPUiA9IDEuMDkgKDk1JSBDSTogMC44MeKAkzEuNDYpLCBwIOKJiCAwLjU3Lg0KDQpD4bqjIFJSIHbDoCBPUiDEkeG7gXUgY2hvIHRo4bqleSBuZ3V5IGPGoSBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4ga2hv4bqjbmcgNOKAkzklIHNvIHbhu5tpIEFDRSBJbmhpYml0b3IsIG5oxrBuZyBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KKipOaMOzbSBEaXVyZXRpYyoqDQpSUiA9IDEuMTQgKDk1JSBDSTogMC45OOKAkzEuMzMpLCBwIOKJiCAwLjEwLg0KDQpPUiA9IDEuMzIgKDk1JSBDSTogMC45NOKAkzEuODQpLCBwIOKJiCAwLjEwLg0KDQpDw7MgeHUgaMaw4bubbmcgdMSDbmcgbmd1eSBjxqEgY2FvIGh1eeG6v3Qgw6FwIG5oaeG7gXUgbmjhuqV0ICgxNOKAkzMyJSksIG5oxrBuZyBjaMawYSDEkeG6oXQgw70gbmdoxKlhIHRo4buRbmcga8OqIChwID4gMC4wNSkuDQoNCioqTmjDs20gTm9uZSAoa2jDtG5nIGTDuW5nIHRodeG7kWMpKioNClJSID0gMS4wMyAoOTUlIENJOiAwLjkx4oCTMS4xOCksIHAg4omIIDAuNjAuDQoNCk9SID0gMS4wNyAoOTUlIENJOiAwLjgz4oCTMS4zOSksIHAg4omIIDAuNjAuDQoNCk5ndXkgY8ahIGfhuqduIG5oxrAgdMawxqFuZyDEkcawxqFuZyB24bubaSBuaMOzbSBBQ0UgSW5oaWJpdG9yLg0KDQoqKk5ow7NtIE90aGVyKioNClJSID0gMS4wMyAoOTUlIENJOiAwLjg34oCTMS4yMyksIHAg4omIIDAuNzIuDQoNCk9SID0gMS4wNyAoOTUlIENJOiAwLjc14oCTMS41MSksIHAg4omIIDAuNzIuDQoNCktow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KDQoqKkvhur90IEx14bqtbioqDQoNClBow6JuIHTDrWNoIGJhbiDEkeG6p3UgY2hvIHRo4bqleSBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogduG7gSB04bu3IGzhu4cgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGdp4buvYSBjw6FjIG5ow7NtIHRodeG7kWMgKHAgPiAwLjA1IOG7nyB04bqldCBj4bqjIGPDoWMgbmjDs20pLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBsb+G6oWkgdGh14buRYyBoaeG7h24gdOG6oWkgY8OzIHRo4buDIGtow7RuZyBwaOG6o2kgbMOgIHnhur91IHThu5EgZOG7sSBiw6FvIGNow61uaCB0cm9uZyBi4buZIGThu68gbGnhu4d1IG7DoHkuIA0KDQpEbyDEkcOzLCDEkeG7gyB0aeG6v3AgdOG7pWMgdMOsbSBraeG6v20gY8OhYyB54bq/dSB04buRIGxpw6puIHF1YW4gY2jhurd0IGNo4bq9IGjGoW4gxJHhur9uIGJp4bq/biBwaOG7pSB0aHXhu5ljLCB0w7RpIHPhur0gY2h1eeG7g24gc2FuZyBwaMOibiB0w61jaCBjw6FjIGJp4bq/biBraMOhYw0KDQoNCiMjICoqMy42LiBUaeG7gW4gc+G7rSBodXnhur90IMOhcCB0w6FjIMSR4buZbmcgxJHhur9uIGto4bqjIG7Eg25nIGNhbyBodXnhur90IMOhcCBi4buHbmgqKg0KDQpUcm9uZyBwaOG6p24gbsOgeSwgY2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY+G7p2EgYuG7h25oIG5ow6JuICB2w6Aga2jhuqMgbsSDbmcgY2FvIGh1eeG6v3Qgw6FwLiBCaeG6v24gxJHhu5ljIGzhuq1wIGzDoCBCUF9IaXN0b3J5ICh24bubaSAzIG3hu6ljIMSR4buZOiAiTm9ybWFsIjogQsOsbmggdGjGsOG7nW5nICwiSHlwZXJ0ZW5zaW9uIjogY2FvIGh1eeG6v3Qgw6FwLCAiUHJlaHlwZXJ0ZW5zaW9uIjogdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwKSB2w6AgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIEhhc19IeXBlcnRlbnNpb24gKGPDsyBob+G6t2Mga2jDtG5nIGNhbyBodXnhur90IMOhcCkuDQoNCiMjIyMgKiozLjYuMSBC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCBjaG8gYmnhur9uIEJQX0hpc3RvcnkqKg0KDQrEkOG6p3UgdGnDqm4sIGNow7puZyB0YSBz4bq9IGzhuq1wIGLhuqNuZyB04bqnbiBz4buRIGNobyBiaeG6v24gQlBfSGlzdG9yeSDEkeG7gyBoaeG7g3UgcsO1IHPhu7EgcGjDom4gYuG7kSBj4bunYSBjw6FjIG5ow7NtIGLhu4duaCBuaMOibiB0aGVvIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIMSRaeG7gXUgdHLhu4suDQoNCmBgYHtyfQ0KdGFiX0JQX0hpc3RvcnkgPC0gdGFibGUoZGF0YSRCUF9IaXN0b3J5KQ0KdGFiX0JQX0hpc3RvcnkNCmBgYA0KDQpL4bq/dCBxdeG6oyB0csOqbiBz4bq9IMSRxrDhu6NjIHRy4buxYyBxdWFuIGjDs2EgYuG6sW5nIGJp4buDdSDEkeG7kyBj4buZdCDEkeG7gyBzbyBzw6FuaCBz4buRIGzGsOG7o25nIGdp4buvYSBjw6FjIG5ow7NtLg0KDQpgYGB7cn0NCmJhcnBsb3QodGFiX0JQX0hpc3RvcnksDQogICAgICAgIG1haW4gPSAiQmnhu4N1IMSR4buTIHThuqduIHPhu5EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgIiwNCiAgICAgICAgeGxhYiA9ICJ0aeG7gW4gc+G7rSBodXnhur90IMOhcCIsDQogICAgICAgIHlsYWIgPSAiVOG6p24gc+G7kSIsDQogICAgICAgIGNvbCA9IGMoInNreWJsdWUiLCAibGlnaHRncmVlbiIsICJsaWdodGNvcmFsIiwgInBsdW0iKSwNCiAgICAgICAgYm9yZGVyID0gIndoaXRlIiwNCiAgICAgICAgeWxpbSA9IGMoMCwgbWF4KHRhYl9CUF9IaXN0b3J5KSArIDQwKSkgLT4gYnBfQlBfSGlzdG9yeQ0KDQp0ZXh0KHggPSBicF9CUF9IaXN0b3J5LCB5ID0gdGFiX0JQX0hpc3RvcnkgKyAxNSwgbGFiZWxzID0gdGFiX0JQX0hpc3RvcnkpDQpgYGANCg0KKipC4bqjbmcgZOG7i2NoIHRodeG6rXQqKg0KDQp8IHRp4buBbiBz4butIGh1eeG6v3Qgw6FwICh0aeG6v25nIEFuaCkgICAgIHwgVGnhur9uZyBWaeG7h3QgdMawxqFuZyDhu6luZyAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IEh5cGVydGVuc2lvbiAgICAgICAgICAgICAgICAgICAgIHwgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvICAgICAgICB8DQp8IE5vcm1hbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgQsOsbmggdGjGsOG7nW5nICAgICAgICAgICAgICB8DQp8IFByZWh5cGVydGVuc2lvbiAgICAgICAgICAgICAgICAgIHwgdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwICAgICAgICAgIHwNCg0KYGBge3J9DQpwbG90X3BpZShkYXRhLCAiQlBfSGlzdG9yeSIsICJQaMOibiBMb+G6oWkgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAiKQ0KYGBgDQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIFRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EgdsOgIGJp4buDdSDEkeG7kywgdGEgdGjhuqV5IHLhurFuZyB0cm9uZyB04buVbmcgc+G7kSAxOTg1IGLhu4duaCBuaMOibjoNCg0KS+G6v3QgcXXhuqMgcGjDom4gYuG7kSB0w6xuaCB0cuG6oW5nIGh1eeG6v3Qgw6FwIGNobyB0aOG6pXkgdHJvbmcgdOG7lW5nIHPhu5EgbeG6q3Uga2jhuqNvIHPDoXQsIDQwLDElIMSR4buRaSB0xrDhu6NuZyBjw7MgaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nICg1NjkgbmfGsOG7nWkpLCB0cm9uZyBraGkgMzEsMiUgcsahaSB2w6BvIG5ow7NtIHRp4buBbiB0xINuZyBodXnhur90IMOhcCAoNjIwIG5nxrDhu51pKSB2w6AgMjgsNyUgKDU2OSBuZ8aw4budaSkgxJHDoyBt4bqvYyB0xINuZyBodXnhur90IMOhcC4gVOG7tyBs4buHIHRp4buBbiB0xINuZyBodXnhur90IMOhcCBraMOhIGNhbywgcGjhuqNuIMOhbmggbeG7mXQgYuG7mSBwaOG6rW4gxJHDoW5nIGvhu4MgZMOibiBz4buRIMSRYW5nIOG7nyBnaWFpIMSRb+G6oW4gbmd1eSBjxqEsIGPDsyBraOG6oyBuxINuZyB0aeG6v24gdHJp4buDbiB0aMOgbmggdMSDbmcgaHV54bq/dCDDoXAgdGjhu7FjIHPhu7EgbuG6v3Uga2jDtG5nIGPDsyBjw6FjIGJp4buHbiBwaMOhcCBjYW4gdGhp4buHcCBr4buLcCB0aOG7nWkgduG7gSBs4buRaSBz4buRbmcgdsOgIGRpbmggZMaw4buhbmcuIFPhu5EgbmfGsOG7nWkgxJHDoyBi4buLIHTEg25nIGh1eeG6v3Qgw6FwIChn4bqnbiAxLzMgbeG6q3UgbmdoacOqbiBj4bupdSkgY8WpbmcgbMOgIG3hu5l0IGNvbiBz4buRIMSRw6FuZyBsxrB1IMO9LCBjaG8gdGjhuqV5IHbhuqVuIMSR4buBIG7DoHkgbMOgIG3hu5l0IHRow6FjaCB0aOG7qWMgc+G7qWMga2jhu49lIGPhu5luZyDEkeG7k25nLg0KICANClRp4bq/cCB0aGVvLCBjaMO6bmcgdGEgc+G6vSB0w61uaCB04bu3IGzhu4cgcGjhuqduIHRyxINtIHbDoCB24bq9IGJp4buDdSDEkeG7kyB0csOybiDEkeG7gyB0aOG7gyBoaeG7h24gcsO1IGjGoW4gc+G7sSBwaMOibiBi4buRIHTGsMahbmcgxJHhu5FpIGdp4buvYSBjw6FjIG5ow7NtLg0KDQoNCiMjIyMgKiozLjYuMi4gVGjhu5FuZyBrw6ogbcO0IHThuqMgY2hvIGhhaSBiaeG6v24gQlBfSGlzdG9yeSB2w6Aga2jhuqMgbsSDbmcgY2FvIGh1eeG6v3Qgw6FwIGLhu4duaCoqDQoNCkNow7puZyB0YSBz4bq9IGzhuq1wIGLhuqNuZyB04bqnbiBz4buRIGNow6lvIGdp4buvYSBoYWkgYmnhur9uIEJQX0hpc3RvcnkgdsOgIEhhc19IeXBlcnRlbnNpb24gxJHhu4MgeGVtIHjDqXQgbeG7kWkgcXVhbiBo4buHIHPGoSBi4buZIGdp4buvYSBjaMO6bmcuDQoNCmBgYHtyfQ0KIyBC4bqjbmcgdOG6p24gc+G7kSBjaMOpbyBnaeG7r2EgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIGNhbyBodXnhur90IMOhcA0KdGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5IDwtIHRhYmxlKGRhdGEkQlBfSGlzdG9yeSwgZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uKQ0KDQojIFRow6ptIGjDoG5nIHbDoCBj4buZdCB04buVbmcNCmFkZG1hcmdpbnModGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KYGBgDQoNCi0gSHlwZXJ0ZW5zaW9uICh0aeG7gW4gc+G7rSBjYW8gaHV54bq/dCDDoXApIDogNTY5IGLhu4duaCBuaMOibiwgY8OzIMSR4bq/biA1MjggY2EgY2FvIGh1eeG6v3Qgw6FwIOKGkiBuZ3V5IGPGoSBy4bqldCBjYW8uDQoNCi0gTm9ybWFsOiA3OTYgYuG7h25oIG5ow6JuLCAyODYgY2EgY2FvIGh1eeG6v3Qgw6FwIOKGkiBuZ3V5IGPGoSB0cnVuZyBiw6xuaC4NCg0KLSBQcmVoeXBlcnRlbnNpb246IDYyMCBi4buHbmggbmjDom4sIDIxOCBjYSBjYW8gaHV54bq/dCDDoXAg4oaSIG5ndXkgY8ahIHRydW5nIGLDrG5oLg0KDQotIFN0cnVjdHVyYWwgSW5jb21wbGV0ZTogOTEgYuG7h25oIG5ow6JuLCA4OSBjYSBjYW8gaHV54bq/dCDDoXAg4oaSIG5ndXkgY8ahIHLhuqV0IGNhby4NCg0KKipL4bq/dCBsdeG6rW46KiogdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iyBsacOqbiBxdWFuIHLDtSBy4buHdCDEkeG6v24ga2jhuqMgbsSDbmcgY2FvIGh1eeG6v3Qgw6FwLg0KDQoNCsSQ4buDIGzDoG0gcsO1IGjGoW4gbmjhuq1uIMSR4buLbmggdHLDqm4sIGNow7puZyB0YSBz4bq9IHPhu60gZOG7pW5nIGJp4buDdSDEkeG7kyBj4buZdCBuaMOzbS4NCg0KYGBge3J9DQojIENodXnhu4NuIGLhuqNuZyBjaMOpbyB0aMOgbmggZGF0YSBmcmFtZQ0KZGZfcGxvdF9CUF9IaXN0b3J5IDwtIGFzLmRhdGEuZnJhbWUodGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KY29sbmFtZXMoZGZfcGxvdF9CUF9IaXN0b3J5KSA8LSBjKCJCUF9IaXN0b3J5IiwgIkhhc19IeXBlcnRlbnNpb24iLCAiQ291bnQiKQ0KDQojIMSQ4bqjbSBi4bqjbyB0aOG7qSB04buxIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHRoZW8gbMOibSBzw6BuZw0KZGZfcGxvdF9CUF9IaXN0b3J5JEJQX0hpc3RvcnkgPC0gZmFjdG9yKGRmX3Bsb3RfQlBfSGlzdG9yeSRCUF9IaXN0b3J5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiSHlwZXJ0ZW5zaW9uIiwgIk5vcm1hbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlaHlwZXJ0ZW5zaW9uIikpDQoNCiMgVuG6vSBiaeG7g3UgxJHhu5MgY+G7mXQgdOG7tyBs4buHDQpsaWJyYXJ5KGdncGxvdDIpDQpnZ3Bsb3QoZGZfcGxvdF9CUF9IaXN0b3J5LCBhZXMoeCA9IEJQX0hpc3RvcnksIHkgPSBDb3VudCwgZmlsbCA9IEhhc19IeXBlcnRlbnNpb24pKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImZpbGwiKSArICAjIHThu7cgbOG7hyBwaOG6p24gdHLEg20gdGhlbyBj4buZdA0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdCgpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIk5vIiA9ICJsaWdodGJsdWUiLCAiWWVzIiA9ICJwaW5rIiksDQogICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIktow7RuZyBjYW8gaHV54bq/dCDDoXAiLCAiY2FvIGh1eeG6v3Qgw6FwIikpICsNCiAgbGFicyh0aXRsZSA9ICJU4bu3IGzhu4cgY2FvIGh1eeG6v3Qgw6FwIHRoZW8gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iyIsDQogICAgICAgeCA9ICJ0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLIiwNCiAgICAgICB5ID0gIlThu7cgbOG7hyAoJSkiLA0KICAgICAgIGZpbGwgPSAiVMOsbmggdHLhuqFuZyBjYW8gaHV54bq/dCDDoXAiKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTMpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSAyNSwgaGp1c3QgPSAxKSkNCmBgYA0KDQotIEJp4buDdSDEkeG7kyBjaG8gdGjhuqV5IHThu7cgbOG7hyBjYW8gaHV54bq/dCDDoXAgYuG7h25oIHTEg25nIGThuqduIHRoZW8gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgxJFp4buBdSB0cuG7iy4gQ+G7pSB0aOG7gzoNCg0KICAtIE5ow7NtIEh5cGVydGVuc2lvbiAoIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGNhbykgZ+G6p24gbmjGsCBz4bq9IG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgDQogIC0gTmjDs20gTm9ybWFsIGPDsyB04bu3IGzhu4cgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCBraG/huqNuZyAzNSUuDQoNCiAgLSBOaMOzbSBQcmVoeXBlcnRlbnNpb24gKHRp4buBbiB0xINuZyBodXnhur90IMOhcCkgY8OzIHThu7cgbOG7hyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGtob+G6o25nIDM1JS4NCg0KLSDEkMOhbmcgY2jDuiDDvSwgbmjDs20gSHlwZXJ0ZW5zaW9uIGPDsyB04bu3IGzhu4cgY2FvIGh1eeG6v3Qgw6FwIGfhuqduIG5oxrAgdHV54buHdCDEkeG7kWkuDQoNCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHRp4buBbiBz4butIGh1eeG6v3Qgw6FwICBjw7MgbGnDqm4gcXVhbiByw7UgcuG7h3QgxJHhur9uIG5ndXkgY8ahIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAsIHRyb25nIMSRw7MgdGnhu4FuIHPhu60gdMSDbmcgaHV54bq/dCDDoXAgbMOgIHnhur91IHThu5Egbmd1eSBjxqEgY2FvIG5o4bqldC4NCg0KDQojIyMjICoqMy42LjMuIFBow6JuIHTDrWNoIFJlbGF0aXZlIFJpc2sgZ2nhu69hIEJQX0hpc3RvcnkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCoqDQoNCkNow7puZyB0YSBz4bq9IHTDrW5oIHRvw6FuIE5ndXkgY8ahIHTGsMahbmcgxJHhu5FpIChSUiksIGzhuqV5IG5ow7NtIEh5cGVydGVuc2lvbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dS4NCg0KYGBge3J9DQpyaXNrcmF0aW8odGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KYGBgDQoNClRyb25nIG5naGnDqm4gY+G7qXUgbsOgeSwgbmjDs20gSHlwZXJ0ZW5zaW9uIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSDEkeG7gyDEkcOhbmggZ2nDoSBuZ3V5IGPGoSBjYW8gaHV54bq/dCDDoXAgYuG7h25oIOG7nyBjw6FjIG5ow7NtIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwLiBWaeG7h2MgcGjDom4gdMOtY2ggdOG7iSBz4buRIG5ndXkgY8ahIChSZWxhdGl2ZSBSaXNrIOKAkyBSUikgY2hvIHBow6lwIHNvIHPDoW5oIGto4bqjIG7Eg25nIGNhbyBodXnhur90IMOhcCBnaeG7r2EgY8OhYyBuaMOzbSBt4buZdCBjw6FjaCB0cuG7sWMgcXVhbiB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4NCg0KKipOaMOzbSBIeXBlcnRlbnNpb24gKHTEg25nIGh1eeG6v3Qgw6FwKSoqDQoNCsSQxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBSUiA9IDEuMDAuDQoNCsSQw6J5IGzDoCBuaMOzbSBjw7MgdOG7tyBs4buHIGJp4bq/biBwaOG7pSB0aHXhu5ljIChZZXMpIGNhbyBuaOG6pXQgKDUyOC81Njkg4omIIDkyLDglKS4NCg0KKipOaMOzbSBOb3JtYWwgKGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZykqKg0KDQpDw7MgUlIgPSAwLjM4NyAoOTUlIENJOiAwLjM1MiDigJMgMC40MjYpLCBuZ2jEqWEgbMOgIG5ndXkgY8ahIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAg4bufIG5ow7NtIG7DoHkgY2jhu4kgYuG6sW5nIGtob+G6o25nIDM4LDclIHNvIHbhu5tpIG5ow7NtIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGNhby4NCg0KR2nDoSB0cuG7iyBwIHLhuqV0IG5o4buPIChwIDwgMi4yZS0xNiksIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8uDQoNCioqTmjDs20gUHJlaHlwZXJ0ZW5zaW9uICh0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXApKioNCg0KQ8OzIFJSID0gMC4zNzkgKDk1JSBDSTogMC4zNDAg4oCTIDAuNDIzKSwgdMawxqFuZyDEkcawxqFuZyB24bubaSBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2jhu4kgYuG6sW5nIDM3LDklIHNvIHbhu5tpIG5ow7NtIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGNhby4NCg0KUC12YWx1ZSBjxaluZyBj4buxYyBr4buzIG5o4buPIChwIDwgMi4yZS0xNiksIGNo4bupbmcgdOG7jyBz4buxIGtow6FjIGJp4buHdCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG3huqFuaCBt4bq9Lg0KDQpU4buVbmcgdGjhu4MsIEvhur90IHF14bqjIGNobyB0aOG6pXkgbmjDs20gdMSDbmcgaHV54bq/dCDDoXAgY8OzIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGJp4bq/biBwaOG7pSB0aHXhu5ljIGNhbyB2xrDhu6N0IHRy4buZaSBzbyB24bubaSBoYWkgbmjDs20gY8OybiBs4bqhaS4gQ+G6oyBuaMOzbSBodXnhur90IMOhcCBiw6xuaCB0aMaw4budbmcgdsOgIHRp4buBbiB0xINuZyBodXnhur90IMOhcCDEkeG7gXUgY8OzIG5ndXkgY8ahIHRo4bqlcCBoxqFuIMSRw6FuZyBr4buDLCB24bubaSBt4bupYyBnaeG6o20ga2hv4bqjbmcgNjIlIHNvIHbhu5tpIG5ow7NtIHTEg25nIGh1eeG6v3Qgw6FwLiBT4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvIChwLXZhbHVlIGPhu7FjIG5o4buPKSwgY2jhu6luZyB04buPIHRy4bqhbmcgdGjDoWkgaHV54bq/dCDDoXAgbMOgIG3hu5l0IHnhur91IHThu5EgcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBiaeG6v24gcGjhu6UgdGh14buZYy4NCg0KDQojIyMjICoqMy42LjQuIFBow6JuIHTDrWNoIE9kZCBSYXRpbyBnaeG7r2EgQlBfSGlzdG9yeSB2w6Aga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oKioNCg0KYGBge3J9DQpvZGRzcmF0aW8odGFibGVfY2FvaHV5ZXRhcF9CUF9IaXN0b3J5KQ0KYGBgDQoNClBow6JuIHTDrWNoIE9kZHMgUmF0aW8gKE9SKSBuaOG6sW0gc28gc8Ohbmgga2jhuqMgbsSDbmcgY2FvIGh1eeG6v3Qgw6FwIGLhu4duaCBnaeG7r2EgY8OhYyBuaMOzbSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCDEkWnhu4F1IHRy4buLLCB24bubaSBuaMOzbSBIeXBlcnRlbnNpb24gxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91Lg0KDQoqKkh5cGVydGVuc2lvbiAodGnhu4FuIHPhu60gaHV54bq/dCDDoXAgY2FvKSoqOiBMw6AgbmjDs20gdGhhbSBjaGnhur91IChPUiA9IDEuMDApLg0KDQoqKk5vcm1hbCAoaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nKSoqOiBPUiA9IDAuMDQzOCAoOTUlIENJOiAwLjAzMDXigJMwLjA2MTQpLCBwIDwgMi4yZS0xNi4gTmjDs20gbsOgeSBjw7Mga2jhuqMgbsSDbmcgYuG7iyBjYW8gaHV54bq/dCDDoXAgdGjhuqVwIGjGoW4gxJHDoW5nIGvhu4MsIGNo4buJIGtob+G6o25nIDQsNCUgc28gduG7m2kgbmjDs20gdMSDbmcgaHV54bq/dCDDoXAuDQoNCioqUHJlaHlwZXJ0ZW5zaW9uICh0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXApKio6IE9SID0gMC4wNDI0ICg5NSUgQ0k6IDAuMDI5M+KAkzAuMDYwMCksIHAgPCAyLjJlLTE2LiBOaMOzbSB0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgY8WpbmcgY8OzIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCB0aOG6pXAgaMahbiBuaGnhu4F1LCBjaOG7iSBi4bqxbmcga2hv4bqjbmcgNCwyJSBzbyB24bubaSBuaMOzbSB0xINuZyBodXnhur90IMOhcC4NCg0KS+G6v3QgbHXhuq1uIHThu5VuZyB0aOG7gzoNCk5o4buvbmcgbmfGsOG7nWkgaGnhu4duIMSRYW5nIOG7nyB0w6xuaCB0cuG6oW5nIHTEg25nIGh1eeG6v3Qgw6FwIGPDsyB4w6FjIHN14bqldCBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHbGsOG7o3QgdHLhu5lpIHNvIHbhu5tpIGhhaSBuaMOzbSBjw7JuIGzhuqFpLiBIYWkgbmjDs20g4oCcYsOsbmggdGjGsOG7nW5n4oCdIHbDoCDigJx0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXDigJ0gY8OzIG5ndXkgY8ahIHRo4bqlcCBoxqFuIHLhuqV0IG5oaeG7gXUgKGNo4buJIGtob+G6o25nIDQlIHNvIHbhu5tpIG5ow7NtIHTEg25nIGh1eeG6v3Qgw6FwKS4gU+G7sSBraMOhYyBiaeG7h3QgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIG3huqFuaCAocCA8IDAuMDAxKS4NCg0KIyMjIyAqKjMuNi41LiBUaOG7kW5nIGvDqiBzdXkgZGnhu4VuKioNCg0KQ2jDum5nIHRhIHPhu60gZOG7pW5nIGtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyDEkeG7gyBraeG7g20gdHJhIGdp4bqjIHRodXnhur90IHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGdp4buvYSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCB2w6Aga2jhuqMgbsSDbmcgY2FvIGh1eeG6v3Qgw6FwLg0KDQoNCioqR2nhuqMgdGh1eeG6v3Qga2nhu4NtIMSR4buLbmg6KioNCg0KSOKCgCAoR2nhuqMgdGh1eeG6v3Qga2jDtG5nKTogdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIGto4bqjIG7Eg24gbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCBsw6AgaGFpIGJp4bq/biDEkeG7mWMgbOG6rXAuDQpI4oKBIChHaeG6oyB0aHV54bq/dCDEkeG7kWkpOiB0aeG7gW4gc+G7rSBodXnhur90IMOhcCB2w6Aga2jhuqMgbsSDbiBt4bqvIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgbMOgIGhhaSBiaeG6v24gcGjhu6UgdGh14buZYy4NCg0KYGBge3J9DQojIEtp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZw0KY2hpc3EudGVzdCh0YWJsZV9jYW9odXlldGFwX0JQX0hpc3RvcnkpDQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCoqDQoNClxbDQpcY2hpXjIgPSA1MzIuMTYsXHF1YWQgZGYgPSAyLFxxdWFkIHBcdGV4dHstdmFsdWV9IDwgMi4yIFx0aW1lcyAxMF57LTE2fQ0KXF0NCg0KKipEaeG7hW4gZ2nhuqNpKioNCg0KR2nDoSB0cuG7iyBwIHLhuqV0IG5o4buPIChn4bqnbiBi4bqxbmcgMCksIGNobyB0aOG6pXkgY8OzIMSR4bunIGLhurFuZyBjaOG7qW5nIMSR4buDICoqYsOhYyBi4buPIGdp4bqjIHRodXnhur90IFwoIEhfMCBcKSoqIHbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JS4gxJBp4buBdSBuw6B5IGNo4bupbmcgdOG7jyBy4bqxbmcgKip0aeG7gW4gc+G7rSBodXnhur90IMOhcCBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHbhu5tpIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAqKi4NCg0KTsOzaSBjw6FjaCBraMOhYywgKipraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHBo4bulIHRodeG7mWMgxJHDoW5nIGvhu4MgdsOgbyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCoqLCB04burIMSRw7MgY+G7p25nIGPhu5EgdmFpIHRyw7IgY+G7p2Egdmnhu4djIHRoZW8gZMO1aSBzw6F0IHbDoCBwaMOibiB04bqnbmcgbmd1eSBjxqEgZOG7sWEgdHLDqm4gdGnhu4FuIHPhu60gaHV54bq/dCDDoXAuDQoNCg0KIyMjIyoqMy42LjYuIE3DtCBow6xuaCBo4buTaSBxdXkgY2hvIGThu68gbGnhu4d1IG5o4buLIHBow6JuKioNCg0KIyMjIyMjICoqMy42LjYuMS4gSOG7k2kgcXV5IHR1eeG6v24gdMOtbmgqKg0KDQrEkOG7gyB4w6J5IGThu7FuZyBtw7QgaMOsbmgsIGNow7puZyB0YSBz4bq9IMSR4bq3dCBuaMOzbSBOb3JtYWwgbMOgbSBt4bupYyB0aGFtIGNoaeG6v3UgxJHhu4MgY8OhYyBo4buHIHPhu5EgY8OzIHRo4buDIMSRxrDhu6NjIGRp4buFbiBnaeG6o2kgbeG7mXQgY8OhY2ggaOG7o3AgbMO9Lg0KDQpgYGB7cn0NCiMgxJDhurd0IGzhuqFpIG5ow7NtIHRoYW0gY2hp4bq/dQ0KZGF0YSRCUF9IaXN0b3J5IDwtIHJlbGV2ZWwoZGF0YSRCUF9IaXN0b3J5LCByZWYgPSAiTm9ybWFsIikNCg0KIyBDaOG6oXkgbOG6oWkgbcO0IGjDrG5oIGjhu5NpIHF1eQ0KbW9kZWxfcmVmX2JpbyA8LSBnbG0oSGFzX0h5cGVydGVuc2lvbl9iaW4gfiBCUF9IaXN0b3J5LCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfcmVmX2JpbykNCmBgYA0KDQoqKlBoxrDGoW5nIHRyw6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCoqDQoNCiQkDQpcaGF0e1l9ID0gMC4zNTkyOTYgDQorIDAuNTY4NjQ3IFxjZG90IFx0ZXh0e0h5cGVydGVuc2lvbiB9IA0KLTAuMDA3Njg0IFxjZG90IFx0ZXh0e1ByZWh5cGVydGVuc2lvbn0gDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIFxoYXR7WX0gXCkgbMOgIHjDoWMgc3XhuqV0IGNhbyBodXnhur90IMOhcCBi4buHbmguDQotIEPDoWMgYmnhur9uIGzDoCBkdW1teSB2YXJpYWJsZXMgc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91IGzDoCAqKk5vcm1hbCoqLg0KDQoNCnwgKipCaeG7g3UgaGnhu4duIChCUFxfSGlzdG9yeSkqKiAgIHwgKipI4buHIHPhu5EqKiB8ICoqR2nhuqNpIHRow61jaCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgJFx0ZXh0eyhJbnRlcmNlcHQpfSQgKE5vcm1hbCkgfCAwLjM1OTMgICAgfCBOaMOzbSAqKk5vcm1hbCoqIGPDsyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAga2hv4bqjbmcgKiozNS45JSoqLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBIeXBlcnRlbnNpb24gICAgICAgICAgICAgICAgICB8ICswLjU2ODYgICB8IE5ow7NtICoqSHlwZXJ0ZW5zaW9uKiogY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCAqKmNhbyBoxqFuIDU2LjkgxJFp4buDbSAlKiogc28gduG7m2kgbmjDs20gTm9ybWFsICgqKnAgPCAwLjAwMSoqKSwgdOG7qWMga2hv4bqjbmcgKio5Mi44JSoqLiB8DQp8IFByZWh5cGVydGVuc2lvbiAgICAgICAgICAgICAgIHwg4oCTMC4wMDc3ICAgfCBOaMOzbSAqKlByZWh5cGVydGVuc2lvbioqIGPDsyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgKipn4bqnbiBuaMawIHTGsMahbmcgxJHGsMahbmcqKiB24bubaSBuaMOzbSBOb3JtYWwgKCoqcCA9IDAuNzM3KiopLCBraG/huqNuZyAqKjM1LjIlKiouICAgICB8DQoNCiMjIyMjIyAqKjMuNi42LjIuIEjhu5NpIHF1eSBsb2dpdCoqDQoNCljDqXQgbcO0IGjDrG5oIGjhu5NpIHF1eSBsb2dpc3RpYyB24bubaSBiaeG6v24gcGjhu6UgdGh14buZYyBsw6Aga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCB2w6AgYmnhur9uIMSR4buZYyBs4bqtcCBsw6AgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgKEJQX0hpc3RvcnkpLCB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIEJpb2NoZW1pY2FsIEluY29tcGxldGUuDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljIHbhu5tpIGJp4bq/biBCUF9IaXN0b3J5DQptb2RlbF9sb2dpdF9CUF9IaXN0b3J5IDwtIGdsbShIYXNfSHlwZXJ0ZW5zaW9uX2JpbiB+IEJQX0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0X0JQX0hpc3RvcnkpDQpgYGANCg0KYGBge3J9DQpleHAoY29lZihtb2RlbF9sb2dpdF9CUF9IaXN0b3J5KSkNCmBgYA0KDQoqKlThu7cgc+G7kSBPZGRzIChPZGRzIFJhdGlvKSoqDQoNCiQkDQpcbG9nXGxlZnQoIFxmcmFje1xoYXR7cH19ezEgLSBcaGF0e3B9fSBccmlnaHQpID0gLTAuNTc4NDIgDQorMy4xMzM5IFxjZG90IFx0ZXh0e0h5cGVydGVuc2lvbn0gDQotIDAuMDMzNSBcY2RvdCBcdGV4dHtQcmVoeXBlcnRlbnNpb259IA0KJCQNCg0KKipEaeG7hW4gZ2nhuqNpIGjhu4cgc+G7kSBo4buTaSBxdXkqKg0KDQp8ICoqQmnhu4N1IGhp4buHbiAoQlBcX0hpc3RvcnkpKiogICB8ICoqSOG7hyBz4buRIChsb2ctb2RkcykqKiB8ICoqR2nhuqNpIHRow61jaCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLTogfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAkXHRleHR7KEludGVyY2VwdCl9JCDigJMgTm9ybWFsIHwgICAgICAgICAgICAgIOKAkzAuNTc4NCB8IE5ow7NtICoqTm9ybWFsKiogY8OzIGxvZy1vZGRzIG3huq9jIGNhbyBodXnhur90IMOhcCBsw6Ag4oCTMC41Nzg0LCB0xrDGoW5nIMSRxrDGoW5nIHjDoWMgc3XhuqV0IGtob+G6o25nICoqNTYuMSUqKi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgSHlwZXJ0ZW5zaW9uICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgKzMuMTMzOSB8IE5ow7NtICoqSHlwZXJ0ZW5zaW9uKiogY8OzIGxvZy1vZGRzIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIE5vcm1hbCAoKipwIDwgMC4wMDEqKikuIE9kZHMgdMSDbmcgZ+G6pXAgJGVeezMuMTMzOX0gXGFwcHJveCAyMi45NiQgbOG6p24sIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBcfioqOTcuOCUqKi4gfA0KfCBQcmVoeXBlcnRlbnNpb24gICAgICAgICAgICAgICB8ICAgICAgICAgICAgICDigJMwLjAzMzUgfCBOaMOzbSAqKlByZWh5cGVydGVuc2lvbioqIGPDsyBsb2ctb2RkcyBn4bqnbiBuaMawIHTGsMahbmcgxJHGsMahbmcgbmjDs20gTm9ybWFsICgqKnAgPSAwLjc2NCoqKSwgb2RkcyByYXRpbyDiiYggKiowLjk3KiosIHjDoWMgc3XhuqV0IFx+Kio1NC4zJSoqLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KKipOaOG6rW4geMOpdCoqDQoNCi0gTcO0IGjDrG5oIGNobyB0aOG6pXkgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgbMOgIHnhur91IHThu5EgZOG7sSBiw6FvIG3huqFuaCBt4bq9IGNobyBraOG6oyBuxINuZyBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLg0KDQotIE5ow7NtIEh5cGVydGVuc2lvbiBjw7Mgbmd1eSBjxqEgaGnhu4duIG3huq9jIGNhbyBodXnhur90IMOhcCBy4bqldCBjYW8sIHbhu5tpIG9kZHMgdMSDbmcgZ+G6pXAga2hv4bqjbmcgMjMgbOG6p24gc28gduG7m2kgbmjDs20gTm9ybWFsIChwIDwgMC4wMDEpLg0KDQotIE5ow7NtIFByZWh5cGVydGVuc2lvbiBraMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IMSRw6FuZyBr4buDIHNvIHbhu5tpIG5ow7NtIE5vcm1hbCAocCA9IDAuNzY0KSwgY2hvIHRo4bqleSBnaWFpIMSRb+G6oW4gdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIGNoxrBhIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHLDtSBy4buHdCB0cm9uZyBtw7QgaMOsbmggbsOgeS4NCg0KKipL4bq/dCBsdeG6rW46IE3DtCBow6xuaCBsb2dpc3RpYyBraOG6s25nIMSR4buLbmggcuG6sW5nIHRp4buBbiBz4butIMSRw6MgYuG7iyB0xINuZyBodXnhur90IMOhcCBsw6AgeeG6v3UgdOG7kSBsacOqbiBxdWFuIG3huqFuaCBuaOG6pXQgxJHhur9uIGto4bqjIG7Eg25nIGhp4buHbiBt4bqvYyBjYW8gaHV54bq/dCDDoXAuKioNCg0KIyMjIyMjICoqMy42LjYuMy4gSOG7k2kgcXV5IHByb2JpdCoqDQoNCsOBcCBk4bulbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgxJHhu4MgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSB0aeG7gW4gc+G7rSBodXnhur90IMOhcCAoQlBfSGlzdG9yeSkgdsOgIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgKEhhc19IeXBlcnRlbnNpb25fYmluKSwgdHJvbmcgxJHDsyBuaMOzbSB0aGFtIGNoaeG6v3UgbMOgIE5vcm1hbC4NCg0KYGBge3J9DQojIE3DtCBow6xuaCBQcm9iaXQgduG7m2kgYmnhur9uIEJQX0hpc3RvcnkNCnByb2JpdF9tb2RlbF9CUF9IaXN0b3J5IDwtIGdsbShIYXNfSHlwZXJ0ZW5zaW9uX2JpbiB+IEJQX0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShwcm9iaXRfbW9kZWxfQlBfSGlzdG9yeSkNCmBgYA0KDQokJA0KXFBoaV57LTF9KFxoYXR7cH0pID0gLTAuMzYwMzQgDQorIDEuODIwOTkgXGNkb3QgXHRleHR7SHlwZXJ0ZW5zaW9ufSANCi0gMC4wMjA2MyBcY2RvdCBcdGV4dHtQcmVoeXBlcnRlbnNpb259IA0KJCQNCg0KVHJvbmcgxJHDszoNCg0KJCRcUGhpXnstMX0oXGhhdHtwfSkkJCBsw6AgaMOgbSBuZ2jhu4tjaCDEkeG6o28gcGjDom4gcGjhu5FpIGNodeG6qW4gdMOtY2ggbMWpeSBj4bunYSB4w6FjIHN14bqldCBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLg0KDQpDw6FjIGJp4bq/biBsw6AgYmnhur9uIGdp4bqjIChkdW1teSkgdMawxqFuZyDhu6luZyB24bubaSBjw6FjIG5ow7NtIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSBsw6AgTm9ybWFsLg0KDQoqKkRp4buFbiBnaeG6o2kgaOG7hyBz4buRIGjhu5NpIHF1eSoqDQoNCnwgTmjDs20gKEJQXF9IaXN0b3J5KSB8IEjhu4cgc+G7kSAoRXN0aW1hdGUpIHwgR2nhuqNpIHRow61jaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKEludGVyY2VwdCkgICAgICAgIHwgLTAuMzYwMzQgICAgICAgICB8IMSQw6J5IGzDoCBnacOhIHRy4buLICoqei1zY29yZSoqIChuZ8aw4buhbmcgcGjDom4gcGjhu5FpIGNodeG6qW4pIGPhu6dhIGxvZ2l0IGNobyBuaMOzbSB0aGFtIGNoaeG6v3UgKCoqTm9ybWFsKiopLiBYw6FjIHN14bqldCB0xrDGoW5nIOG7qW5nIGtob+G6o25nICTOpigtMC4zNjAzNCkg4omIIDAuMzYkICh04bupYyAzNiUpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBIeXBlcnRlbnNpb24gICAgICAgfCArMS44MjA5OSAgICAgICAgIHwgTmjDs20gKipIeXBlcnRlbnNpb24qKiBjw7Mgei1zY29yZSB0xINuZyB0aMOqbSAqKjEuODIqKiBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKCoqcCA8IDAuMDAxKiopLCB0xrDGoW5nIOG7qW5nIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBy4bqldCBjYW8gKMaw4bubYyB0w61uaCAkzqYoLTAuMzYwMzQgKyAxLjgyMDk5KSDiiYggMC44NyQsIHThu6ljIDg3JSkuIHwNCnwgUHJlaHlwZXJ0ZW5zaW9uICAgIHwgLTAuMDIwNjMgICAgICAgICB8IE5ow7NtICoqUHJlaHlwZXJ0ZW5zaW9uKioga2jDtG5nIGtow6FjIGJp4buHdCDEkcOhbmcga+G7gyBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKCoqcCA9IDAuNzY0KiopLCB4w6FjIHN14bqldCDGsOG7m2MgdMOtbmggZ+G6p24gbmjGsCB0xrDGoW5nIMSRxrDGoW5nICjiiYggMzYlKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KKipOaOG6rW4geMOpdCoqDQoNCi0gTcO0IGjDrG5oIHByb2JpdCB4w6FjIG5o4bqtbiByw7UgcsOgbmcgcuG6sW5nIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGNhbyBsw6AgbeG7mXQgeeG6v3UgdOG7kSBk4buxIMSRb8OhbiBt4bqhbmggbeG6vSBjaG8ga2jhuqMgbsSDbmcgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcC4NCg0KLSBBSUMgPSAyMTQ0LjMsIGLhurFuZyB24bubaSBtw7QgaMOsbmggbG9naXN0aWMsIGNobyB0aOG6pXkgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCB0xrDGoW5nIMSRxrDGoW5nLg0KDQotIEvhur90IHF14bqjIGhvw6BuIHRvw6BuIG5o4bqldCBxdcOhbiB24bubaSBtw7QgaMOsbmggbG9naXN0aWMsIGNobyB0aOG6pXkgxJHhu5kgdGluIGPhuq15IGNhbyB0cm9uZyB2aeG7h2Mga2jhurNuZyDEkeG7i25oIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwLg0KDQojIyMjIyMgKiozLjYuNi40LiBI4buTaSBxdXkgY2xvZ2xvZyoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBk4buxIMSRb8OhbiB4w6FjIHN14bqldCBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIChIYXNfSHlwZXJ0ZW5zaW9uX2JpbikgZOG7sWEgdHLDqm4gbeG7qWMgxJHhu5kgxJHDoXAg4bupbmcgKEJQX0hpc3RvcnkpIHNhdSDEkWnhu4F1IHRy4buLLiBNw7QgaMOsbmggxJHhurdjIGJp4buHdCBwaMO5IGjhu6NwIHRyb25nIHRyxrDhu51uZyBo4bujcCBiaeG6v24gcGjhu6UgdGh14buZYyBjw7MgcGjDom4gcGjhu5FpIGLhuqV0IGPDom4geOG7qW5nICh04bupYyBsw6AgeMOhYyBzdeG6pXQgc+G7sSBraeG7h24geOG6o3kgcmEgZ+G6p24gMCBob+G6t2MgZ+G6p24gMSkuDQoNCmBgYHtyfQ0KIyBNw7QgaMOsbmggY2xvZ2xvZyB24bubaSBiaeG6v24gQlBfSGlzdG9yeQ0KY2xvZ2xvZ19tb2RlbF9CUF9IaXN0b3J5IDwtIGdsbShIYXNfSHlwZXJ0ZW5zaW9uX2JpbiB+IEJQX0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkoY2xvZ2xvZ19tb2RlbF9CUF9IaXN0b3J5KQ0KDQpgYGANCg0KJCQNClxsb2coLVxsb2coMSAtIFxoYXR7cH0pKSA9IC0wLjgwOTI2IA0KKyAxLjc3NjM2IFxjZG90IFx0ZXh0e0h5cGVydGVuc2lvbn0gDQotIDAuMDI3MTRcY2RvdCBcdGV4dHtQcmVoeXBlcnRlbnNpb259IA0KJCQNCg0KKipEaeG7hW4gZ2nhuqNpIGjhu4cgc+G7kSBo4buTaSBxdXkqKg0KDQp8IE5ow7NtIChCUFxfSGlzdG9yeSkgfCBI4buHIHPhu5EgKEVzdGltYXRlKSB8IEdp4bqjaSB0aMOtY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAoSW50ZXJjZXB0KSAgICAgICAgfCAtMC44MDkyNiAgICAgICAgIHwgxJDDonkgbMOgIGxvZygtbG9nKDEtcCkpIGPhu6dhIG5ow7NtIHRoYW0gY2hp4bq/dSAoKipOb3JtYWwqKikuIFTGsMahbmcg4bupbmcgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGtob+G6o25nICRwIOKJiCAwLjMxJCAoMzElKS4gICAgICAgICAgIHwNCnwgSHlwZXJ0ZW5zaW9uICAgICAgIHwgKzEuNzc2MzYgICAgICAgICB8IE5ow7NtICoqSHlwZXJ0ZW5zaW9uKiogbMOgbSB0xINuZyDEkcOhbmcga+G7gyBsb2coLWxvZygxLXApKSAoKipwIDwgMC4wMDEqKiksIHjDoWMgc3XhuqV0IMaw4bubYyB0w61uaCB0xINuZyBsw6puIGtob+G6o25nICoqODclKiouICAgICAgICAgICAgICB8DQp8IFByZWh5cGVydGVuc2lvbiAgICB8IC0wLjAyNzE0ICAgICAgICAgfCBOaMOzbSAqKlByZWh5cGVydGVuc2lvbioqIGtow7RuZyBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7m2kgbmjDs20gdGhhbSBjaGnhur91ICgqKnAgPSAwLjc2NSoqKSwgeMOhYyBzdeG6pXQgZ+G6p24gbmjGsCBraMO0bmcgdGhheSDEkeG7lWkgKOKJiCAzMSUpLiB8DQoNCioqTmjhuq1uIHjDqXQqKg0KDQotIFTGsMahbmcgdOG7sSBuaMawIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBraMOhYyAobG9naXN0aWMgdsOgIHByb2JpdCksIG3DtCBow6xuaCBjbG9nbG9nIHjDoWMgbmjhuq1uIHLhurFuZyB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBsw6AgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyBt4bqhbmggxJHhur9uIG5ndXkgY8ahIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAuDQoNCi0gTmjDs20gSHlwZXJ0ZW5zaW9uIGzDoCB54bq/dSB04buRIGThu7EgYsOhbyBt4bqhbmggbmjhuqV0LCB0xINuZyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdOG7qyAzMSUgKE5vcm1hbCkg4oaSIH44NyUuDQoNCi0gQUlDID0gMjE0NC4zLCBi4bqxbmcgduG7m2kgbG9naXQgdsOgIHByb2JpdCwgY2hvIHRo4bqleSBt4bupYyDEkeG7mSBwaMO5IGjhu6NwIHTGsMahbmcgdOG7sS4NCg0KLSBEw7kgaMOgbSBsacOqbiBr4bq/dCBraMOhYywga+G6v3QgcXXhuqMgbmjhuqV0IHF1w6FuIHbhu5tpIGPDoWMgbcO0IGjDrG5oIHRyxrDhu5tjLCBjaG8gdGjhuqV5IHTDrW5oIOG7lW4gxJHhu4tuaCB2w6AgxJHDoW5nIHRpbiBj4bqteSBj4bunYSBiaeG6v24gQlBfSGlzdG9yeSB0cm9uZyB0acOqbiBsxrDhu6NuZyBi4buHbmguDQoNCg0KIyMjIyAqKjMuNi43LiDEkMOhbmggZ2nDoSBjw6FjIG3DtCBow6xuaCoqDQoNCioqQuG6o25nIHThu5VuZyBo4bujcCBjaOG7iSBz4buRIEFJQyBj4bunYSA0IG3DtCBow6xuaCBo4buTaSBxdXkqKg0KDQp8ICoqTcO0IGjDrG5oKiogICAgICAgICAgICAgICAgICAgIHwgKipIw6BtIGxpw6puIGvhur90IChMaW5rIGZ1bmN0aW9uKSoqICAgICAgICAgICB8ICoqQUlDKiogICAgfCAqKlBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4/KiogfA0KfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgTGluZWFyIFByb2JhYmlsaXR5IE1vZGVsIChMUE0pIHwgS2jDtG5nIGPDsyAobcO0IGjDrG5oIHR1eeG6v24gdMOtbmggdGjDtG5nIHRoxrDhu51uZykgfCAqKjIyNjYuNyoqIHwg4p2MIEtow7RuZyBwaMO5IGjhu6NwICAgICAgICAgICAgICAgICAgIHwNCnwgTG9naXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgJFxsb2dcbGVmdChcZnJhY3twfXsxIC0gcH1ccmlnaHQpJCAgICAgICAgIHwgMjE0NC4zICAgICB8IOKchSBQaMO5IGjhu6NwICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgUHJvYml0ICAgICAgICAgICAgICAgICAgICAgICAgIHwgJFxQaGleey0xfShwKSQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjE0NC4zICAgICB8IOKchSBQaMO5IGjhu6NwICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgQ2xvZ2xvZyAgICAgICAgICAgICAgICAgICAgICAgIHwgJFxsb2coLVxsb2coMSAtIHApKSQgICAgICAgICAgICAgICAgICAgICAgIHwgMjE0NC4zICAgICB8IOKchSBQaMO5IGjhu6NwICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KDQogLSBUcm9uZyB2aeG7h2MgcGjDom4gdMOtY2ggbeG7kWkgcXVhbiBo4buHIGdp4buvYSBCUF9IaXN0b3J5IHbDoCBraOG6oyBuxINuZyBt4bqvYyBjYW8gaHV54bq/dCDDoXAsIHThuqV0IGPhuqMgY8OhYyBtw7QgaMOsbmggxJHhu4F1IGNobyBjw7luZyBt4buZdCBr4bq/dCBsdeG6rW46IHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIGNhbyBsw6AgeeG6v3UgdOG7kSBk4buxIGLDoW8gbeG6oW5oIG3hur0gY2hvIG5ndXkgY8ahIG3huq9jIGLhu4duaC4NCg0KLSBLaGkgc28gc8OhbmggQUlDLCBNw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggY8OzIEFJQyBjYW8gKDIyNjYuNykgdsOgIGtow7RuZyBwaMO5IGjhu6NwIGNobyBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibi4gQmEgbcO0IGjDrG5oIExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2cgxJHhu4F1IGPDsyBBSUMgdGjhuqVwIGjGoW4gKDIxNDQuMyksIGNobyB0aOG6pXkgbeG7qWMgxJHhu5kgcGjDuSBo4bujcCB2xrDhu6N0IHRy4buZaS4NCg0KTeG6t2MgZMO5IExvZ2l0LCBQcm9iaXQgdsOgIENsb2dsb2cgY8OzIEFJQyBi4bqxbmcgbmhhdSwgTG9naXQgbMOgIGzhu7FhIGNo4buNbiDGsHUgdGnDqm4gdHJvbmcgcGjDom4gdMOtY2ggbMOibSBzw6BuZywgdsOsOg0KDQogLSBE4buFIGRp4buFbiBnaeG6o2kgdGjDtG5nIHF1YSBU4bu3IHPhu5EgY2jDqm5oIChPZGRzIFJhdGlvKS4NCg0KIC0gQ2hvIHBow6lwIGvhur90IGx14bqtbiByw7UgcsOgbmc6IE5ow7NtIGPDsyB0aeG7gW4gc+G7rSBIeXBlcnRlbnNpb24gY8OzIG9kZHMgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBn4bqlcCB+MjMgbOG6p24gc28gduG7m2kgbmjDs20gdGhhbSBjaGnhur91IChOb3JtYWwpLCB24bubaSDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvIChwIDwgMC4wMDEpLg0KDQoqKkRvIMSRw7MsIExvZ2l0IGzDoCBtw7QgaMOsbmggxJHGsOG7o2Mga2h1eeG6v24gbmdo4buLIMSR4buDIHRyw6xuaCBiw6B5IHbDoCBiw6FvIGPDoW8ga+G6v3QgcXXhuqMgdHJvbmcgbmdoacOqbiBj4bupdSBuw6B5KioNCg0KIyMgKiozLjcgUGjDom4gdMOtY2ggxJFhIGJp4bq/bioqDQoNClNhdSBraGkgxJHDoyB0aOG7sWMgaGnhu4duIGPDoWMgcGjDom4gdMOtY2ggxJHGoW4gYmnhur9uIHbDoCBuaOG6rW4gdGjhuqV5IHLhurFuZyBjw6FjIHnhur91IHThu5EgQk1JLCBTbW9raW5nX1N0YXR1cywgRmFtaWx5X0hpc3RvcnkgdsOgIEJQX0hpc3RvcnkgxJHhu4F1IGPDsyBt4buRaSBsacOqbiBo4buHIHbhu5tpIGto4bqjIG7Eg25nIG3huq9jIGLhu4duaCBjbyBodXnhur90IMOhcCAoSGFzX0h5cGVydGVuc2lvbiksIGLGsOG7m2MgdGnhur9wIHRoZW8gbMOgIHjDonkgZOG7sW5nIG3hu5l0IG3DtCBow6xuaCBo4buTaSBxdXkgxJFhIGJp4bq/bi4NCg0KKipN4bulYyB0acOqdToqKg0KDQotIE3hu6VjIHRpw6p1IGPhu6dhIHBow6JuIHTDrWNoIMSRYSBiaeG6v24gbMOgIMSR4buDIMSRw6FuaCBnacOhIHTDoWMgxJHhu5luZyDEkeG7k25nIHRo4budaSBj4bunYSBuaGnhu4F1IGJp4bq/biDEkeG7mWMgbOG6rXAgbMOqbiBt4buZdCBiaeG6v24gcGjhu6UgdGh14buZYy4gxJBp4buBdSBuw6B5IGNobyBwaMOpcCBjaMO6bmcgdGE6DQoNCiAgLSBYw6FjIMSR4buLbmggY8OhYyB54bq/dSB04buRIGThu7EgYsOhbyBt4bqhbmggbmjhuqV0IGNobyBraOG6oyBuxINuZyBt4bqvYyBi4buHbmguDQogIC0gxJDDoW5oIGdpw6Eg4bqjbmggaMaw4bufbmcgY+G7p2EgbeG7mXQgYmnhur9uIHNhdSBraGkgxJHDoyAia2nhu4NtIHNvw6F0IiBob+G6t2MgIsSRaeG7gXUgY2jhu4luaCIgY2hvIGPDoWMgYmnhur9uIGtow6FjIHRyb25nIG3DtCBow6xuaC4gxJBp4buBdSBuw6B5IGdpw7pwIGxv4bqhaSBi4buPIGPDoWMgeeG6v3UgdOG7kSBnw6J5IG5oaeG7hXUgKGNvbmZvdW5kZXJzKS4NCiAgLSBYw6J5IGThu7FuZyBt4buZdCBtw7QgaMOsbmggZOG7sSBiw6FvIHRvw6BuIGRp4buHbiBoxqFuLg0KDQoNCiMjIyMgKiozLjcuMSBNw7QgaMOsbmggeMOhYyBzdeG6pXQgdHV54bq/biB0w61uaCDEkeG7kWkgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4qKg0KDQpgYGB7cn0NCiMgTGluZWFyIFByb2JhYmlsaXR5IE1vZGVsDQptb2RlbF9scG0gPC0gbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIEZhbWlseV9IaXN0b3J5LCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfbHBtKQ0KYGBgDQoNCiQkDQpcaGF0e1xwaX0gPSAwLjY2NDIwIA0KKyAwLjA2ODQ0IFxjZG90IFx0ZXh0e0JNSX1fXHRleHR7T3ZlcndlaWdodH0gDQorIDAuMDM2NzAgXGNkb3QgXHRleHR7Qk1JfV9cdGV4dHtVbmRlcndlaWdodH0gDQorIDAuMjc1ODEgXGNkb3QgXHRleHR7U21va2luZ19TdGF0dXN9X1x0ZXh0e1Ntb2tlcn0gDQotIDAuNTcxMTQgXGNkb3QgXHRleHR7QlBfSGlzdG9yeX1fXHRleHR7Tm9ybWFsbH0gXFwNCi0gMC41NzEwNSBcY2RvdCBcdGV4dHtCUF9IaXN0b3J5fV9cdGV4dHtQcmVoeXBlcnRlbnNpb259IA0KKyAwLjI4NTI4IFxjZG90IFx0ZXh0e0ZhbWlseV9IaXN0b3J5fV9cdGV4dHtZZXN9IA0KJCQNCg0KIyMjIyMgKiozLjcuMS4xIMSQw6FuaCBnacOhIHThu5VuZyBxdWFuIG3DtCBow6xuaCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgdMOhaSBwaMOhdCBcKCBcaGF0e1xwaX0gXCkgY+G7p2EgYuG7h25oIG5ow6JuIGThu7FhIHRyw6puIGPDoWMgeeG6v3UgdOG7kTogZ2nhu5tpIHTDrW5oLCBow7p0IHRodeG7kWMsIHRp4buBbiBz4butIHjhuqEgdHLhu4ssIOG7lSB04buVbiB0aMawxqFuZyB2w6AgxJHDoXAg4bupbmcgxJFp4buBdSB0cuG7iy4NCg0KLSBCaeG6v24gcGjhu6UgdGh14buZYzogYEh5cGVydGVuc2lvbl9iaW5gIChiaeG6v24gbmjhu4sgcGjDom46IGPDsy9raMO0bmcgdMOhaSBwaMOhdCkuDQoNCi0gQmnhur9uIMSR4buZYyBs4bqtcDogYEJNSWAsIGBTbW9raW5nX1N0YXR1c2AsIGBCUF9IaXN0b3J5YCwgYEZhbWlseV9IaXN0b3J5YC4NCg0KIyMjIyMgKiozLjcuMS4yLiBDaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oKioNCg0KLSBI4buHIHPhu5EgeMOhYyDEkeG7i25oOiBcKCBSXjIgPSAwLjQxNTQgXCkNCi0gSOG7hyBz4buRIHjDoWMgxJHhu4tuaCBoaeG7h3UgY2jhu4luaDogXCggUl4yX3thZGp9ID0gMC40MTM3IFwpDQotIFNhaSBz4buRIGNodeG6qW4gcGjhuqduIGTGsDogMC4zODI3DQotIFRo4buRbmcga8OqIEY6IFwoIEYgPSAyMzQuMyBcKSwgduG7m2kgXCggcCA8IDIuMiBcdGltZXMgMTBeey0xNn0gXCkNCg0KbcO0IGjDrG5oIGdp4bqjaSB0aMOtY2ggxJHGsOG7o2Mga2hv4bqjbmcgNDEuNSUgYmnhur9uIHRoacOqbiBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYyAoSHlwZXJ0ZW5zaW9uX2JpbikuIEtp4buDbSDEkeG7i25oIEYgQ0hPIFRI4bqkWSBtw7QgaMOsbmggY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB0b8OgbiBj4bulYywgdOG7qWMgw610IG5o4bqldCBt4buZdCBiaeG6v24gxJHhu5ljIGzhuq1wIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLg0KDQojIyMjIyAqKjMuNy4xLjMuIMOdIG5naMSpYSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAqKg0KDQotIEJNSU92ZXJ3ZWlnaHQ6IEjhu4cgc+G7kSBkxrDGoW5nICgwLjA2ODQ0LCBwIDwgMC4wMDEpIOKGkiB0aOG7q2EgY8OibiBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBraG/huqNuZyA2LjggxJFp4buDbSAlIHNvIHbhu5tpIEJNSSBiw6xuaCB0aMaw4budbmcuDQoNCi0gQk1JVW5kZXJ3ZWlnaHQ6IEtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIChwID0gMC4zNykuDQoNCi0gU21va2luZ19TdGF0dXNTbW9rZXI6IEjhu4cgc+G7kSAwLjI3NTgxIChwIDwgMC4wMDEpIOKGkiBuZ8aw4budaSBow7p0IHRodeG7kWMgY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiAyNy42JS4NCg0KLSBCUF9IaXN0b3J5Og0KDQogIC0gTm9ybWFsOiBI4buHIHPhu5EgLTAuNTcxMTQgKHAgPCAwLjAwMSkg4oaSIG5ow7NtIGh1eeG6v3Qgw6FwIGLDrG5oIHRoxrDhu51uZyBjw7MgeMOhYyBzdeG6pXQgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHRo4bqlcCBoxqFuIDU3LjEgxJFp4buDbSAlIHNvIHbhu5tpIG5ow7NtIHRoYW0gY2hp4bq/dSAoSHlwZXJ0ZW5zaW9uKS4NCg0KICAtIFByZWh5cGVydGVuc2lvbjogVMawxqFuZyB04buxLCBo4buHIHPhu5EgLTAuNTcxMDUgKHAgPCAwLjAwMSkg4oaSIG5ow7NtIHRp4buBbiB0xINuZyBodXnhur90IMOhcCBjxaluZyBnaeG6o20geMOhYyBzdeG6pXQgdMawxqFuZyB04buxLg0KDQotIEZhbWlseV9IaXN0b3J5WWVzOiBI4buHIHPhu5EgMC4yODUyOCAocCA8IDAuMDAxKSDihpIgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggdMSDbmcgaHV54bq/dCDDoXAgbMOgbSB0xINuZyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgdGjDqm0gMjguNSUuDQoNCiMjIyMjICoqMy43LjEuNC4gS+G6v3QgbHXhuq1uKioNCg0KLSBNw7QgaMOsbmggaOG7k2kgcXV5IHR1eeG6v24gdMOtbmggKExQTSkgY2hvIHRo4bqleSBjw6FjIHnhur91IHThu5EgdGjhu6thIGPDom4sIGjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHbDoCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcC4NCg0KLSBUdXkgbmhpw6puLCBkbyBiaeG6v24gcGjhu6UgdGh14buZYyBsw6Agbmjhu4sgcGjDom4sIExQTSBraMO0bmcgcGjhuqNpIGzDoCBtw7QgaMOsbmggdOG7kWkgxrB1OiBuw7MgY8OzIHRo4buDIGThu7EgYsOhbyB4w6FjIHN14bqldCBuZ2/DoGkga2hv4bqjbmcgWzAsMV0gdsOgIHZpIHBo4bqhbSBnaeG6oyDEkeG7i25oIHBow6JuIHBo4buRaSBjaHXhuqluIGPhu6dhIHNhaSBz4buRDQoNCi0gQ+G6p24gdGnhur9wIHThu6VjIHNvIHPDoW5oIHbhu5tpIGPDoWMgbcO0IGjDrG5oIG5o4buLIHBow6JuIG5oxrAgKipsb2dpdCoqLCAqKnByb2JpdCoqLCB2w6AgKipjbG9nbG9nKiogxJHhu4MgeMOhYyDEkeG7i25oIG3DtCBow6xuaCBwaMO5IGjhu6NwIGjGoW4uDQoNCg0KDQojIyMjICoqMy43LjIgTcO0IGjDrG5oIExvZ2l0KioNCg0KYGBge3J9DQojIExvZ2l0DQptb2RlbF9sb2dpdCA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIEZhbWlseV9IaXN0b3J5LA0KICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsX2xvZ2l0KQ0KYGBgDQoNCg0KDQojIyMjIyAqKjMuNy4yLjEuIMSQw6FuaCBnacOhIHThu5VuZyBxdWFuIG3DtCBow6xuaCBsb2dpdCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMgKGxvZ2l0KSDEkcaw4bujYyBz4butIGThu6VuZyBuaOG6sW0gZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgdMOhaSBwaMOhdCBcKCBccGkgXCkgY+G7p2EgYuG7h25oIG5ow6JuIHR1eeG6v24gZ2nDoXAgYmnhu4d0IGjDs2EsIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuIGBIeXBlcnRlbnNpb25fYmluYCAoMDoga2jDtG5nIHTDoWkgcGjDoXQsIDE6IHTDoWkgcGjDoXQpLg0KDQpDw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgxJHGsOG7o2MgxJHGsGEgdsOgbyBtw7QgaMOsbmggZ+G7k206IA0KDQotIGBCTUlgIChUaOG7gyBUcuG6oW5nKSwNCi0gYFNtb2tpbmdfU3RhdHVzYCAoaMO6dCB0aHXhu5FjIGhheSBraMO0bmcpLA0KLSBgQlBfSGlzdG9yeWAgKHRp4buBbiBz4butIGh1eeG6v3Qgw6FwKSwNCi0gYEZhbWlseV9IaXN0b3J5YCAoZ2lhIMSRw6xuaCBjw7MgbeG6r2MgYuG7h25oIGtow7RuZyksDQoNCiMjIyMjICoqMy43LjIuMSBDaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oKioNCg0KLSBTYWkgc+G7kSBjaHXhuqluIChEaXNwZXJzaW9uKTogMSAgDQotIMSQ4buZIGzhu4djaCBkxrAgKFJlc2lkdWFsIGRldmlhbmNlKTogMTY5OC40IHRyw6puIDE5NzggYuG6rWMgdOG7sSBkbyAgDQotIMSQ4buZIGzhu4djaCBn4buRYyAoTnVsbCBkZXZpYW5jZSk6IDI3NDguNiB0csOqbiAxOTg0IGLhuq1jIHThu7EgZG8gIA0KLSBDaMOqbmggbOG7h2NoIGRldmlhbmNlOiBcKCBcRGVsdGEgRCA9IDI3NDguNiAtIDE2OTguNCA9IDEwNTAuMiBcKSB24bubaSBcKDE5ODQgLSAxOTc4ID0gNlwpIGLhuq1jIHThu7EgZG8gIA0KLSBBSUMgPSAxNzEyLjQgIA0KDQrihpIgKipNw7QgaMOsbmggbG9naXQgY+G6o2kgdGhp4buHbiDEkcOhbmcga+G7gyBzbyB24bubaSBtw7QgaMOsbmggcuG7l25nKiosIHRo4buDIGhp4buHbiBxdWEgZGV2aWFuY2UgZ2nhuqNtIG3huqFuaC4gQUlDIHRo4bqlcCBjaG8gdGjhuqV5IG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdMawxqFuZyDEkeG7kWkgdOG7kXQgduG7m2kgZOG7ryBsaeG7h3Ugbmjhu4sgcGjDom4uDQoNCg0KDQojIyMjIyAqKjMuNy4yLjMuIFBoxrDGoW5nIHRyw6xuaCBtw7QgaMOsbmgqKg0KDQpNw7QgaMOsbmggbG9naXQgY8OzIGThuqFuZyB04buVbmcgcXXDoXQ6DQoNClxbDQpcbG9nXGxlZnQoXGZyYWN7XHBpfXsxIC0gXHBpfVxyaWdodCkgPSBcYmV0YV8wICsgXGJldGFfMSBcY2RvdCBcdGV4dHtCTUl9ICsgXGJldGFfMiBcY2RvdCBcdGV4dHtTbW9raW5nXF9TdGF0dXN9ICsgXGJldGFfMyBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX0gKyBcYmV0YV80IFxjZG90IFx0ZXh0e0ZhbWlseVxfSGlzdG9yeX0NClxdDQoNClRoYXkgY8OhYyBo4buHIHPhu5EgxrDhu5tjIGzGsOG7o25nOg0KDQpcWw0KXGxvZ1xsZWZ0KFxmcmFje1xwaX17MSAtIFxwaX1ccmlnaHQpID0gMS4zNjMxDQorIDAuNDY3NiBcY2RvdCBcdGV4dHtCTUl9X3tPdmVyd2VpZ2h0fQ0KKyAwLjI0ODMgXGNkb3QgXHRleHR7Qk1JfV97VW5kZXJ3ZWlnaHR9DQorIDEuODc4MSBcY2RvdCBcdGV4dHtTbW9raW5nXF9TdGF0dXN9X3tTbW9rZXJ9DQotIDMuOTYxNCBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe05vcm1hbH0NCi0gMy45NTUzIFxjZG90IFx0ZXh0e0JQXF9IaXN0b3J5fV97UHJlaHlwZXJ0ZW5zaW9ufQ0KKyAxLjk3OTUgXGNkb3QgXHRleHR7RmFtaWx5XF9IaXN0b3J5fV97WWVzfQ0KXF0NCg0KDQoNCiMjIyMjICoqMy43LjIuNC4gTmjhuq1uIHjDqXQgY2hpIHRp4bq/dCoqDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICAgICB8IEjhu4cgc+G7kSBcKCBcYmV0YSBcKSB8IE9SIChvZGRzIHJhdGlvKSB8IEdpw6EgdHLhu4sgcCAgICB8IMOdIG5naMSpYSB0aOG7kW5nIGvDqiB8IERp4buFbiBnaeG6o2kgw70gbmdoxKlhIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS06fC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKEludGVyY2VwdCkgICAgICAgICAgICB8IDEuMzYzMSAgICAgICAgICAgfCAzLjkwOCAgICAgICAgICB8IDwgMC4wMDEgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBYw6FjIHN14bqldCBjxqEgYuG6o24gbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIHTGsMahbmcgxJHhu5FpIGNhbyDhu58gbmjDs20gdGhhbSBjaGnhur91LiB8DQp8IEJNSU92ZXJ3ZWlnaHQgICAgICAgICAgfCAwLjQ2NzYgICAgICAgICAgIHwgMS41OTYgICAgICAgICAgfCAwLjAwMDI5OCAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmfGsOG7nWkgdGjhu6thIGPDom4gY8OzIG9kZHMgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwIGNhbyBoxqFuIH4xLjYgbOG6p24gc28gduG7m2kgbmjDs20gQk1JIGLDrG5oIHRoxrDhu51uZy4gfA0KfCBCTUlVbmRlcndlaWdodCAgICAgICAgIHwgMC4yNDgzICAgICAgICAgICB8IDEuMjgyICAgICAgICAgIHwgMC4zODYgICAgICAgIHwgS2jDtG5nICAgICAgICAgICB8IOG6om5oIGjGsOG7n25nIGtow7RuZyDEkcOhbmcga+G7gy4gfA0KfCBTbW9raW5nX1N0YXR1c1Ntb2tlciAgIHwgMS44NzgxICAgICAgICAgICB8IDYuNTM5ICAgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5nxrDhu51pIGjDunQgdGh14buRYyBjw7Mgb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGfhuqVwIH42LjUgbOG6p24gc28gduG7m2kgbmfGsOG7nWkga2jDtG5nIGjDunQuIHwNCnwgQlBfSGlzdG9yeU5vcm1hbCAgICAgICB8IC0zLjk2MTQgICAgICAgICAgfCAwLjAxOSAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBOZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nIGPDsyBvZGRzIG3huq9jIGNhbyBodXnhur90IMOhcCB0aOG6pXAgaMahbiBy4bqldCBuaGnhu4F1ICh+OTglKSBzbyB24bubaSBuaMOzbSB0aGFtIGNoaeG6v3UgKEh5cGVydGVuc2lvbikuIHwNCnwgQlBfSGlzdG9yeVByZWh5cGVydGVuc2lvbiB8IC0zLjk1NTMgICAgICAgfCAwLjAxOSAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBOZ8aw4budaSB0aeG7gW4gdMSDbmcgaHV54bq/dCDDoXAgY8WpbmcgY8OzIG9kZHMgdGjhuqVwIHTGsMahbmcgdOG7sSAofjk4JSB0aOG6pXAgaMahbiBuaMOzbSBIeXBlcnRlbnNpb24pLiB8DQp8IEZhbWlseV9IaXN0b3J5WWVzICAgICAgfCAxLjk3OTUgICAgICAgICAgIHwgNy4yMzcgICAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgQ8OzIHRp4buBbiBz4butIGdpYSDEkcOsbmggbeG6r2MgYuG7h25oIGzDoG0gdMSDbmcgb2RkcyBt4bqvYyBjYW8gaHV54bq/dCDDoXAgfjcuMiBs4bqnbi4gfA0KDQoqR2hpIGNow7o6KiAgDQotIFwoIFx0ZXh0e09SfSA9IGVee1xiZXRhfSBcKSAgDQotIEdpw6EgdHLhu4sgcCA8IDAuMDUg4oaSICoqQ8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqICANCg0KDQoNCiMjIyMjICoqMy43LjIuNS4gS+G6v3QgbHXhuq1uKioNCg0KLSBNw7QgaMOsbmggbG9naXQgKipwaMO5IGjhu6NwKiogxJHhu4MgZOG7sSDEkW/DoW4ga2jhuqMgbsSDbmcgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiAgDQotIEPDoWMgYmnhur9uICoqU21va2luZ19TdGF0dXMqKiwgKipCUF9IaXN0b3J5KiosIHbDoCAqKkZhbWlseV9IaXN0b3J5KiogbMOgIG5o4buvbmcgeeG6v3UgdOG7kSBk4buxIGLDoW8gbeG6oW5oIG3hur0gbmjhuqV0LiAgDQotIEJNSSB0aOG7q2EgY8OibiBjw7MgdMOhYyDEkeG7mW5nIMSRw6FuZyBr4buDLCB0cm9uZyBraGkgQk1JIHRoaeG6v3UgY8OibiBraMO0bmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqi4gIA0KLSBL4bq/dCBxdeG6oyBuw6B5IGfhu6NpIMO9IHLhurFuZyB2aeG7h2MgKipraeG7g20gc2/DoXQgaMO6dCB0aHXhu5FjLCB0aGVvIGTDtWkgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAgdsOgIHnhur91IHThu5EgZGkgdHJ1eeG7gW4qKiBjw7MgdGjhu4MgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyBwaMOybmcgbmfhu6thIGNhbyBodXnhur90IMOhcC4NCg0KIyMjIyAqKjMuNy4zIE3DtCBow6xuaCBQcm9iaXQqKg0KDQpgYGB7cn0NCiMgUHJvYml0DQptb2RlbF9wcm9iaXQgPC0gZ2xtKEh5cGVydGVuc2lvbl9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyBGYW1pbHlfSGlzdG9yeSwNCiAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJwcm9iaXQiKSwgZGF0YSA9IGRhdGEpDQpzdW1tYXJ5KG1vZGVsX3Byb2JpdCkNCmBgYA0KDQojIyMjIyAqKjMuNy4zLjEuIFBoxrDGoW5nIHRyw6xuaCBtw7QgaMOsbmg6KioNCg0KTcO0IGjDrG5oIGjhu5NpIHF1eSBQcm9iaXQgY8OzIGThuqFuZzoNCg0KXFsNClxQaGleey0xfShccGkpID0NCjAuODA4MzENCisgMC4yNzI4OSBcY2RvdCBcdGV4dHtCTUl9X3tPdmVyd2VpZ2h0fQ0KKyAwLjEwNjk1IFxjZG90IFx0ZXh0e0JNSX1fe1VuZGVyd2VpZ2h0fQ0KKyAxLjA5NTI5IFxjZG90IFx0ZXh0e1Ntb2tpbmdcX1N0YXR1c31fe1Ntb2tlcn0NCi0gMi4zMTQ2NCBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe05vcm1hbH0NCi0gMi4zMjA5NiBcY2RvdCBcdGV4dHtCUFxfSGlzdG9yeX1fe1ByZWh5cGVydGVuc2lvbn0NCisgMS4xNDYzMiBcY2RvdCBcdGV4dHtGYW1pbHlcX0hpc3Rvcnl9X3tZZXN9DQpcXQ0KDQpUcm9uZyDEkcOzOg0KLSBcKCBcUGhpXnstMX0oXHBpKSBcKSBsw6AgaMOgbSBuZ2jhu4tjaCDEkeG6o28gY+G7p2EgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiB0w61jaCBsxal5LCDEkeG6t2MgdHLGsG5nIGNobyBtw7QgaMOsbmggKipQcm9iaXQqKi4NCi0gXCggXHBpIFwpIGzDoCB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQoNCg0KDQojIyMjIyAqKjMuNy4zLjIgxJDDoW5oIGdpw6EgbcO0IGjDrG5oKioNCg0KLSAqKk51bGwgZGV2aWFuY2UqKjogMjc0OC42IChkZiA9IDE5ODQpICANCi0gKipSZXNpZHVhbCBkZXZpYW5jZSoqOiAxNjkxLjYgKGRmID0gMTk3OCkgIA0KLSAqKkNow6puaCBs4buHY2ggZGV2aWFuY2UqKjogXCggXERlbHRhIEQgPSAyNzQ4LjYgLSAxNjkxLjYgPSAxMDU3LjAgXCkgduG7m2kgNiBi4bqtYyB04buxIGRvIOKGkiBj4bqjaSB0aGnhu4duIG3DtCBow6xuaCByw7UgcuG7h3QuICANCi0gKipBSUMgPSAxNzA1LjYqKiwgdGjhuqVwIGjGoW4gc28gduG7m2kgbcO0IGjDrG5oIGxvZ2l0IHRyxrDhu5tjIMSRw7MgKDE3MTIuNCkg4oaSIG3DtCBow6xuaCBQcm9iaXQgbcO0IHThuqMgZOG7ryBsaeG7h3UgdOG7kXQgaMahbiBt4buZdCBjaMO6dC4NCg0KDQoNCiMjIyMjICoqMy43LjMuMyBC4bqjbmcga+G6v3QgcXXhuqMgY2hpIHRp4bq/dCoqDQoNCnwgQmnhur9uICAgICAgICAgICAgICAgICAgICB8IEjhu4cgc+G7kSBcKCBcYmV0YSBcKSB8IEdpw6EgdHLhu4sgcCAgICB8IMOdIG5naMSpYSB0aOG7kW5nIGvDqiB8IERp4buFbiBnaeG6o2kgw70gbmdoxKlhIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS18DQp8IChJbnRlcmNlcHQpICAgICAgICAgICAgfCAwLjgwODMxICAgICAgICAgIHwgPCAwLjAwMSAgICAgIHwgKipDw7MqKiAgICAgICAgICB8IE5ow7NtIHRoYW0gY2hp4bq/dSBjw7MgbG9nLXByb2JpdCBkxrDGoW5nIOKGkiB4w6FjIHN14bqldCBjxqEgYuG6o24ga2jDoSBjYW8uIHwNCnwgQk1JT3ZlcndlaWdodCAgICAgICAgICB8IDAuMjcyODkgICAgICAgICAgfCAwLjAwMDI1NyAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmfGsOG7nWkgdGjhu6thIGPDom4gY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiBuaMOzbSBCTUkgYsOsbmggdGjGsOG7nW5nLiB8DQp8IEJNSVVuZGVyd2VpZ2h0ICAgICAgICAgfCAwLjEwNjk1ICAgICAgICAgIHwgMC41MTggICAgICAgIHwgS2jDtG5nICAgICAgICAgICB8IOG6om5oIGjGsOG7n25nIGtow7RuZyDEkcOhbmcga+G7gy4gfA0KfCBTbW9raW5nX1N0YXR1c1Ntb2tlciAgIHwgMS4wOTUyOSAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBOZ8aw4budaSBow7p0IHRodeG7kWMgY8OzIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcCBjYW8gaMahbiDEkcOhbmcga+G7gy4gfA0KfCBCUF9IaXN0b3J5Tm9ybWFsICAgICAgIHwgLTIuMzE0NjQgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBOaMOzbSBodXnhur90IMOhcCBiw6xuaCB0aMaw4budbmcgY8OzIHjDoWMgc3XhuqV0IG3huq9jIHRo4bqlcCBoxqFuIG5oaeG7gXUgc28gduG7m2kgbmjDs20gdMSDbmcgaHV54bq/dCDDoXAuIHwNCnwgQlBfSGlzdG9yeVByZWh5cGVydGVuc2lvbiB8IC0yLjMyMDk2ICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgIHwgTmjDs20gdGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIGPFqW5nIGPDsyB4w6FjIHN14bqldCB0aOG6pXAgaMahbiDEkcOhbmcga+G7gy4gfA0KfCBGYW1pbHlfSGlzdG9yeVllcyAgICAgIHwgMS4xNDYzMiAgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICAgfCBDw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IG3huq9jIGNhbyBodXnhur90IMOhcC4gfA0KDQoNCg0KIyMjIyMgKiozLjcuMy40IEvhur90IGx14bqtbioqDQoNCi0gTcO0IGjDrG5oIFByb2JpdCBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1IHbDoCBj4bqjaSB0aGnhu4duIHLDtSBy4buHdCBzbyB24bubaSBtw7QgaMOsbmggcuG7l25nLiAgDQotIEPDoWMgeeG6v3UgdOG7kSAqKmjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHRp4buBbiBz4butIGdpYSDEkcOsbmgsIEJNSSB0aOG7q2EgY8OibioqIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgbeG6oW5oIMSR4bq/biBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAuICANCi0gS+G6v3QgcXXhuqMgdMawxqFuZyDEkeG7k25nIHbhu5tpIG3DtCBow6xuaCBMb2dpdCwgbmjGsG5nIFByb2JpdCBjw7MgQUlDIHRo4bqlcCBoxqFuLCBn4bujaSDDvSBraOG6oyBuxINuZyBtw7QgcGjhu49uZyB04buRdCBoxqFuIG3hu5l0IGNow7p0LiAgDQoNCg0KDQoNCiMjIyAqKjMuNy40IE3DtCBow6xuaCBDbG9nbG9nKioNCg0KYGBge3J9DQojIENsb2dsb2cNCm1vZGVsX2Nsb2dsb2cgPC0gZ2xtKEh5cGVydGVuc2lvbl9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyBGYW1pbHlfSGlzdG9yeSwNCiAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfY2xvZ2xvZykNCmBgYA0KDQojIyMjIyAqKjMuNy40LjEgUGjGsMahbmcgdHLDrG5oIG3DtCBow6xuaCoqDQoNCk3DtCBow6xuaCBo4buTaSBxdXkgQ2xvZ2xvZyBjw7MgZOG6oW5nOg0KDQpcWw0KXGxvZ1xsZWZ0KC1cbG9nKDEgLSBccGkpXHJpZ2h0KSA9DQowLjMxNzg3DQorIDAuMjk0OTcgXGNkb3QgXHRleHR7Qk1JfV97T3ZlcndlaWdodH0NCisgMC4xMTk4NCBcY2RvdCBcdGV4dHtCTUl9X3tVbmRlcndlaWdodH0NCisgMS4yNjQxMiBcY2RvdCBcdGV4dHtTbW9raW5nXF9TdGF0dXN9X3tTbW9rZXJ9DQotIDIuNTY4NTUgXGNkb3QgXHRleHR7QlBcX0hpc3Rvcnl9X3tOb3JtYWx9DQotIDIuNjA1NTkgXGNkb3QgXHRleHR7QlBcX0hpc3Rvcnl9X3tQcmVoeXBlcnRlbnNpb259DQorIDEuNDEwMjAgXGNkb3QgXHRleHR7RmFtaWx5XF9IaXN0b3J5fV97WWVzfQ0KXF0NCg0KVHJvbmcgxJHDszoNCi0gXCggXHBpIFwpIGzDoCB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAuDQotIEjDoG0gbGnDqm4ga+G6v3QgbMOgIFwoIGcoXHBpKSA9IFxsb2coLVxsb2coMSAtIFxwaSkpIFwpLg0KDQotLS0NCg0KIyMjIyMgKiozLjcuNC4yLiDEkMOhbmggZ2nDoSBtw7QgaMOsbmgqKg0KDQotICoqTnVsbCBkZXZpYW5jZSoqOiAyNzQ4LjYgKGRmID0gMTk4NCkgIA0KLSAqKlJlc2lkdWFsIGRldmlhbmNlKio6IDE2ODUuMSAoZGYgPSAxOTc4KSAgDQotICoqQ2jDqm5oIGzhu4djaCBkZXZpYW5jZSoqOiBcKCBcRGVsdGEgRCA9IDI3NDguNiAtIDE2ODUuMSA9IDEwNjMuNSBcKSB24bubaSA2IGLhuq1jIHThu7EgZG8g4oaSIGPhuqNpIHRoaeG7h24gbcO0IGjDrG5oIHLhuqV0IHLDtSBy4buHdC4gIA0KLSAqKkFJQyA9IDE2OTkuMSoqLCB0aOG6pXAgaMahbiBMb2dpdCAoMTcxMi40KSB2w6AgUHJvYml0ICgxNzA1LjYpIOKGkiBDbG9nbG9nIG3DtCBwaOG7j25nIGThu68gbGnhu4d1IHThu5F0IG5o4bqldCB0cm9uZyBiYSBtw7QgaMOsbmguDQoNCg0KDQojIyMjIyAqKjMuNy40LjMuIELhuqNuZyBr4bq/dCBxdeG6oyBjaGkgdGnhur90KioNCg0KfCBCaeG6v24gICAgICAgICAgICAgICAgICAgICB8IEjhu4cgc+G7kSBcKCBcYmV0YSBcKSB8IEdpw6EgdHLhu4sgcCAgICB8IMOdIG5naMSpYSB0aOG7kW5nIGvDqiB8IERp4buFbiBnaeG6o2kgw70gbmdoxKlhIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnwtLS0tLS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLTp8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAoSW50ZXJjZXB0KSAgICAgICAgICAgICAgfCAwLjMxNzg3ICAgICAgICAgfCAwLjAwMTA5ICAgICAgfCAqKkPDsyoqICAgICAgICAgfCBYw6FjIHN14bqldCBjxqEgYuG6o24gY+G7p2EgbmjDs20gdGhhbSBjaGnhur91IGtow6EgY2FvLiB8DQp8IEJNSU92ZXJ3ZWlnaHQgICAgICAgICAgICB8IDAuMjk0OTcgICAgICAgICB8IDAuMDAwNzcgICAgICB8ICoqQ8OzKiogICAgICAgICB8IE5nxrDhu51pIHRo4burYSBjw6JuIGPDsyB4w6FjIHN14bqldCBt4bqvYyBjYW8gaHV54bq/dCDDoXAgY2FvIGjGoW4gxJHDoW5nIGvhu4MuIHwNCnwgQk1JVW5kZXJ3ZWlnaHQgICAgICAgICAgIHwgMC4xMTk4NCAgICAgICAgIHwgMC41NDEgICAgICAgIHwgS2jDtG5nICAgICAgICAgIHwg4bqibmggaMaw4bufbmcga2jDtG5nIMSRw6FuZyBr4buDLiB8DQp8IFNtb2tpbmdfU3RhdHVzU21va2VyICAgICB8IDEuMjY0MTIgICAgICAgICB8IDwgMmUtMTYgICAgICB8ICoqQ8OzKiogICAgICAgICB8IE5nxrDhu51pIGjDunQgdGh14buRYyBjw7Mgbmd1eSBjxqEgbeG6r2MgYuG7h25oIGNhbyBoxqFuIG5oaeG7gXUuIHwNCnwgQlBfSGlzdG9yeU5vcm1hbCAgICAgICAgIHwgLTIuNTY4NTUgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgIHwgSHV54bq/dCDDoXAgYsOsbmggdGjGsOG7nW5nIGzDoG0gZ2nhuqNtIG3huqFuaCBuZ3V5IGPGoSBt4bqvYyBjYW8gaHV54bq/dCDDoXAuIHwNCnwgQlBfSGlzdG9yeVByZWh5cGVydGVuc2lvbnwgLTIuNjA1NTkgICAgICAgIHwgPCAyZS0xNiAgICAgIHwgKipDw7MqKiAgICAgICAgIHwgVGnhu4FuIHTEg25nIGh1eeG6v3Qgw6FwIGPFqW5nIGdp4bqjbSBuZ3V5IGPGoSDEkcOhbmcga+G7gy4gfA0KfCBGYW1pbHlfSGlzdG9yeVllcyAgICAgICAgfCAxLjQxMDIwICAgICAgICAgfCA8IDJlLTE2ICAgICAgfCAqKkPDsyoqICAgICAgICAgfCBDw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggbMOgbSB0xINuZyBt4bqhbmggbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiB8DQoNCi0tLQ0KDQojIyMjIyAqKjMuNy40LjQgS+G6v3QgbHXhuq1uKioNCg0KLSBNw7QgaMOsbmggQ2xvZ2xvZyBjaG8gdGjhuqV5IHPhu7EgKipwaMO5IGjhu6NwIHThu5F0IG5o4bqldCoqIChBSUMgdGjhuqVwIG5o4bqldCkuICANCi0gQ8OhYyB54bq/dSB04buRIHF1YW4gdHLhu41uZzogKipCTUkgdGjhu6thIGPDom4sIGjDunQgdGh14buRYywgdGnhu4FuIHPhu60gaHV54bq/dCDDoXAsIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKiDEkeG7gXUgY8OzIOG6o25oIGjGsOG7n25nIHLDtSBy4buHdCDEkeG6v24gbmd1eSBjxqEgbeG6r2MgY2FvIGh1eeG6v3Qgw6FwLiAgDQotIFNvIHbhu5tpIExvZ2l0IHbDoCBQcm9iaXQsIENsb2dsb2cgdGjDrWNoIGjhu6NwIGjGoW4ga2hpIGThu68gbGnhu4d1IGPDsyBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgKips4buHY2ggduG7gSBwaMOtYSB0aOG6pXAqKiAobmhp4buBdSBuZ8aw4budaSBraMO0bmcgbeG6r2MsIMOtdCBuZ8aw4budaSBt4bqvYykuICANCg0KIyMjICoqMy44IMSQw6FuaCBnacOhIHbDoCBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AqKg0KDQojIyMgKiozLjguMSDEkMOhbmggZ2nDoSB0aMO0bmcgcXVhIGNo4buJIHPhu5EgQUlDKioNCg0KQ2jhu4kgc+G7kSBBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uIChBSUMpIGzDoCBt4buZdCB0acOqdSBjaMOtIHBo4buVIGJp4bq/biDEkeG7gyBzbyBzw6FuaCBjaOG6pXQgbMaw4bujbmcgZ2nhu69hIGPDoWMgbcO0IGjDrG5oIHRo4buRbmcga8OqLiBBSUMgxJFvIGzGsOG7nW5nIHPhu7EgxJHDoW5oIMSR4buVaSBnaeG7r2EgxJHhu5kgcGjDuSBo4bujcCB2w6AgxJHhu5kgcGjhu6ljIHThuqFwIGPhu6dhIG3DtCBow6xuaC4gTcO0IGjDrG5oIGPDsyBBSUMgY8OgbmcgdGjhuqVwIMSRxrDhu6NjIHhlbSBsw6AgcGjDuSBo4bujcCBoxqFuIHbhu5tpIGThu68gbGnhu4d1ICjhu58gY8O5bmcgbeG7mXQgdOG6rXAgYmnhur9uIGdp4bqjaSB0aMOtY2gpLg0KDQpgYGB7cn0NCiMgU28gc8OhbmggQUlDDQphaWNfdmFsdWVzIDwtIGRhdGEuZnJhbWUoDQogIE3DtF9ow6xuaCA9IGMoIkxQTSIsICJMb2dpdCIsICJQcm9iaXQiLCAiQ2xvZ2xvZyIpLA0KICBBSUMgPSBjKEFJQyhtb2RlbF9scG0pLCBBSUMobW9kZWxfbG9naXQpLCBBSUMobW9kZWxfcHJvYml0KSwgQUlDKG1vZGVsX2Nsb2dsb2cpKQ0KKQ0KcHJpbnQoYWljX3ZhbHVlcykNCmBgYA0KDQoqKkLhuqNuZyBBSUMgY+G7p2EgY8OhYyBtw7QgaMOsbmgqKg0KDQp8IE3DtCBow6xuaCAgIHwgQUlDICAgICAgICB8IE5o4bqtbiB4w6l0IHbhu4EgxJHhu5kgcGjDuSBo4bujcCB8DQp8LS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgTFBNICAgICAgIHwgMTgyOC41MTAgICAgfFBow7kgaOG7o3AgdMawxqFuZyDEkeG7kWkgfA0KfCBMb2dpdCAgICAgfCAxNzEyLjM3NyAgICAgfCBQaMO5IGjhu6NwIHTGsMahbmcgxJHhu5FpIHwNCnwgUHJvYml0ICAgIHwgMTcwNS41NjAgICAgIHwgUGjDuSBo4bujcCB0xrDGoW5nIHThu7EgTG9naXQgfA0KfCBDbG9nbG9nICAgfCAqKjE2OTkuMTMwKiogfCDinIUgVOG7kXQgbmjhuqV0IChBSUMgdGjhuqVwIG5o4bqldCB0cm9uZyBjw6FjIG3DtCBow6xuaCBuaOG7iyBwaMOibikgfA0KDQogKipMxrB1IMO9Kio6IE3DtCBow6xuaCBMUE0gKExpbmVhciBQcm9iYWJpbGl0eSBNb2RlbCkgbMOgIG3DtCBow6xuaCBo4buTaSBxdXkgdHV54bq/biB0w61uaCwga2jDtG5nIHRodeG7mWMgaOG7jSBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIG7Dqm4gQUlDIGPDsyB0aOG7gyDDom0gdsOgIGtow7RuZyB0cuG7sWMgdGnhur9wIHNvIHPDoW5oIMSRxrDhu6NjIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGxvZ2l0LCBwcm9iaXQsIGNsb2dsb2cuDQoNCi0tLQ0KDQoqKkvhur90IGx14bqtbjoqKg0KDQotICoqVHJvbmcgYmEgbcO0IGjDrG5oIG5o4buLIHBow6JuIChMb2dpdCwgUHJvYml0LCBDbG9nbG9nKToqKg0KICAtICoqQ2xvZ2xvZyBjw7MgQUlDIHRo4bqlcCBuaOG6pXQgKDE2OTkuMTMwKSoqIOKGkiBtw7QgaMOsbmggY8OzIMSR4buZIHBow7kgaOG7o3AgdOG7kXQgbmjhuqV0Lg0KICAtIExvZ2l0IHbDoCBQcm9iaXQgY8OzIEFJQyB44bqlcCB44buJIG5oYXUg4oaSIG3hu6ljIMSR4buZIHBow7kgaOG7o3AgdMawxqFuZyDEkcawxqFuZy4uDQogIC0gVuG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgZOG6oW5nIG5o4buLIHBow6JuLCAqKkNsb2dsb2cgbMOgIGzhu7FhIGNo4buNbiDGsHUgdGnDqm4qKiBu4bq/dSBt4bulYyB0acOqdSBsw6AgcGjDom4gdMOtY2ggY2jDrW5oIHjDoWMgeMOhYyBzdeG6pXQgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcC4NCg0KIyMjICoqMy44LjIgxJDDoW5oIGdpw6EgdGjDtG5nIHF1YSDEkcaw4budbmcgY29uZyBST0MgdsOgIGRp4buHbiB0w61jaCBBVUMqKg0KDQrEkMaw4budbmcgY29uZyBST0MgKFJlY2VpdmVyIE9wZXJhdGluZyBDaGFyYWN0ZXJpc3RpYykgbMOgIG3hu5l0IGPDtG5nIGPhu6UgdHLhu7FjIHF1YW4gaMOzYSBoaeG7h3UgcXXhuqMgcGjDom4gbG/huqFpIGPhu6dhIG3DtCBow6xuaCBi4bqxbmcgY8OhY2ggbcO0IHThuqMgbeG7kWkgcXVhbiBo4buHIGdp4buvYSB04bu3IGzhu4cgZMawxqFuZyDEkcO6bmcgKFRydWUgUG9zaXRpdmUgUmF0ZSAtIFRQUikgdsOgIHThu7cgbOG7hyBkxrDGoW5nIGdp4bqjIChGYWxzZSBQb3NpdGl2ZSBSYXRlIC0gRlBSKSB04bqhaSBjw6FjIG5nxrDhu6FuZyBwaMOibiBsb+G6oWkga2jDoWMgbmhhdS4gUk9DIMSR4bq3YyBiaeG7h3QgaOG7r3Ugw61jaCB0cm9uZyBi4buRaSBj4bqjbmggZOG7ryBsaeG7h3UgbeG6pXQgY8OibiDEkeG7kWksIHbDrSBk4bulIG5oxrAgdHLGsOG7nW5nIGjhu6NwIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgInZheSIgbmjhu48gaMahbiBuaGnhu4F1IHNvIHbhu5tpICJraMO0bmcgdmF5Ii4NCg0KQ2jhu4kgc+G7kSBBVUMgKEFyZWEgVW5kZXIgdGhlIEN1cnZlKSDigJMgdOG7qWMgZGnhu4duIHTDrWNoIGTGsOG7m2kgxJHGsOG7nW5nIGNvbmcgUk9DIOKAkyBsw6AgdGjGsOG7m2MgxJFvIHThu5VuZyBxdcOhdCDEkeG7gyDEkcOhbmggZ2nDoSBjaOG6pXQgbMaw4bujbmcgbcO0IGjDrG5oLiBHacOhIHRy4buLIEFVQyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAgxJHhur9uIDEsIHRyb25nIMSRw7M6DQoNCi0gQVVDID0gMC41OiBNw7QgaMOsbmgga2jDtG5nIGPDsyBraOG6oyBuxINuZyBwaMOibiBiaeG7h3QsIHTGsMahbmcgxJHGsMahbmcgduG7m2kgxJFvw6FuIG5n4bqrdSBuaGnDqm4uDQoNCi0gMC43IOKJpCBBVUMgPCAwLjg6IE3DtCBow6xuaCBjw7MgY2jhuqV0IGzGsOG7o25nIHBow6JuIGxv4bqhaSBraMOhLg0KDQotIDAuOCDiiaQgQVVDIDwgMC45OiBNw7QgaMOsbmggY8OzIGNo4bqldCBsxrDhu6NuZyB04buRdC4NCg0KLSBBVUMg4omlIDAuOTogTcO0IGjDrG5oIHBow6JuIGxv4bqhaSBy4bqldCB04buRdC4NCg0KU28gc8OhbmggZ2nhu69hIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuaMawIExvZ2l0LCBQcm9iaXQgdsOgIENvbXBsZW1lbnRhcnkgTG9nLWxvZyAoQ2xvZ2xvZykgdGjDtG5nIHF1YSBjaOG7iSBz4buRIEFVQyBnacO6cCB4w6FjIMSR4buLbmggbcO0IGjDrG5oIG7DoG8gY8OzIGhp4buHdSBzdeG6pXQgcGjDom4gbG/huqFpIGNhbyBoxqFuLCB04burIMSRw7MgaOG7lyB0cuG7oyBs4buxYSBjaOG7jW4gbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IMSR4buDIGThu7EgYsOhbyBow6BuaCB2aSB2YXkgdGnDqnUgZMO5bmcgY+G7p2Ega2jDoWNoIGjDoG5nLg0KDQoNCmBgYHtyfQ0KIyBDw6BpIMSR4bq3dCBnw7NpDQppZiAoIXJlcXVpcmUocFJPQykpIGluc3RhbGwucGFja2FnZXMoInBST0MiLCBkZXBlbmRlbmNpZXMgPSBUUlVFKQ0KbGlicmFyeShwUk9DKQ0KDQojIEh14bqlbiBsdXnhu4duIG3DtCBow6xuaCBjbG9nbG9nDQptb2RlbF9jbG9nbG9nIDwtIGdsbSgNCiAgZm9ybXVsYSA9IEh5cGVydGVuc2lvbl9iaW4gfiBCTUkgKyBTbW9raW5nX1N0YXR1cyArIEJQX0hpc3RvcnkgKyANCiAgICBGYW1pbHlfSGlzdG9yeSwgDQogIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAiY2xvZ2xvZyIpLCANCiAgZGF0YSA9IGRhdGENCikNCg0KIyBUw61uaCB4w6FjIHN14bqldCBk4buxIMSRb8OhbiB04burIG3DtCBow6xuaCBjbG9nbG9nDQpwcmVkaWN0ZWRfcHJvYnNfY2xvZ2xvZyA8LSBwcmVkaWN0KG1vZGVsX2Nsb2dsb2csIHR5cGUgPSAicmVzcG9uc2UiKQ0KDQojIFbhur0gxJHGsOG7nW5nIGNvbmcgUk9DIHbDoCB0w61uaCBBVUMsIGxv4bqhaSBi4buPIGPhuqNuaCBiw6FvDQpzdXBwcmVzc1dhcm5pbmdzKHsNCiAgcm9jX2Nsb2dsb2cgPC0gcm9jKA0KICAgIHJlc3BvbnNlID0gZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uLA0KICAgIHByZWRpY3RvciA9IHByZWRpY3RlZF9wcm9ic19jbG9nbG9nLA0KICAgIGxldmVscyA9IGMoIk5vIiwgIlllcyIpLA0KICAgIGRpcmVjdGlvbiA9ICI8Ig0KICApDQp9KQ0KDQojIFbhur0gYmnhu4N1IMSR4buTIFJPQw0KcGxvdChyb2NfY2xvZ2xvZywgY29sID0gIiMxZjc3YjQiLCBsd2QgPSAyLCBtYWluID0gIlJPQyBDdXJ2ZSAtIENsb2dsb2cgTW9kZWwiKQ0KDQojIEhp4buDbiB0aOG7iyBBVUMNCmF1Y19jbG9nbG9nIDwtIGF1Yyhyb2NfY2xvZ2xvZykNCnByaW50KHBhc3RlKCJBVUM6Iiwgcm91bmQoYXVjX2Nsb2dsb2csIDQpKSkNCmBgYA0KDQoNCg0KYGBge3J9DQptb2RlbF9sb2dpdCA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIA0KICAgICAgICAgICAgICAgICAgICAgRmFtaWx5X0hpc3RvcnksIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSwgZGF0YSA9IGRhdGEpDQoNCm1vZGVsX3Byb2JpdCA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIA0KICAgICAgICAgICAgICAgICAgICAgIEZhbWlseV9IaXN0b3J5LCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gInByb2JpdCIpLCBkYXRhID0gZGF0YSkNCg0KbW9kZWxfY2xvZ2xvZyA8LSBnbG0oSHlwZXJ0ZW5zaW9uX2JpbiB+IEJNSSArIFNtb2tpbmdfU3RhdHVzICsgQlBfSGlzdG9yeSArIA0KICAgICAgICAgICAgICAgICAgICAgICBGYW1pbHlfSGlzdG9yeSwgZmFtaWx5ID0gYmlub21pYWwobGluayA9ICJjbG9nbG9nIiksIGRhdGEgPSBkYXRhKQ0KDQojIEThu7EgxJFvw6FuIHjDoWMgc3XhuqV0DQpwcmVkX2xvZ2l0IDwtIHByZWRpY3QobW9kZWxfbG9naXQsIHR5cGUgPSAicmVzcG9uc2UiKQ0KcHJlZF9wcm9iaXQgPC0gcHJlZGljdChtb2RlbF9wcm9iaXQsIHR5cGUgPSAicmVzcG9uc2UiKQ0KcHJlZF9jbG9nbG9nIDwtIHByZWRpY3QobW9kZWxfY2xvZ2xvZywgdHlwZSA9ICJyZXNwb25zZSIpDQoNCiMgVOG6oW8gUk9DIGNobyB04burbmcgbcO0IGjDrG5oIHbDoCBsb+G6oWkgYuG7jyBj4bqjbmggYsOhbw0Kc3VwcHJlc3NXYXJuaW5ncyh7DQogIHJvY19sb2dpdCA8LSByb2MocmVzcG9uc2UgPSBkYXRhJEhhc19IeXBlcnRlbnNpb24sIHByZWRpY3RvciA9IHByZWRfbG9naXQsIGxldmVscyA9IGMoIk5vIiwgIlllcyIpLCBkaXJlY3Rpb24gPSAiPCIpDQogIHJvY19wcm9iaXQgPC0gcm9jKHJlc3BvbnNlID0gZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uLCBwcmVkaWN0b3IgPSBwcmVkX3Byb2JpdCwgbGV2ZWxzID0gYygiTm8iLCAiWWVzIiksIGRpcmVjdGlvbiA9ICI8IikNCiAgcm9jX2Nsb2dsb2cgPC0gcm9jKHJlc3BvbnNlID0gZGF0YSRIYXNfSHlwZXJ0ZW5zaW9uLCBwcmVkaWN0b3IgPSBwcmVkX2Nsb2dsb2csIGxldmVscyA9IGMoIk5vIiwgIlllcyIpLCBkaXJlY3Rpb24gPSAiPCIpDQp9KQ0KDQojIFbhur0gUk9DIMSR4bqndSB0acOqbg0KcGxvdChyb2NfbG9naXQsIGNvbCA9ICIjZDk1ZjAyIiwgbHdkID0gMiwgbWFpbiA9ICJTbyBzw6FuaCBST0M6IExvZ2l0IC0gUHJvYml0IC0gQ2xvZ2xvZyIsIGxlZ2FjeS5heGVzID0gVFJVRSkNCg0KIyBW4bq9IGPDoWMgUk9DIHRp4bq/cCB0aGVvDQpsaW5lcyhyb2NfcHJvYml0LCBjb2wgPSAiIzc1NzBiMyIsIGx3ZCA9IDIpDQpsaW5lcyhyb2NfY2xvZ2xvZywgY29sID0gIiNlNzI5OGEiLCBsd2QgPSAyKQ0KDQojIFRow6ptIGNow7ogdGjDrWNoIChsZWdlbmQpDQpsZWdlbmQoImJvdHRvbXJpZ2h0IiwgbGVnZW5kID0gYygNCiAgcGFzdGUoIkxvZ2l0IChBVUMgPSIsIHJvdW5kKGF1Yyhyb2NfbG9naXQpLCAzKSwgIikiKSwNCiAgcGFzdGUoIlByb2JpdCAoQVVDID0iLCByb3VuZChhdWMocm9jX3Byb2JpdCksIDMpLCAiKSIpLA0KICBwYXN0ZSgiQ2xvZ2xvZyAoQVVDID0iLCByb3VuZChhdWMocm9jX2Nsb2dsb2cpLCAzKSwgIikiKQ0KKSwNCmNvbCA9IGMoIiNkOTVmMDIiLCAiIzc1NzBiMyIsICIjZTcyOThhIiksDQpsd2QgPSAyLCBjZXggPSAwLjgsIGJveC5sd2QgPSAwDQopDQpgYGANCg0KICoqxJDDoW5oIGdpw6EgaGnhu4d1IHN14bqldCBtw7QgaMOsbmggYuG6sW5nIFJPQyB2w6AgQVVDKioNCg0KLSBCYSBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIChMb2dpdCwgUHJvYml0LCBDbG9nbG9nKSDEkcaw4bujYyB4w6J5IGThu7FuZyDEkeG7gyBk4buxIMSRb8OhbiBraOG6oyBuxINuZyAqKm3huq9jIGNhbyBodXnhur90IMOhcCoqIGThu7FhIHRyw6puIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcDogKipCTUksIHTDrG5oIHRy4bqhbmcgaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCwgdsOgIHRp4buBbiBz4butIGdpYSDEkcOsbmgqKi4NCg0KLSAqKkJp4buDdSDEkeG7kyBST0MqKiBjaG8gdGjhuqV5IGPhuqMgYmEgbcO0IGjDrG5oIMSR4buBdSBjw7MgKipBVUMgPSAwLjg3MyoqLCBjaOG7qW5nIHThu48ga2jhuqMgbsSDbmcgcGjDom4gbG/huqFpICoqdMawxqFuZyDEkcawxqFuZyoqIHbDoCAqKm3hu6ljIMSR4buZIGThu7EgxJFvw6FuIHLhuqV0IHThu5F0KiouDQoNCi0gQ8OhYyDEkcaw4budbmcgUk9DIGfhuqduIG5oxrAgKip0csO5bmcga2jDrXQqKiwgY2hvIHRo4bqleSB2aeG7h2MgbOG7sWEgY2jhu41uIExvZ2l0LCBQcm9iaXQgaGF5IENsb2dsb2cgKipraMO0bmcgdOG6oW8gcmEgc+G7sSBraMOhYyBiaeG7h3QgxJHDoW5nIGvhu4MgduG7gSBoaeG7h3Ugc3XhuqV0IHBow6JuIGxv4bqhaSoqLg0KDQotIE3hurdjIGTDuSBQcm9iaXQgdsOgIENsb2dsb2cgxJHhuqF0IEFJQyB0aOG6pXAgaMahbiBMb2dpdCwgbmjGsG5nIHRyb25nIHRo4buxYyB0aeG7hW46DQogIC0gKipMb2dpdCoqIHbhuqtuIGzDoCBs4buxYSBjaOG7jW4gcGjhu5UgYmnhur9uIGjGoW4gbmjhu50gKipk4buFIGRp4buFbiBnaeG6o2kqKiwgY8OzIHRo4buDIHF1eSDEkeG7lWkgdHLhu7FjIHRp4bq/cCBzYW5nICoqT2RkcyBSYXRpbyAoT1IpKiouDQogIC0gUHJvYml0IHbDoCBDbG9nbG9nIHnDqnUgY+G6p3UgbmfGsOG7nWkgc+G7rSBk4bulbmcgKipoaeG7g3Ugc8OidSB24buBIHBow6JuIHBo4buRaSBjaHXhuqluIHTDrWNoIGzFqXkqKiBob+G6t2MgaMOgbSBsb2ctbG9nLCDDrXQgxJHGsOG7o2Mgc+G7rSBk4bulbmcgdHJvbmcgY8OhYyBiw6FvIGPDoW8gbMOibSBzw6BuZy4NCg0KDQoNCiAqKkvhur90IGx14bqtbjoqKg0KLSBD4bqjIGJhIG3DtCBow6xuaCDEkeG7gXUgxJHhuqF0IEFVQyBjYW8gKDAuODczKSwgdGjhu4MgaGnhu4duIGto4bqjIG7Eg25nIGThu7EgxJFvw6FuIG3huqFuaC4NCi0gKipMb2dpdCoqIMSRxrDhu6NjIGtodXnhur9uIG5naOG7iyBz4butIGThu6VuZyB2w6w6DQogIC0gROG7hSBkaeG7hW4gZ2nhuqNpLg0KICAtIFBow7kgaOG7o3AgduG7m2kgY2h14bqpbiBiw6FvIGPDoW8gdHJvbmcgY8OhYyBuZ2hpw6puIGPhu6l1IHkgaOG7jWMuDQogIC0gxJBlbSBs4bqhaSBoaeG7h3Ugc3XhuqV0IHBow6JuIGxv4bqhaSB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIFByb2JpdCB2w6AgQ2xvZ2xvZy4NCg0KIyAqKkNIxq/GoE5HIDQ6IEvhur5UIExV4bqsTiBWw4AgS0nhur5OIE5HSOG7iioqDQoNCiMjICoqNC4xIEvhur90IGx14bqtbioqDQoNCk5naGnDqm4gY+G7qXUgbsOgeSDEkcOjIHThuq1wIHRydW5nIHBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gbmd1eSBjxqEgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcCDhu58gbmfGsOG7nWkgdHLGsOG7n25nIHRow6BuaCBi4bqxbmcgY8OhY2gg4bupbmcgZOG7pW5nIGPDoWMgcGjGsMahbmcgcGjDoXAgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCBsxrDhu6NuZyB0csOqbiBi4buZIGThu68gbGnhu4d1ICJIeXBlcnRlbnNpb24gUmlzayBQcmVkaWN0aW9uIERhdGFzZXQiLiBUaMO0bmcgcXVhIHZp4buHYyB0cmnhu4NuIGtoYWkgY8OhYyBtw7QgaMOsbmggaOG7k2kgcXV5IG5o4buLIHBow6JuIGJhbyBn4buTbSBMb2dpdCwgUHJvYml0IHbDoCBDbG9nbG9nLCBuZ2hpw6puIGPhu6l1IMSRw6MgeMOhYyDEkeG7i25oIMSRxrDhu6NjIG3hu6ljIMSR4buZIHTDoWMgxJHhu5luZyBj4bunYSBjw6FjIHnhur91IHThu5EgbmjGsCBjaOG7iSBz4buRIGto4buRaSBjxqEgdGjhu4MgKEJNSSksIHRow7NpIHF1ZW4gaMO6dCB0aHXhu5FjLCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCB2w6AgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCDEkeG6v24geMOhYyBzdeG6pXQgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcC4NCg0KS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleSBjw6FjIHnhur91IHThu5EgbmjGsCBCTUkgKMSR4bq3YyBiaeG7h3Qg4bufIG5ow7NtIHRo4burYSBjw6JuKSwgdMOsbmggdHLhuqFuZyBow7p0IHRodeG7kWMsIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIMSR4buBdSBjw7Mg4bqjbmggaMaw4bufbmcgdGjhu5FuZyBrw6ogxJHDoW5nIGvhu4MgxJHhur9uIG5ndXkgY8ahIG3huq9jIGLhu4duaC4gVHJvbmcgxJHDsywgaMO6dCB0aHXhu5FjIHbDoCB0aeG7gW4gc+G7rSBodXnhur90IMOhcCBu4buVaSBi4bqtdCBsw6AgaGFpIHnhur91IHThu5EgY8OzIHTDoWMgxJHhu5luZyBt4bqhbmggbmjhuqV0LiBD4bulIHRo4buDLCBtw7QgaMOsbmggTG9naXQgY2jhu4kgcmEgcuG6sW5nIG5o4buvbmcgbmfGsOG7nWkgaMO6dCB0aHXhu5FjIGPDsyBvZGRzIHJhdGlvIChPUikgY2FvIGfhuqVwIDYuNSBs4bqnbiB2w6Agbmjhu69uZyBuZ8aw4budaSBjw7MgdGnhu4FuIHPhu60gZ2lhIMSRw6xuaCBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGPDsyBPUiBjYW8gZ+G6pXAgNy4yIGzhuqduIHNvIHbhu5tpIG5ow7NtIGtow7RuZyBjw7MgY8OhYyDEkeG6t2MgxJFp4buDbSBuw6B5LCBjaG8gdGjhuqV5IG5ndXkgY8ahIG3huq9jIGLhu4duaCB0xINuZyBsw6puIMSRw6FuZyBr4buDLg0KDQpW4buBIGhp4buHdSBxdeG6oyBk4buxIMSRb8OhbiwgbmdoacOqbiBj4bupdSDEkcOjIHNvIHPDoW5oIGPDoWMgbcO0IGjDrG5oIHRow7RuZyBxdWEgY8OhYyBjaOG7iSBz4buRIG5oxrAgQUlDIHbDoCDEkcaw4budbmcgY29uZyBST0MuIE3DtCBow6xuaCBDbG9nbG9nIMSR4bqhdCBBSUMgdGjhuqVwIG5o4bqldCAoMTY5OS4xMyksIGNo4bupbmcgdOG7jyDEkcOieSBsw6AgbcO0IGjDrG5oIHBow7kgaOG7o3AgbmjhuqV0IHRyb25nIHZp4buHYyBk4buxIMSRb8OhbiBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgeS4gQ8OhYyBtw7QgaMOsbmggTG9naXQgKEFJQyA9IDE3MTIuMzgpIHbDoCBQcm9iaXQgKEFJQyA9IDE3MDUuNTYpIGPFqW5nIGNobyB0aOG6pXkgaGnhu4d1IHN14bqldCB04buRdCwgduG7m2kgY2jhu4kgc+G7kSBBVUMgxJHhuqF0IDAuODczIHRyw6puIMSRxrDhu51uZyBjb25nIFJPQywgcGjhuqNuIMOhbmgga2jhuqMgbsSDbmcgcGjDom4gbG/huqFpIGNow61uaCB4w6FjIGNhbyBj4bunYSBj4bqjIGJhIG3DtCBow6xuaC4gxJBp4buBdSBuw6B5IGto4bqzbmcgxJHhu4tuaCBy4bqxbmcgY8OhYyB54bq/dSB04buRIMSRxrDhu6NjIGNo4buNbiB0cm9uZyBuZ2hpw6puIGPhu6l1IGPDsyBnacOhIHRy4buLIGThu7EgxJFvw6FuIG3huqFuaCBt4bq9IMSR4buRaSB24bubaSBuZ3V5IGPGoSBt4bqvYyBi4buHbmguDQoNClThu6sgY8OhYyBr4bq/dCBxdeG6oyB0csOqbiwgY8OzIHRo4buDIGvhur90IGx14bqtbiBy4bqxbmcgdmnhu4djIGtp4buDbSBzb8OhdCBjw6FjIHnhur91IHThu5EgaMOgbmggdmkgbmjGsCBow7p0IHRodeG7kWMgdsOgIGR1eSB0csOsIGNo4buJIHPhu5EgQk1JIOG7nyBt4bupYyBiw6xuaCB0aMaw4budbmcgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyB2aeG7h2MgZ2nhuqNtIHRoaeG7g3Ugbmd1eSBjxqEgbeG6r2MgYuG7h25oIGNhbyBodXnhur90IMOhcC4gxJDhu5NuZyB0aOG7nWksIHRp4buBbiBz4butIGh1eeG6v3Qgw6FwIHbDoCB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIGzDoCBuaOG7r25nIHnhur91IHThu5Ega2jDtG5nIHRo4buDIHRoYXkgxJHhu5VpIG5oxrBuZyBj4bqnbiDEkcaw4bujYyBsxrB1IMO9IMSR4buDIHBow6F0IGhp4buHbiB2w6AgY2FuIHRoaeG7h3Agc+G7m20uDQoNCiMjICoqNC4yIEtp4bq/biBuZ2jhu4sqKg0KDQpE4buxYSB0csOqbiBuaOG7r25nIHBow6F0IGhp4buHbiB04burIG5naGnDqm4gY+G7qXUsIGTGsOG7m2kgxJHDonkgbMOgIG3hu5l0IHPhu5Ega2nhur9uIG5naOG7iyBj4bunYSB0w6FjIGdp4bqjIG5o4bqxbSBuw6JuZyBjYW8gaGnhu4d1IHF14bqjIHBow7JuZyBuZ+G7q2EgdsOgIGtp4buDbSBzb8OhdCBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIHRyb25nIGPhu5luZyDEkeG7k25nOg0KDQoNClTEg25nIGPGsOG7nW5nIG5o4bqtbiB0aOG7qWMgY+G7mW5nIMSR4buTbmc6DQpDw6FjIGPGoSBxdWFuIHkgdOG6vyB2w6AgdOG7lSBjaOG7qWMgeMOjIGjhu5lpIGPhuqduIMSR4bqpeSBt4bqhbmggY8OhYyBjaMawxqFuZyB0csOsbmggZ2nDoW8gZOG7pWMgc+G7qWMga2jhu49lLCB04bqtcCB0cnVuZyB2w6BvIHZp4buHYyBuw6JuZyBjYW8gbmjhuq1uIHRo4bupYyB24buBIHTDoWMgaOG6oWkgY+G7p2EgaMO6dCB0aHXhu5FjIHbDoCB04bqnbSBxdWFuIHRy4buNbmcgY+G7p2Egdmnhu4djIGR1eSB0csOsIEJNSSDhu58gbeG7qWMgaOG7o3AgbMO9LiBDw6FjIGNoaeG6v24gZOG7i2NoIHRydXnhu4FuIHRow7RuZyBuw6puIHPhu60gZOG7pW5nIGThu68gbGnhu4d1IGtob2EgaOG7jWMgxJHhu4Mga2h1eeG6v24ga2jDrWNoIHRoYXkgxJHhu5VpIGzhu5FpIHPhu5FuZyBsw6BuaCBt4bqhbmguDQoNCktodXnhur9uIGtow61jaCBzw6BuZyBs4buNYyDEkeG7i25oIGvhu7M6DQpOZ8aw4budaSB0csaw4bufbmcgdGjDoG5oLCDEkeG6t2MgYmnhu4d0IGzDoCBuaOG7r25nIG5nxrDhu51pIGPDsyB0aeG7gW4gc+G7rSBnaWEgxJHDrG5oIG3huq9jIGLhu4duaCBjYW8gaHV54bq/dCDDoXAgaG/hurdjIHRodeG7mWMgbmjDs20gbmd1eSBjxqEgY2FvIChuaMawIG5nxrDhu51pIGjDunQgdGh14buRYywgdGjhu6thIGPDom4pLCBuw6puIMSRxrDhu6NjIGtodXnhur9uIGtow61jaCBraeG7g20gdHJhIGh1eeG6v3Qgw6FwIMSR4buLbmgga+G7sy4gQ8OhYyBjxqEgc+G7nyB5IHThur8gY+G6p24gdOG6oW8gxJFp4buBdSBraeG7h24gdGh14bqtbiBs4bujaSDEkeG7gyB0xINuZyBraOG6oyBuxINuZyB0aeG6v3AgY+G6rW4gZOG7i2NoIHbhu6UgbsOgeS4NCg0KVHJp4buDbiBraGFpIGNoxrDGoW5nIHRyw6xuaCBjYW4gdGhp4buHcCBow6BuaCB2aToNCkPhuqduIHjDonkgZOG7sW5nIHbDoCB0cmnhu4NuIGtoYWkgY8OhYyBjaMawxqFuZyB0csOsbmggaOG7lyB0cuG7oyBjYWkgbmdoaeG7h24gdGh14buRYyBsw6EsIHTGsCB24bqlbiBkaW5oIGTGsOG7oW5nIHbDoCBraHV54bq/biBraMOtY2ggaG/huqF0IMSR4buZbmcgdGjhu4MgY2jhuqV0LiBOaOG7r25nIGNhbiB0aGnhu4dwIG7DoHkga2jDtG5nIGNo4buJIGdpw7pwIGdp4bqjbSBuZ3V5IGPGoSBjYW8gaHV54bq/dCDDoXAgbcOgIGPDsm4gY+G6o2kgdGhp4buHbiBz4bupYyBraOG7j2UgdOG7lW5nIHRo4buDIGPhu6dhIGPhu5luZyDEkeG7k25nLg0KDQpN4bufIHLhu5luZyBuZ2hpw6puIGPhu6l1IHbDoCBj4bqjaSB0aGnhu4duIGThu68gbGnhu4d1Og0KxJDhu4MgY8OzIGPDoWkgbmjDrG4gc8OidSBz4bqvYyBoxqFuLCBjw6FjIG5naGnDqm4gY+G7qXUgdHJvbmcgdMawxqFuZyBsYWkgbsOqbiBt4bufIHLhu5luZyBwaOG6oW0gdmkgZOG7ryBsaeG7h3UsIGJhbyBn4buTbSBjw6FjIHnhur91IHThu5EgYuG7lSBzdW5nIG5oxrAgbeG7qWMgxJHhu5kgY8SDbmcgdGjhurNuZywgY2jhur8gxJHhu5kgxINuIHXhu5FuZyB2w6AgdGjDs2kgcXVlbiB24bqtbiDEkeG7mW5nLiDEkGnhu4F1IG7DoHkgc+G6vSBnacO6cCB0xINuZyBjxrDhu51uZyDEkeG7mSBjaMOtbmggeMOhYyB2w6AgdMOtbmgg4bupbmcgZOG7pW5nIGPhu6dhIGPDoWMgbcO0IGjDrG5oIGThu7EgxJFvw6FuLg0KDQrhu6huZyBk4bulbmcgY8O0bmcgbmdo4buHIGThu7EgxJFvw6FuIHRyb25nIHkgdOG6vzoNCkPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibiBuaMawIENsb2dsb2csIExvZ2l0IHbDoCBQcm9iaXQgY8OzIHRo4buDIMSRxrDhu6NjIHTDrWNoIGjhu6NwIHbDoG8gaOG7hyB0aOG7kW5nIHkgdOG6vyDEkeG7gyBk4buxIMSRb8OhbiBuZ3V5IGPGoSBt4bqvYyBi4buHbmggY2FvIGh1eeG6v3Qgw6FwIGNobyB04burbmcgY8OhIG5ow6JuLiDEkGnhu4F1IG7DoHkgaOG7lyB0cuG7oyBjw6FjIGNodXnDqm4gZ2lhIHkgdOG6vyB0cm9uZyB2aeG7h2MgxJHGsGEgcmEgY8OhYyBiaeG7h24gcGjDoXAgY2FuIHRoaeG7h3Aga+G7i3AgdGjhu51pIHbDoCBjw6EgbmjDom4gaMOzYS4=