BỘ DỮ LIỆU
Bộ dữ liệu về tình hình nông nghiệp của Ấn Độ trong những năm cuối TK
19 đến nay. Dữ liệu được tải về từ Dataset
Search
1. Tổng quan về nông nghiệp Ấn Độ
Nằm ở khu vực Tây Nam Á, Ấn Độ có diện tích tự nhiên gần 33 triệu
km2, trong đó, diện tích đất nông nghiệp là 141,23 triệu ha với dân số
trên 1 tỉ người, có truyền thống văn hóa, lịch sử lâu đời và thế mạnh về
phát triển nông nghiệp. Lục địa này có những đồng bằng rộng lớn mà không
một quốc gia nào trên thế giới có được. Chỉ riêng đồng bằng Ấn - Hằng,
diện tích khoảng 775.000 km2 (gấp 2,3 lần diện tích Việt Nam) với điều
kiện tự nhiên thuận lợi đã tạo nên vùng kinh tế trù phú.
Sau đây là dữ liệu về nền nông nghiệp của Ấn Độ đã được tải về
library(csv)
nt <- read.csv(file= 'C:/Users/Admin/Downloads/India Agriculture Crop Production.csv')
nt <- nt[nt$State=='Andaman and Nicobar Islands' | nt$State=='Uttarakhand' | nt$State=='West Bengal' | nt$State=='Uttarakhand' , ]
Bảng dữ liệu cho ta biết các thông tin sau:
- State: Bang ở Ấn Độ
- DiDistrict: tên một thị xã, thị trấn hay thành phố… thuộc bang nào
đó ở Ấn Độ
- Crop: tên nông sản sản xuất
- Year: năm phân tích
- Season: mùa vụ
- Area: diện tích trồng trọt, sản xuất
- Area.Units: đơn vị diện tích trồng trọt sản xuất
(hectare)
- Production: sản lượng
- Production.Units: đơn vị sản lượng (tấn)
- Yiels: năng suất
VẼ BIỂU ĐỒ
1. Nông sản
Ngành nông nghiệp là nguồn sinh kế chính của khoảng 58% dân số Ấn Độ.
Mặc dù đóng góp của nó vào tổng sản phẩm quốc nội (GDP) đã giảm xuống
dưới 20% và đóng góp của các ngành khác tăng với tốc độ nhanh hơn.
Do đó các loại nông sản Ấn Độ đa dạng và phong phú với nhiều loại
khác nhau điển hình là gạo, gừng, khoai tây, ragi…
nt1 <- nt[nt$Crop=='Rice' | nt$Crop=='Sugarcane' | nt$Crop=='Ragi' | nt$Crop=='Wheat' | nt$Crop=='Potato' | nt$Crop=='Ginger', ]
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
library(scales)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ readr::col_factor() masks scales::col_factor()
## ✖ purrr::discard() masks scales::discard()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
nt1 %>% group_by(Crop) %>% summarise(m= n()) %>% ggplot(aes(x = Crop, y = m )) +
geom_col(fill='pink') +
labs(x = 'Nông sản ', y = 'N')

Qua biểu đồ tổng hợp các loại nông sản phổ biến trong đó gạo vẫn là
loại nông sản đc trồng nhiều nhất ở Ấn Độ
nt1 %>% group_by(Crop) %>% summarise(n = n()) %>%
ggplot(aes(x = '', y = n,fill = Crop)) +
geom_col() +
geom_text(aes(x = 1.3, label = n),position = position_stack(vjust = .5)) +
coord_polar('y')

nt1 %>% group_by(Crop) %>% summarise(n = mean(Yield)) %>%
ggplot(aes(x = '', y = n,fill = Crop)) +
geom_col( color = 'black' ) +
geom_text(aes(label = n),position = position_stack(vjust = 1)) +
labs( y = 'Năng suất TB')

Qua biểu đồ trên ta có thể thấy: Năng suất gạo ở Ấn Độ có thể được
coi là đáng chú ý so với nhiều loại nông sản khác. Ấn Độ là một trong
những nhà sản xuất gạo lớn nhất thế giới và gạo là một phần quan trọng
của chế độ ăn uống của người dân ở đây.
2. Sản lượng
Đối với đất nước có nền nông nghiệp là chủ yếu như Ấn Độ thì sản
lượng nông sản hằng năm là vấn đề cần quan tâm nhất. Sản lượng nông sản
của Ấn Độ đã có sự biến động trong những năm qua do ảnh hưởng của nhiều
yếu tố khác nhau như thời tiết, chính sách nông nghiệp, công nghệ, và
biến động thị trường.
nt1 %>% na.omit() %>% ggplot(aes(x = Production , y = Area , color = Crop )) +
geom_point()

