1. Giới thiệu data
Dữ liệu khảo sát về thói quen hút thuốc lá ở Vương quốc Anh. Bộ dữ
liệu này có thể được sử dụng để phân tích đặc điểm dân cư của người hút
thuốc và các loại thuốc lá được sử dụng.
Bộ dữ liệu chứa 1691 quan sát trên 12 biến
Chúng ta sẽ phân tích xem giới tính, tình trạng hôn nhân có ảnh hưởng
đến việc hút thuốc hay không dựa vào hai biến định tính là gender,
marital_status và smoke:
gender: Giới tính: Nữ và Nam
marital_status: Trạng thái hôn nhân với các biểu hiện: Ly hôn, Đã
kết hôn, Ly thân, Độc thân và Góa vợ/chồng.
smoke: Trạng thái hút thuốc: Không và Có
2. Lập bảng tần số
Tần số và tần suất biến gender
##
## Female Male
## 965 726
##
## Female Male
## 0.5706682 0.4293318
- Từ kết quả trên ta có thể thấy được trong 1691 lượt tham gia khảo
sát có 965 người có giới tính là nữ (chiếm 57,07%) và 726 người có giới
tính là nam (chiếm 42,93%)
Tần số và tần suất biến marital_status
table(S$marital_status)
##
## Divorced Married Separated Single Widowed
## 161 812 68 427 223
prop.table(table(S$marital_status))
##
## Divorced Married Separated Single Widowed
## 0.09520993 0.48018924 0.04021289 0.25251331 0.13187463
- Thông qua kết quả ta thấy được trong 1691 người khảo sát có 812
người là đã có gia đình, chiếm 48,02% - đây là tỷ lệ cao nhất trong tất
cả các biểu hiện; tiếp theo là tỷ lệ người độc thân chiếm 25,25% (427
người), tỷ lệ người góa vợ/chồng là 13,19% (223 người), người đã ly hôn
là 9,52% (161) và cuối cùng là tỷ lệ người ly thân chiếm tỷ lệ thấp nhất
4,02% (68 người).
Tần số và tần suất biến smoke
##
## No Yes
## 1270 421
##
## No Yes
## 0.7510349 0.2489651
- Kết quả cho thấy trong 1691 lượt tham gia khảo sát có 421 câu trả
lời là có hút thuốc (24,9%) và 1270 câu trả lời là không (75,1%).
Bảng tần số, tần suất và Vẽ đồ thị cho hai biến gender và biến
smoke
##
## No Yes
## Female 731 234
## Male 539 187
##
## No Yes
## Female 0.4322886 0.1383797
## Male 0.3187463 0.1105855

Thông qua kết quả trên ta thấy
Trong nhóm người không hút thuốc có 731 người là nữ (43,23%) và
539 người là nam (31,87%)
Trong nhóm người có câu trả lời “có hút thuốc” có 234 người là nữ
(13,84%) và 187 người là nam (11,06%)
Bảng tần số, tần suất và Vẽ đồ thị cho hai biến gender và biến
smoke
m <- table(S$marital_status, S$smoke)
m
##
## No Yes
## Divorced 103 58
## Married 669 143
## Separated 46 22
## Single 269 158
## Widowed 183 40
prop.table(m)
##
## No Yes
## Divorced 0.06091070 0.03429923
## Married 0.39562389 0.08456535
## Separated 0.02720284 0.01301005
## Single 0.15907747 0.09343584
## Widowed 0.10821999 0.02365464
barplot(m, beside=T, legend=T)