library(gganimate)
## Warning: package 'gganimate' was built under R version 4.3.3
library(magick)
## Warning: package 'magick' was built under R version 4.3.3
## Linking to ImageMagick 6.9.12.98
## Enabled features: cairo, freetype, fftw, ghostscript, heic, lcms, pango, raw, rsvg, webp
## Disabled features: fontconfig, x11
nt1 %>%
na.omit() %>%
ggplot(aes(x = Area, y = Production, color = Crop)) +
geom_line() +
geom_point(size=2)

Qua biểu đồ ta thấy được sự thay đổi sản lượng từng thời kì thông qua
các yếu tố các nhau
nt3 <- nt1 %>% group_by(State, Crop) %>% summarise(n = n(), .groups='drop')
nt3 %>% ggplot(aes(x = State , y = n)) +
geom_col(data = nt3 %>% filter(Crop=='Rice'), fill = 'yellow') +
geom_col(data = nt3 %>% filter(Crop=='Ginger'), fill = 'black')

3. Diện tích
Diện tích đất nông nghiệp của Ấn Độ rộng lớn và đa dạng, cung cấp cơ
sở quan trọng cho sản xuất nông nghiệp. Đất nông nghiệp của nước này
được sử dụng để trồng nhiều loại cây trồng khác nhau, từ lúa gạo đến đậu
và mía. Điều này đóng vai trò quan trọng trong đảm bảo an sinh xã hội và
kinh tế của hàng triệu người dân.
nt1 %>% group_by(Crop) %>% summarise(n= sum(Area))%>% ggplot( aes(x = Crop, y= n )) + geom_col (fill='red') + labs(x= 'Nông sản', y= 'diện tích' )

Ấn Độ có một trong những diện tích canh tác gạo lớn nhất thế giới,
với hơn 40 triệu hecta đất được dành cho gieo trồng gạo. Tuy nhiên, mặc
dù diện tích này lớn, hiệu suất canh tác vẫn còn thấp so với nhiều quốc
gia khác.
nt1 %>% na.omit() %>% ggplot( aes( x= Area , y = Production , color = Crop )) +
geom_point(size = 1,alpha = 0.5) +
geom_smooth( method = "lm", size = 2)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

nt1 %>% group_by(State) %>% summarise(n= mean(Area)) %>%
ggplot(aes(x = State, y = n)) +
geom_col(fill = 'yellow')+
labs(x= ' Khu vực', y= 'Diện tích')

Với ba khu vực được coi là có diện tích đất nông nghiệp cao nhất Ấn
Độ là West Bengal, Andaman and Nicobar Islands, Uttarakhand ta thấy diện
tích trung bình giữa các khu vực có sự chênh lệch rất lớn đặc biệt là
vùng Wesst Bengal có diện tích trung bình mỗi quận lên tới 50000
hecta.
4. Năng suất
Năng suất gạo ở Ấn Độ là một chủ đề rất quan trọng và phức tạp, vì nó
ảnh hưởng đến nền kinh tế, an ninh lương thực và cuộc sống hàng ngày của
hàng triệu người dân.
nt1 %>% na.omit() %>% ggplot(aes(y = Yield , x = State , fill = Crop)) +
geom_boxplot()+
theme(legend.position = "none")

nt1 %>% na.omit() %>% ggplot(aes(y = Yield, x = State, color = State))+
geom_jitter()

nt1 %>% na.omit() %>% ggplot(aes(y = Yield, x = State, color = State))+
geom_violin()

Ba biểu đồ trên thể hiện sự thay đổi của năng suất nông sản Ấn Độ
theo từng khu vực khác nhau: nhìn biểu đồ ta thấy rõ khu vực West Bengal
có năng suất gạo lớn nhất và như gấp đôi hai khu vực còn lại.
5. MÙA VỤ
Ấn Độ là một trong những quốc gia có hệ thống mùa vụ phong phú và đa
dạng nhất trên thế giới, với sự biến đổi của khí hậu và địa hình ảnh
hưởng đến việc trồng trọt và sản xuất nông sản. Mỗi mùa vụ đều mang lại
các cơ hội và thách thức riêng, và nó đóng vai trò quan trọng trong đảm
bảo an ninh lương thực của quốc gia. Sự thành công của các mùa vụ này
không chỉ phụ thuộc vào yếu tố tự nhiên mà còn phụ thuộc vào các biện
pháp quản lý nông nghiệp và chính sách hỗ trợ từ chính phủ.
nt2 <- nt1 %>% group_by(nt1$Season) %>% summarise(n=n())
hist(nt2$n, main="Phân Phối Mùa Vụ" , xlab="Mùa Vụ ", col="orange", border="black")

LS0tDQp0aXRsZTogIk5ISeG7hk0gVuG7pCA1Ig0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgbnVtYmVyIHNlY3Rpb246IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KKioqDQojIyAqKk5ISeG7hk0gVuG7pCA1IELhuqJORyBQSMOCTiBUw41DSCBW4buAIFTDjE5IIEjDjE5IIFPhuqJOIFhV4bqkVCBOw5RORyBOR0hJ4buGUCBD4bumQSDhuqROIMSQ4buYICoqDQoqKioNCg0KIyMgKipN4bukQyBUScOKVSBQSMOCTiBUw41DSCoqIA0KDQogICBQaMOibiB0w61jaCB0w6xuaCBow6xuaCBz4bqjbiB4deG6pXQgbsO0bmcgbmdoaeG7h3Ag4bufIOG6pG4gxJDhu5kgxJHDsmkgaOG7j2kgc+G7sSBjaMO6IMO9IMSR4bq/biBt4buZdCBz4buRIG3hu6VjIHRpw6p1IHF1YW4gdHLhu41uZyDEkeG7gyBoaeG7g3UgcsO1IHbhu4EgdGjhu4sgdHLGsOG7nW5nIG7DtG5nIG5naGnhu4dwIGPhu6dhIHF14buRYyBnaWEgbsOgeS4gRMaw4bubaSDEkcOieSBsw6AgbeG7mXQgc+G7kSBt4bulYyB0acOqdSBxdWFuIHRy4buNbmcgY+G6p24gY2jDuiDDvToNCg0KKiAgxJDDoW5oIGdpw6EgbeG7qWMgxJHhu5kgaGnhu4d1IHF14bqjIGPhu6dhIHPhuqNuIHh14bqldCBuw7RuZyBuZ2hp4buHcCANCg0KKiAgTmdoacOqbiBj4bupdSB24buBIHPhu7Eg4bqjbmggaMaw4bufbmcgY+G7p2EgY8OhYyB54bq/dSB04buRIG5oxrAgdGjhu51pIHRp4bq/dCwgY2jhuqV0IGRpbmggZMaw4buhbmcgxJHhuqV0LCB2w6Aga+G7uSB0aHXhuq10IGNhbmggdMOhYyDEkeG7kWkgduG7m2kgbsSDbmcgc3XhuqV0LiBOZ2hpw6puIGPhu6l1IHPhu7EgcGjDom4gYuG7kSDEkeG6pXQgxJFhaSDhu58g4bqkbiDEkOG7mSwgY8WpbmcgbmjGsCDEkcOhbmggZ2nDoSBoaeG7h3UgcXXhuqMgc+G7rSBk4bulbmcgxJHhuqV0IMSRYWkgdHJvbmcgbsO0bmcgbmdoaeG7h3AuDQoNCiogIFhlbSB4w6l0IOG6o25oIGjGsOG7n25nIGPhu6dhIG7DtG5nIG5naGnhu4dwIMSR4buRaSB24bubaSBtw7RpIHRyxrDhu51uZyB2w6AgcGjDoXQgdHJp4buDbiBjw6FjIGJp4buHbiBwaMOhcCBi4bqjbyB24buHIG3DtGkgdHLGsOG7nW5nIHRyb25nIHPhuqNuIHh14bqldCBuw7RuZyBuZ2hp4buHcC4NCg0KICANCiMjICoqUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVSoqDQoNCiAgU+G7rSBk4bulbmcgY8OhYyBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBk4buvIGxp4buHdToNCiAgDQoqIFLDunQgdHLDrWNoIGThu68gbGnhu4d1DQoNCiogTcOjIGjDs2EgZOG7ryBsaeG7h3UgDQoNCiogTOG6rXAgYuG6o25nIHThuqduIHPhu5EgDQoNCiogVMOtbmggdG/DoW4gY8OhYyDEkeG6t2MgdHLGsG5nIMSRbyBsxrDhu51uZw0KDQoqIE5o4bqtbiB4w6l0IGvhur90IHF14bqjIA0KDQojIyAqKkLhu5ggROG7riBMSeG7hlUgKioNCg0KICBC4buZIGThu68gbGnhu4d1IHbhu4EgdMOsbmggaMOsbmggbsO0bmcgbmdoaeG7h3AgY+G7p2Eg4bqkbiDEkOG7mSB0cm9uZyBuaOG7r25nIG7Eg20gY3Xhu5FpIFRLIDE5IMSR4bq/biBuYXkuIEThu68gbGnhu4d1IMSRxrDhu6NjIHThuqNpIHbhu4EgdOG7qyBbRGF0YXNldCBTZWFyY2hdKGh0dHBzOi8vZGF0YXNldHNlYXJjaC5yZXNlYXJjaC5nb29nbGUuY29tL3NlYXJjaD9zcmM9MyZxdWVyeT1hZ3JpY3VsdHVyZSZkb2NpZD1MMmN2TVRGcWVuTnlYM016TmclM0QlM0QpDQoNCiAqKjEuIFThu5VuZyBxdWFuIHbhu4EgbsO0bmcgbmdoaeG7h3Ag4bqkbiDEkOG7mSoqDQoNCiAgIE7hurFtIOG7nyBraHUgduG7sWMgVMOieSBOYW0gw4EsIOG6pG4gxJDhu5kgY8OzIGRp4buHbiB0w61jaCB04buxIG5oacOqbiBn4bqnbiAzMyB0cmnhu4d1IGttMiwgdHJvbmcgxJHDsywgZGnhu4duIHTDrWNoIMSR4bqldCBuw7RuZyBuZ2hp4buHcCBsw6AgMTQxLDIzIHRyaeG7h3UgaGEgduG7m2kgZMOibiBz4buRIHRyw6puIDEgdOG7iSBuZ8aw4budaSwgY8OzIHRydXnhu4FuIHRo4buRbmcgdsSDbiBow7NhLCBs4buLY2ggc+G7rSBsw6J1IMSR4budaSB2w6AgdGjhur8gbeG6oW5oIHbhu4EgcGjDoXQgdHJp4buDbiBuw7RuZyBuZ2hp4buHcC4gTOG7pWMgxJHhu4thIG7DoHkgY8OzIG5o4buvbmcgxJHhu5NuZyBi4bqxbmcgcuG7mW5nIGzhu5tuIG3DoCBraMO0bmcgbeG7mXQgcXXhu5FjIGdpYSBuw6BvIHRyw6puIHRo4bq/IGdp4bubaSBjw7MgxJHGsOG7o2MuIENo4buJIHJpw6puZyDEkeG7k25nIGLhurFuZyDhuqRuIC0gSOG6sW5nLCBkaeG7h24gdMOtY2gga2hv4bqjbmcgNzc1LjAwMCBrbTIgKGfhuqVwIDIsMyBs4bqnbiBkaeG7h24gdMOtY2ggVmnhu4d0IE5hbSkgduG7m2kgxJFp4buBdSBraeG7h24gdOG7sSBuaGnDqm4gdGh14bqtbiBs4bujaSDEkcOjIHThuqFvIG7Dqm4gdsO5bmcga2luaCB04bq/IHRyw7kgcGjDui4gDQogICANCiAgIFNhdSDEkcOieSBsw6AgZOG7ryBsaeG7h3UgduG7gSBu4buBbiBuw7RuZyBuZ2hp4buHcCBj4bunYSDhuqRuIMSQ4buZIMSRw6MgxJHGsOG7o2MgdOG6o2kgduG7gSANCiAgIA0KYGBge3J9DQpsaWJyYXJ5KGNzdikNCm50IDwtIHJlYWQuY3N2KGZpbGU9ICdDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvSW5kaWEgQWdyaWN1bHR1cmUgQ3JvcCBQcm9kdWN0aW9uLmNzdicpDQpudCA8LSBudFtudCRTdGF0ZT09J0FuZGFtYW4gYW5kIE5pY29iYXIgSXNsYW5kcycgfCBudCRTdGF0ZT09J1V0dGFyYWtoYW5kJyB8IG50JFN0YXRlPT0nV2VzdCBCZW5nYWwnIHwgbnQkU3RhdGU9PSdVdHRhcmFraGFuZCcgICwgXQ0KYGBgDQogICANCkLhuqNuZyBk4buvIGxp4buHdSBjaG8gdGEgYmnhur90IGPDoWMgdGjDtG5nIHRpbiBzYXU6IA0KICAgDQoqIFN0YXRlOiBCYW5nIOG7nyDhuqRuIMSQ4buZDQoqIERpRGlzdHJpY3Q6IHTDqm4gbeG7mXQgdGjhu4sgeMOjLCB0aOG7iyB0cuG6pW4gaGF5IHRow6BuaCBwaOG7kS4uLiB0aHXhu5ljIGJhbmcgbsOgbyDEkcOzIOG7nyDhuqRuIMSQ4buZDQoqIENyb3A6IHTDqm4gbsO0bmcgc+G6o24gc+G6o24geHXhuqV0DQoqIFllYXI6IG7Eg20gcGjDom4gdMOtY2ggDQoqIFNlYXNvbjogbcO5YSB24bulDQoqIEFyZWE6IGRp4buHbiB0w61jaCB0cuG7k25nIHRy4buNdCwgc+G6o24geHXhuqV0DQoqIEFyZWEuVW5pdHM6IMSRxqFuIHbhu4sgZGnhu4duIHTDrWNoIHRy4buTbmcgdHLhu410IHPhuqNuIHh14bqldCAoKmhlY3RhcmUqKQ0KKiBQcm9kdWN0aW9uOiBz4bqjbiBsxrDhu6NuZw0KKiBQcm9kdWN0aW9uLlVuaXRzOiDEkcahbiB24buLIHPhuqNuIGzGsOG7o25nICgqdOG6pW4qKQ0KKiBZaWVsczogbsSDbmcgc3XhuqV0IA0KDQojIyAqKlbhurwgQknhu4JVIMSQ4buSKiogDQoNCiMjIyAqKjEuIE7DtG5nIHPhuqNuKiogDQoNCiAgIE5nw6BuaCBuw7RuZyBuZ2hp4buHcCBsw6Agbmd14buTbiBzaW5oIGvhur8gY2jDrW5oIGPhu6dhIGtob+G6o25nIDU4JSBkw6JuIHPhu5Eg4bqkbiDEkOG7mS4gTeG6t2MgZMO5IMSRw7NuZyBnw7NwIGPhu6dhIG7DsyB2w6BvIHThu5VuZyBz4bqjbiBwaOG6qW0gcXXhu5FjIG7hu5lpIChHRFApIMSRw6MgZ2nhuqNtIHh14buRbmcgZMaw4bubaSAyMCUgdsOgIMSRw7NuZyBnw7NwIGPhu6dhIGPDoWMgbmfDoG5oIGtow6FjIHTEg25nIHbhu5tpIHThu5FjIMSR4buZIG5oYW5oIGjGoW4uIA0KICAgDQogICBEbyDEkcOzIGPDoWMgbG/huqFpIG7DtG5nIHPhuqNuIOG6pG4gxJDhu5kgxJFhIGThuqFuZyB2w6AgcGhvbmcgcGjDuiB24bubaSBuaGnhu4F1IGxv4bqhaSBraMOhYyBuaGF1IMSRaeG7g24gaMOsbmggbMOgIGfhuqFvLCBn4burbmcsIGtob2FpIHTDonksIHJhZ2kuLi4NCg0KYGBge3J9DQpudDEgPC0gbnRbbnQkQ3JvcD09J1JpY2UnIHwgbnQkQ3JvcD09J1N1Z2FyY2FuZScgfCBudCRDcm9wPT0nUmFnaScgfCBudCRDcm9wPT0nV2hlYXQnIHwgbnQkQ3JvcD09J1BvdGF0bycgfCBudCRDcm9wPT0nR2luZ2VyJywgXQ0KYGBgDQoNCiAgIA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbnQxICU+JSBncm91cF9ieShDcm9wKSAlPiUgc3VtbWFyaXNlKG09IG4oKSkgJT4lIGdncGxvdChhZXMoeCA9IENyb3AsIHkgPSBtICkpICsgDQogIGdlb21fY29sKGZpbGw9J3BpbmsnKSArIA0KICBsYWJzKHggPSAnTsO0bmcgc+G6o24gJywgeSA9ICdOJykNCmBgYA0KIA0KICBRdWEgYmnhu4N1IMSR4buTIHThu5VuZyBo4bujcCBjw6FjIGxv4bqhaSBuw7RuZyBz4bqjbiBwaOG7lSBiaeG6v24gdHJvbmcgxJHDsyBn4bqhbyB24bqrbiBsw6AgbG/huqFpIG7DtG5nIHPhuqNuIMSRYyB0cuG7k25nIG5oaeG7gXUgbmjhuqV0IOG7nyDhuqRuIMSQ4buZIA0KDQpgYGB7cn0NCm50MSAlPiUgZ3JvdXBfYnkoQ3JvcCkgJT4lIHN1bW1hcmlzZShuID0gbigpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gJycsIHkgPSBuLGZpbGwgPSBDcm9wKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgZ2VvbV90ZXh0KGFlcyh4ID0gMS4zLCBsYWJlbCA9IG4pLHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAuNSkpICsNCiAgY29vcmRfcG9sYXIoJ3knKQ0KDQpgYGANCg0KYGBge3J9DQpudDEgJT4lIGdyb3VwX2J5KENyb3ApICU+JSBzdW1tYXJpc2UobiA9IG1lYW4oWWllbGQpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9ICcnLCB5ID0gbixmaWxsID0gQ3JvcCkpICsgDQogIGdlb21fY29sKCBjb2xvciA9ICdibGFjaycgKSArIA0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbikscG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDEpKSArDQogIGxhYnMoIHkgPSAnTsSDbmcgc3XhuqV0IFRCJykgDQpgYGANCg0KICBRdWEgYmnhu4N1IMSR4buTIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXk6IE7Eg25nIHN14bqldCBn4bqhbyDhu58g4bqkbiDEkOG7mSBjw7MgdGjhu4MgxJHGsOG7o2MgY29pIGzDoCDEkcOhbmcgY2jDuiDDvSBzbyB24bubaSBuaGnhu4F1IGxv4bqhaSBuw7RuZyBz4bqjbiBraMOhYy4g4bqkbiDEkOG7mSBsw6AgbeG7mXQgdHJvbmcgbmjhu69uZyBuaMOgIHPhuqNuIHh14bqldCBn4bqhbyBs4bubbiBuaOG6pXQgdGjhur8gZ2nhu5tpIHbDoCBn4bqhbyBsw6AgbeG7mXQgcGjhuqduIHF1YW4gdHLhu41uZyBj4bunYSBjaOG6vyDEkeG7mSDEg24gdeG7kW5nIGPhu6dhIG5nxrDhu51pIGTDom4g4bufIMSRw6J5LiANCg0KIyMjICAqKjIuIFPhuqNuIGzGsOG7o25nKioNCg0KICDEkOG7kWkgduG7m2kgxJHhuqV0IG7GsOG7m2MgY8OzIG7hu4FuIG7DtG5nIG5naGnhu4dwIGzDoCBjaOG7pyB54bq/dSBuaMawIOG6pG4gxJDhu5kgdGjDrCBz4bqjbiBsxrDhu6NuZyBuw7RuZyBz4bqjbiBo4bqxbmcgbsSDbSBsw6AgduG6pW4gxJHhu4EgY+G6p24gcXVhbiB0w6JtIG5o4bqldC4gU+G6o24gbMaw4bujbmcgbsO0bmcgc+G6o24gY+G7p2Eg4bqkbiDEkOG7mSDEkcOjIGPDsyBz4buxIGJp4bq/biDEkeG7mW5nIHRyb25nIG5o4buvbmcgbsSDbSBxdWEgZG8g4bqjbmggaMaw4bufbmcgY+G7p2Egbmhp4buBdSB54bq/dSB04buRIGtow6FjIG5oYXUgbmjGsCB0aOG7nWkgdGnhur90LCBjaMOtbmggc8OhY2ggbsO0bmcgbmdoaeG7h3AsIGPDtG5nIG5naOG7hywgdsOgIGJp4bq/biDEkeG7mW5nIHRo4buLIHRyxrDhu51uZy4NCiAgDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHggPSBQcm9kdWN0aW9uICwgeSA9IEFyZWEgICwgY29sb3IgPSBDcm9wICkpICsNCiAgZ2VvbV9wb2ludCgpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCmxpYnJhcnkobWFnaWNrKQ0KbnQxICU+JSANCiAgbmEub21pdCgpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gQXJlYSwgeSA9IFByb2R1Y3Rpb24sIGNvbG9yID0gQ3JvcCkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZW9tX3BvaW50KHNpemU9MikNCmBgYA0KDQogIFF1YSBiaeG7g3UgxJHhu5MgdGEgdGjhuqV5IMSRxrDhu6NjIHPhu7EgdGhheSDEkeG7lWkgc+G6o24gbMaw4bujbmcgdOG7q25nIHRo4budaSBrw6wgdGjDtG5nIHF1YSBjw6FjIHnhur91IHThu5EgY8OhYyBuaGF1IA0KICANCmBgYHtyfSANCm50MyA8LSBudDEgJT4lIGdyb3VwX2J5KFN0YXRlLCBDcm9wKSAlPiUgc3VtbWFyaXNlKG4gPSBuKCksIC5ncm91cHM9J2Ryb3AnKQ0KbnQzICU+JSBnZ3Bsb3QoYWVzKHggPSBTdGF0ZSAsIHkgPSBuKSkgKw0KICBnZW9tX2NvbChkYXRhID0gbnQzICU+JSBmaWx0ZXIoQ3JvcD09J1JpY2UnKSwgZmlsbCA9ICd5ZWxsb3cnKSArDQogIGdlb21fY29sKGRhdGEgPSBudDMgJT4lIGZpbHRlcihDcm9wPT0nR2luZ2VyJyksIGZpbGwgPSAnYmxhY2snKQ0KYGBgDQogIA0KIyMjICoqMy4gRGnhu4duIHTDrWNoKiogDQoNCiBEaeG7h24gdMOtY2ggxJHhuqV0IG7DtG5nIG5naGnhu4dwIGPhu6dhIOG6pG4gxJDhu5kgcuG7mW5nIGzhu5tuIHbDoCDEkWEgZOG6oW5nLCBjdW5nIGPhuqVwIGPGoSBz4bufIHF1YW4gdHLhu41uZyBjaG8gc+G6o24geHXhuqV0IG7DtG5nIG5naGnhu4dwLiDEkOG6pXQgbsO0bmcgbmdoaeG7h3AgY+G7p2Egbsaw4bubYyBuw6B5IMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIHRy4buTbmcgbmhp4buBdSBsb+G6oWkgY8OieSB0cuG7k25nIGtow6FjIG5oYXUsIHThu6sgbMO6YSBn4bqhbyDEkeG6v24gxJHhuq11IHbDoCBtw61hLiDEkGnhu4F1IG7DoHkgxJHDs25nIHZhaSB0csOyIHF1YW4gdHLhu41uZyB0cm9uZyDEkeG6o20gYuG6o28gYW4gc2luaCB4w6MgaOG7mWkgdsOgIGtpbmggdOG6vyBj4bunYSBow6BuZyB0cmnhu4d1IG5nxrDhu51pIGTDom4uDQogDQogDQpgYGB7cn0NCm50MSAlPiUgZ3JvdXBfYnkoQ3JvcCkgJT4lIHN1bW1hcmlzZShuPSBzdW0oQXJlYSkpJT4lIGdncGxvdCggYWVzKHggPSBDcm9wLCB5PSBuICkpICsgZ2VvbV9jb2wgKGZpbGw9J3JlZCcpICsgbGFicyh4PSAnTsO0bmcgc+G6o24nLCB5PSAnZGnhu4duIHTDrWNoJyApDQpgYGANCg0KIOG6pG4gxJDhu5kgY8OzIG3hu5l0IHRyb25nIG5o4buvbmcgZGnhu4duIHTDrWNoIGNhbmggdMOhYyBn4bqhbyBs4bubbiBuaOG6pXQgdGjhur8gZ2nhu5tpLCB24bubaSBoxqFuIDQwIHRyaeG7h3UgaGVjdGEgxJHhuqV0IMSRxrDhu6NjIGTDoG5oIGNobyBnaWVvIHRy4buTbmcgZ+G6oW8uIFR1eSBuaGnDqm4sIG3hurdjIGTDuSBkaeG7h24gdMOtY2ggbsOgeSBs4bubbiwgaGnhu4d1IHN14bqldCBjYW5oIHTDoWMgduG6q24gY8OybiB0aOG6pXAgc28gduG7m2kgbmhp4buBdSBxdeG7kWMgZ2lhIGtow6FjLg0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoIGFlcyggeD0gQXJlYSAgLCB5ID0gUHJvZHVjdGlvbiAsIGNvbG9yID0gQ3JvcCApKSArIA0KICBnZW9tX3BvaW50KHNpemUgPSAxLGFscGhhID0gMC41KSArICANCiAgZ2VvbV9zbW9vdGgoIG1ldGhvZCA9ICJsbSIsIHNpemUgPSAyKSAgICAgICAgICAgICAgICAgDQpgYGANCiANCiANCmBgYHtyfQ0KbnQxICU+JSBncm91cF9ieShTdGF0ZSkgJT4lIHN1bW1hcmlzZShuPSBtZWFuKEFyZWEpKSAlPiUgDQogICBnZ3Bsb3QoYWVzKHggPSBTdGF0ZSwgeSA9IG4pKSArIA0KICBnZW9tX2NvbChmaWxsID0gJ3llbGxvdycpKw0KICBsYWJzKHg9ICcgS2h1IHbhu7FjJywgeT0gJ0Rp4buHbiB0w61jaCcpDQpgYGANCiANCiBW4bubaSBiYSBraHUgduG7sWMgxJHGsOG7o2MgY29pIGzDoCBjw7MgZGnhu4duIHTDrWNoIMSR4bqldCBuw7RuZyBuZ2hp4buHcCBjYW8gbmjhuqV0IOG6pG4gxJDhu5kgbMOgIFdlc3QgQmVuZ2FsLCBBbmRhbWFuIGFuZCBOaWNvYmFyIElzbGFuZHMsIFV0dGFyYWtoYW5kIHRhIHRo4bqleSBkaeG7h24gdMOtY2ggdHJ1bmcgYsOsbmggZ2nhu69hIGPDoWMga2h1IHbhu7FjIGPDsyBz4buxIGNow6puaCBs4buHY2ggcuG6pXQgbOG7m24gxJHhurdjIGJp4buHdCBsw6AgdsO5bmcgV2Vzc3QgQmVuZ2FsIGPDsyBkaeG7h24gdMOtY2ggdHJ1bmcgYsOsbmggbeG7l2kgcXXhuq1uIGzDqm4gdOG7m2kgNTAwMDAgaGVjdGEuIA0KDQogDQojIyMgKio0LiBOxINuZyBzdeG6pXQqKiANCg0KICBOxINuZyBzdeG6pXQgZ+G6oW8g4bufIOG6pG4gxJDhu5kgbMOgIG3hu5l0IGNo4bunIMSR4buBIHLhuqV0IHF1YW4gdHLhu41uZyB2w6AgcGjhu6ljIHThuqFwLCB2w6wgbsOzIOG6o25oIGjGsOG7n25nIMSR4bq/biBu4buBbiBraW5oIHThur8sIGFuIG5pbmggbMawxqFuZyB0aOG7sWMgdsOgIGN14buZYyBz4buRbmcgaMOgbmcgbmfDoHkgY+G7p2EgaMOgbmcgdHJp4buHdSBuZ8aw4budaSBkw6JuLg0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCAsIHggPSBTdGF0ZSAsIGZpbGwgPSBDcm9wKSkgKyANCiAgZ2VvbV9ib3hwbG90KCkrICAgICAgICAgICAgICAgICAgICAgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCmBgYA0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCwgeCA9IFN0YXRlLCBjb2xvciA9IFN0YXRlKSkrICAgICAgICAgICAgICAgICAgICAgDQogIGdlb21faml0dGVyKCkNCmBgYA0KDQpgYGB7cn0NCm50MSAlPiUgbmEub21pdCgpICU+JSBnZ3Bsb3QoYWVzKHkgPSBZaWVsZCwgeCA9IFN0YXRlLCBjb2xvciA9IFN0YXRlKSkrICAgICAgICAgICAgICAgICAgICAgDQogIGdlb21fdmlvbGluKCkNCmBgYA0KDQogIEJhIGJp4buDdSDEkeG7kyB0csOqbiB0aOG7gyBoaeG7h24gc+G7sSB0aGF5IMSR4buVaSBj4bunYSBuxINuZyBzdeG6pXQgbsO0bmcgc+G6o24g4bqkbiDEkOG7mSB0aGVvIHThu6tuZyBraHUgduG7sWMga2jDoWMgbmhhdTogbmjDrG4gYmnhu4N1IMSR4buTIHRhIHRo4bqleSByw7Uga2h1IHbhu7FjIFdlc3QgQmVuZ2FsIGPDsyBuxINuZyBzdeG6pXQgZ+G6oW8gbOG7m24gbmjhuqV0IHbDoCBuaMawIGfhuqVwIMSRw7RpIGhhaSBraHUgduG7sWMgY8OybiBs4bqhaS4gDQogIA0KICANCiMjIyAqKjUuIE3DmUEgVuG7pCoqIA0KDQogIOG6pG4gxJDhu5kgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgcXXhu5FjIGdpYSBjw7MgaOG7hyB0aOG7kW5nIG3DuWEgduG7pSBwaG9uZyBwaMO6IHbDoCDEkWEgZOG6oW5nIG5o4bqldCB0csOqbiB0aOG6vyBnaeG7m2ksIHbhu5tpIHPhu7EgYmnhur9uIMSR4buVaSBj4bunYSBraMOtIGjhuq11IHbDoCDEkeG7i2EgaMOsbmgg4bqjbmggaMaw4bufbmcgxJHhur9uIHZp4buHYyB0cuG7k25nIHRy4buNdCB2w6Agc+G6o24geHXhuqV0IG7DtG5nIHPhuqNuLiBN4buXaSBtw7lhIHbhu6UgxJHhu4F1IG1hbmcgbOG6oWkgY8OhYyBjxqEgaOG7mWkgdsOgIHRow6FjaCB0aOG7qWMgcmnDqm5nLCB2w6AgbsOzIMSRw7NuZyB2YWkgdHLDsiBxdWFuIHRy4buNbmcgdHJvbmcgxJHhuqNtIGLhuqNvIGFuIG5pbmggbMawxqFuZyB0aOG7sWMgY+G7p2EgcXXhu5FjIGdpYS4gU+G7sSB0aMOgbmggY8O0bmcgY+G7p2EgY8OhYyBtw7lhIHbhu6UgbsOgeSBraMO0bmcgY2jhu4kgcGjhu6UgdGh14buZYyB2w6BvIHnhur91IHThu5EgdOG7sSBuaGnDqm4gbcOgIGPDsm4gcGjhu6UgdGh14buZYyB2w6BvIGPDoWMgYmnhu4duIHBow6FwIHF14bqjbiBsw70gbsO0bmcgbmdoaeG7h3AgdsOgIGNow61uaCBzw6FjaCBo4buXIHRy4bujIHThu6sgY2jDrW5oIHBo4bunLg0KICANCmBgYHtyfQ0KbnQyIDwtIG50MSAlPiUgIGdyb3VwX2J5KG50MSRTZWFzb24pICU+JSBzdW1tYXJpc2Uobj1uKCkpDQpoaXN0KG50MiRuLCBtYWluPSJQaMOibiBQaOG7kWkgTcO5YSBW4bulIiAsIHhsYWI9Ik3DuWEgVuG7pSAiLCBjb2w9Im9yYW5nZSIsIGJvcmRlcj0iYmxhY2siKQ0KYGBgDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==