Thông qua kết quả trên ta thấy
Trong nhóm người ‘không hút thuốc’ có 103 người đã ly hôn
(6,09%), 669 người đã kết hôn (39,56%), 46 người đã ly thân (2,72%), 269
người còn độc thân (15,91%) và 183 người là góa vợ/chồng
(10,82%).
Trong nhóm người ‘có hút thuốc’ có 58 người đã ly hôn (3.43%),
143 người đã kết hôn (8,46%), 22 người đã ly thân (1,3%), 158 người còn
độc thân (9,34%) và 40 người là góa vợ/chồng (2,37%).
3. Ước lượng tỷ lệ
Tỷ lệ người có hút thuốc là 0.24897 và không hút thuốc là
0.75103.
Ước lượng với giới tính nữ
Ước lương tỷ lệ người có hút thuốc có giới tính là nữ có thực
sự chiếm 13,84% không
yf <- table(S[S$smoke == "Yes", ]$gender)
yf
##
## Female Male
## 234 187
prop.test(yf["Female"], sum(yf), p = 0.1384)
##
## 1-sample proportions test with continuity correction
##
## data: yf["Female"] out of sum(yf), null probability 0.1384
## X-squared = 611.66, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.1384
## 95 percent confidence interval:
## 0.5068749 0.6037294
## sample estimates:
## p
## 0.5558195
Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ
người có hút thuốc có giới tính là nữ chiếm 13,84%.
Ước lương tỷ lệ người không hút thuốc có giới tính là nữ có
thực sự chiếm 43,23% không
nf <- table(S[S$smoke == "No", ]$gender)
nf
##
## Female Male
## 731 539
prop.test(nf["Female"], sum(nf), p = 0.4323)
##
## 1-sample proportions test with continuity correction
##
## data: nf["Female"] out of sum(nf), null probability 0.4323
## X-squared = 105.67, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.4323
## 95 percent confidence interval:
## 0.5478240 0.6028946
## sample estimates:
## p
## 0.5755906
Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ
người không hút thuốc có giới tính là nữ chiếm 13,84%.
Ước lượng với giới tính nam
Ước lương tỷ lệ người có hút thuốc có giới tính là nam có
thực sự chiếm 11,05% không
ym <- table(S[S$smoke == "Yes", ]$gender)
ym
##
## Female Male
## 234 187
prop.test(ym["Male"], sum(ym), p = 0.1105)
##
## 1-sample proportions test with continuity correction
##
## data: ym["Male"] out of sum(ym), null probability 0.1105
## X-squared = 473.52, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.1105
## 95 percent confidence interval:
## 0.3962706 0.4931251
## sample estimates:
## p
## 0.4441805
Vì p_value = 2.2e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ
người có hút thuốc có giới tính là nam chiếm 11,05%.
Ước lương tỷ lệ người không hút thuốc có giới tính là nam có
thực sự chiếm 31,87% không
nm <- table(S[S$smoke == "No", ]$gender)
nm
##
## Female Male
## 731 539
prop.test(nm["Male"], sum(nm), p = 0.3187)
##
## 1-sample proportions test with continuity correction
##
## data: nm["Male"] out of sum(nm), null probability 0.3187
## X-squared = 64.874, df = 1, p-value = 7.985e-16
## alternative hypothesis: true p is not equal to 0.3187
## 95 percent confidence interval:
## 0.3971054 0.4521760
## sample estimates:
## p
## 0.4244094
Vì p_value = 7.985e-16 < 0,05, ta có thể bác bỏ giả thuyết tỷ lệ
người không hút thuốc có giới tính là nam chiếm 31,87%.
LS0tDQp0aXRsZTogIkJUVk4gQnVvaSAzIg0KYXV0aG9yOiAiVHJ1b25nIExlIE5nb2MgRGllcCINCmRhdGU6ICIyMDI0LTA2LTAxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgcGRmX2RvY3VtZW50Og0KICAgIGV4dHJhX2RlcGVuZGVuY2llczoNCiAgICAgIHZpZXRuYW06IHV0ZjgNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KZ2VvbWV0cnk6DQogICAgICAtIGlubmVyPTNjbQ0KICAgICAgLSBvdXRlcj00Y20NCiAgICAgIC0gdG9wPTNjbQ0KICAgICAgLSBib3R0b209NGNtDQogICAgICAtIGhlYWRzZXA9MjJwdA0KICAgICAgLSBoZWFkaGVpZ2h0PTExcHQNCiAgICAgIC0gZm9vdHNraXA9MzNwdA0KICAgICAgLSBpZ25vcmVoZWFkDQogICAgICAtIGlnbm9yZWZvb3QNCiAgICAgIC0gaGVpZ2h0cm91bmRlZA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShEVCkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmBgYA0KDQoNCiMgKioxLiBHaeG7m2kgdGhp4buHdSBkYXRhKioNCg0KROG7ryBsaeG7h3Uga2jhuqNvIHPDoXQgduG7gSB0aMOzaSBxdWVuIGjDunQgdGh14buRYyBsw6Eg4bufIFbGsMahbmcgcXXhu5FjIEFuaC4gQuG7mSBk4buvIGxp4buHdSBuw6B5IGPDsyB0aOG7gyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyBwaMOibiB0w61jaCDEkeG6t2MgxJFp4buDbSBkw6JuIGPGsCBj4bunYSBuZ8aw4budaSBow7p0IHRodeG7kWMgdsOgIGPDoWMgbG/huqFpIHRodeG7kWMgbMOhIMSRxrDhu6NjIHPhu60gZOG7pW5nLg0KDQpC4buZIGThu68gbGnhu4d1IGNo4bupYSAxNjkxIHF1YW4gc8OhdCB0csOqbiAxMiBiaeG6v24NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NClMgPC0gcmVhZF9jc3YoIkQ6L0Rvd25sb2FkL3Ntb2tpbmcuY3N2IikNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZGF0YXRhYmxlKFMpDQpgYGANCg0KQ2jDum5nIHRhIHPhur0gcGjDom4gdMOtY2ggeGVtIGdp4bubaSB0w61uaCwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gdmnhu4djIGjDunQgdGh14buRYyBoYXkga2jDtG5nIGThu7FhIHbDoG8gaGFpIGJp4bq/biDEkeG7i25oIHTDrW5oIGzDoCBnZW5kZXIsIG1hcml0YWxfc3RhdHVzIHbDoCBzbW9rZToNCg0KLSAgIGdlbmRlcjogR2nhu5tpIHTDrW5oOiBO4buvIHbDoCBOYW0NCg0KLSAgIG1hcml0YWxfc3RhdHVzOiBUcuG6oW5nIHRow6FpIGjDtG4gbmjDom4gduG7m2kgY8OhYyBiaeG7g3UgaGnhu4duOiBMeSBow7RuLCDEkMOjIGvhur90IGjDtG4sIEx5IHRow6JuLCDEkOG7mWMgdGjDom4gdsOgIEfDs2EgduG7oy9jaOG7k25nLg0KDQotICAgc21va2U6IFRy4bqhbmcgdGjDoWkgaMO6dCB0aHXhu5FjOiBLaMO0bmcgdsOgIEPDsw0KDQojICoqMi4gTOG6rXAgYuG6o25nIHThuqduIHPhu5EqKg0KDQojIyAqKlThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBiaeG6v24gZ2VuZGVyKioNCg0KYGBge3IgZWNobz1GQUxTRX0NCnRhYmxlKFMkZ2VuZGVyKQ0KcHJvcC50YWJsZSh0YWJsZShTJGdlbmRlcikpDQpgYGANCi0gICBU4burIGvhur90IHF14bqjIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXkgxJHGsOG7o2MgdHJvbmcgMTY5MSBsxrDhu6N0IHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPDsyA5NjUgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBsw6AgbuG7ryAoY2hp4bq/bSA1NywwNyUpIHbDoCA3MjYgbmfGsOG7nWkgY8OzIGdp4bubaSB0w61uaCBsw6AgbmFtIChjaGnhur9tIDQyLDkzJSkNCg0KIyMgKipU4bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgYmnhur9uIG1hcml0YWxfc3RhdHVzKioNCg0KYGBge3J9DQp0YWJsZShTJG1hcml0YWxfc3RhdHVzKQ0KcHJvcC50YWJsZSh0YWJsZShTJG1hcml0YWxfc3RhdHVzKSkNCmBgYA0KLSAgIFRow7RuZyBxdWEga+G6v3QgcXXhuqMgdGEgdGjhuqV5IMSRxrDhu6NjIHRyb25nIDE2OTEgbmfGsOG7nWkga2jhuqNvIHPDoXQgY8OzIDgxMiBuZ8aw4budaSBsw6AgxJHDoyBjw7MgZ2lhIMSRw6xuaCwgY2hp4bq/bSA0OCwwMiUgLSDEkcOieSBsw6AgdOG7tyBs4buHIGNhbyBuaOG6pXQgdHJvbmcgdOG6pXQgY+G6oyBjw6FjIGJp4buDdSBoaeG7h247IHRp4bq/cCB0aGVvIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgxJHhu5ljIHRow6JuIGNoaeG6v20gMjUsMjUlICg0MjcgbmfGsOG7nWkpLCB04bu3IGzhu4cgbmfGsOG7nWkgZ8OzYSB24bujL2No4buTbmcgbMOgIDEzLDE5JSAoMjIzIG5nxrDhu51pKSwgbmfGsOG7nWkgxJHDoyBseSBow7RuIGzDoCA5LDUyJSAoMTYxKSB2w6AgY3Xhu5FpIGPDuW5nIGzDoCB04bu3IGzhu4cgbmfGsOG7nWkgbHkgdGjDom4gY2hp4bq/bSB04bu3IGzhu4cgdGjhuqVwIG5o4bqldCA0LDAyJSAoNjggbmfGsOG7nWkpLg0KDQojIyBU4bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgYmnhur9uIHNtb2tlDQoNCmBgYHtyIGVjaG89RkFMU0V9DQp0YWJsZShTJHNtb2tlKQ0KcHJvcC50YWJsZSh0YWJsZShTJHNtb2tlKSkNCmBgYA0KLSAgIEvhur90IHF14bqjIGNobyB0aOG6pXkgdHJvbmcgMTY5MSBsxrDhu6N0IHRoYW0gZ2lhIGto4bqjbyBzw6F0IGPDsyA0MjEgY8OidSB0cuG6oyBs4budaSBsw6AgY8OzIGjDunQgdGh14buRYyAoMjQsOSUpIHbDoCAxMjcwIGPDonUgdHLhuqMgbOG7nWkgbMOgIGtow7RuZyAoNzUsMSUpLg0KDQojIyBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBW4bq9IMSR4buTIHRo4buLIGNobyBoYWkgYmnhur9uIGdlbmRlciB2w6AgYmnhur9uIHNtb2tlDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpuIDwtIHRhYmxlKFMkZ2VuZGVyLCBTJHNtb2tlKQ0Kbg0KcHJvcC50YWJsZShuKQ0KYmFycGxvdChuLCBiZXNpZGU9VCwgbGVnZW5kPVQpDQpgYGANCg0KVGjDtG5nIHF1YSBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMgY8OzIDczMSBuZ8aw4budaSBsw6AgbuG7ryAoNDMsMjMlKSB2w6AgNTM5IG5nxrDhu51pIGzDoCBuYW0gKDMxLDg3JSkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pIGPDsyBjw6J1IHRy4bqjIGzhu51pICJjw7MgaMO6dCB0aHXhu5FjIiBjw7MgMjM0IG5nxrDhu51pIGzDoCBu4buvICgxMyw4NCUpIHbDoCAxODcgbmfGsOG7nWkgbMOgIG5hbSAoMTEsMDYlKQ0KDQojIyBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBW4bq9IMSR4buTIHRo4buLIGNobyBoYWkgYmnhur9uIGdlbmRlciB2w6AgYmnhur9uIHNtb2tlDQoNCmBgYHtyfQ0KbSA8LSB0YWJsZShTJG1hcml0YWxfc3RhdHVzLCBTJHNtb2tlKQ0KbQ0KcHJvcC50YWJsZShtKQ0KYmFycGxvdChtLCBiZXNpZGU9VCwgbGVnZW5kPVQpDQpgYGANCg0KVGjDtG5nIHF1YSBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXkNCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pICdraMO0bmcgaMO6dCB0aHXhu5FjJyBjw7MgMTAzIG5nxrDhu51pIMSRw6MgbHkgaMO0biAoNiwwOSUpLCA2NjkgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuICgzOSw1NiUpLCA0NiBuZ8aw4budaSDEkcOjIGx5IHRow6JuICgyLDcyJSksIDI2OSBuZ8aw4budaSBjw7JuIMSR4buZYyB0aMOibiAoMTUsOTElKSB2w6AgMTgzIG5nxrDhu51pIGzDoCBnw7NhIHbhu6MvY2jhu5NuZyAoMTAsODIlKS4NCg0KLSAgIFRyb25nIG5ow7NtIG5nxrDhu51pICdjw7MgaMO6dCB0aHXhu5FjJyBjw7MgNTggbmfGsOG7nWkgxJHDoyBseSBow7RuICgzLjQzJSksIDE0MyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gKDgsNDYlKSwgMjIgbmfGsOG7nWkgxJHDoyBseSB0aMOibiAoMSwzJSksIDE1OCBuZ8aw4budaSBjw7JuIMSR4buZYyB0aMOibiAoOSwzNCUpIHbDoCA0MCBuZ8aw4budaSBsw6AgZ8OzYSB24bujL2No4buTbmcgKDIsMzclKS4NCg0KIyAqKjMuIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cqKg0KDQpU4bu3IGzhu4cgbmfGsOG7nWkgY8OzIGjDunQgdGh14buRYyBsw6AgMC4yNDg5NyB2w6Aga2jDtG5nIGjDunQgdGh14buRYyBsw6AgMC43NTEwMy4NCg0KIyMjIMav4bubYyBsxrDhu6NuZyB24bubaSBnaeG7m2kgdMOtbmggbuG7rw0KDQogICoqxq/hu5tjIGzGsMahbmcgdOG7tyBs4buHIG5nxrDhu51pIGPDsyBow7p0IHRodeG7kWMgY8OzIGdp4bubaSB0w61uaCBsw6AgbuG7ryBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAxMyw4NCUga2jDtG5nKioNCg0KYGBge3J9DQp5ZiA8LSB0YWJsZShTW1Mkc21va2UgPT0gIlllcyIsIF0kZ2VuZGVyKQ0KeWYgDQpgYGANCg0KYGBge3J9DQpwcm9wLnRlc3QoeWZbIkZlbWFsZSJdLCBzdW0oeWYpLCBwID0gMC4xMzg0KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLDA1LCB0YSBjw7MgdGjhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG7hu68gY2hp4bq/bSAxMyw4NCUuDQoNCiAgKirGr+G7m2MgbMawxqFuZyB04bu3IGzhu4cgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYyBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBu4buvIGPDsyB0aOG7sWMgc+G7sSBjaGnhur9tIDQzLDIzJSBraMO0bmcqKg0KDQpgYGB7cn0NCm5mIDwtIHRhYmxlKFNbUyRzbW9rZSA9PSAiTm8iLCBdJGdlbmRlcikNCm5mDQpgYGANCmBgYHtyfQ0KcHJvcC50ZXN0KG5mWyJGZW1hbGUiXSwgc3VtKG5mKSwgcCA9IDAuNDMyMykNCmBgYA0KVsOsIHBfdmFsdWUgPSAyLjJlLTE2IDwgMCwwNSwgdGEgY8OzIHRo4buDIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCB04bu3IGzhu4cgbmfGsOG7nWkga2jDtG5nIGjDunQgdGh14buRYyBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBu4buvIGNoaeG6v20gMTMsODQlLg0KDQojIyMgxq/hu5tjIGzGsOG7o25nIHbhu5tpIGdp4bubaSB0w61uaCBuYW0NCg0KICAqKsav4bubYyBsxrDGoW5nIHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAxMSwwNSUga2jDtG5nKioNCiAgDQpgYGB7cn0NCnltIDwtIHRhYmxlKFNbUyRzbW9rZSA9PSAiWWVzIiwgXSRnZW5kZXIpDQp5bQ0KYGBgDQpgYGB7cn0NCnByb3AudGVzdCh5bVsiTWFsZSJdLCBzdW0oeW0pLCBwID0gMC4xMTA1KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDIuMmUtMTYgPCAwLDA1LCB0YSBjw7MgdGjhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IHThu7cgbOG7hyBuZ8aw4budaSBjw7MgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjaGnhur9tIDExLDA1JS4NCg0KICAqKsav4bubYyBsxrDGoW5nIHThu7cgbOG7hyBuZ8aw4budaSBraMO0bmcgaMO6dCB0aHXhu5FjIGPDsyBnaeG7m2kgdMOtbmggbMOgIG5hbSBjw7MgdGjhu7FjIHPhu7EgY2hp4bq/bSAzMSw4NyUga2jDtG5nKioNCg0KYGBge3J9DQpubSA8LSB0YWJsZShTW1Mkc21va2UgPT0gIk5vIiwgXSRnZW5kZXIpDQpubQ0KYGBgDQpgYGB7cn0NCnByb3AudGVzdChubVsiTWFsZSJdLCBzdW0obm0pLCBwID0gMC4zMTg3KQ0KYGBgDQpWw6wgcF92YWx1ZSA9IDcuOTg1ZS0xNiA8IDAsMDUsIHRhIGPDsyB0aOG7gyBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgdOG7tyBs4buHIG5nxrDhu51pIGtow7RuZyBow7p0IHRodeG7kWMgY8OzIGdp4bubaSB0w61uaCBsw6AgbmFtIGNoaeG6v20gMzEsODclLg0KDQojICoqNC4gUmVsYXRpdmUgUmlzayoqDQoNCmBgYHtyfQ0KYWRkbWFyZ2lucyhuKQ0KUmVsUmlzayhuKQ0KYGBgDQotICAgbiA+IDEgKDEuMDIwMzI0KSBjaG8gdGjhuqV5IHLhurFuZyBuaMOzbSBuZ8aw4budaSBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBuYW0gY8OzIHh1IGjGsOG7m25nIGjDunQgdGh14buRYyBjYW8gaMahbiBzbyB24bubaSBuaMOzbSBu4buvLg0KDQojICoqNS4gT2RkIFJhdGlvKioNCg0KYGBge3J9DQpPZGRzUmF0aW8obikNCmBgYA0KDQpgYGB7cn0NCm9kZHNyYXRpbyhuKQ0KYGBgDQotICAgVOG7tyBs4buHIGNow6puaCAoMS4wODM4MTMpID4gMTogdGjhu4MgaGnhu4duIGto4bqjIG7Eg25nIGtow7RuZyBow7p0IHRodeG7kWMg4bufIG5ow7NtIGdp4bubaSB0w61uaCBu4buvIGNhbyBoxqFuIG5ow7NtIGdp4bubaSB0w61uaCBuYW0gZ+G6pXAgMS4wODM4MTMgbOG6p24uDQoNCi0gICBUcm9uZyBraG/huqNuZyB0aW4gY+G6rXkgOTUlLCBLaOG6oyBuxINuZyBow7p0IHRodeG7kWMg4bufIGdp4bubaSB0w61uaCBuYW0gdOG7qyAwLjg2NzM5MzcgxJHhur9uIDEuMzUzMjIyIHbhu5tpIHRpw6p1IGNodeG6qW4gbMOgIDEuMDgzODc4Lg0K