1 - Dados brutos
Leitura 1 - 15/04/2026
library(dplyr)
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 1" #aqui
file_leitura
[1] "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 1"
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
dados_leitura
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
print(dados_leitura)
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
1 2026-04-14 23:56:27.846 105.0392 5 0.3307019 445.1082 2.187245 2.771877 291.1186
2 2026-04-14 23:56:28.930 105.0392 5 0.3311638 445.1326 2.187225 2.772407 291.1577
3 2026-04-14 23:56:29.726 105.0392 5 0.3311643 445.1506 2.187210 2.772798 291.1865
4 2026-04-14 23:56:30.055 105.0392 5 0.3303446 445.1580 2.187204 2.772959 291.1983
5 2026-04-14 23:56:31.223 105.0393 5 0.3274368 445.1843 2.186775 2.773531 291.2404
6 2026-04-14 23:56:32.032 105.0393 5 0.3274374 445.2026 2.186478 2.773928 291.2696
7 2026-04-14 23:56:32.704 105.0393 5 0.3240288 445.2177 2.186231 2.774257 291.2939
8 2026-04-14 23:56:33.530 105.0393 5 0.3198461 445.2406 2.185943 2.775186 291.2430
9 2026-04-14 23:56:34.648 105.0393 5 0.3141843 445.2374 2.185552 2.776444 291.1742
10 2026-04-14 23:56:35.460 105.0393 5 0.3141915 445.2351 2.185269 2.777358 291.1243
11 2026-04-14 23:56:35.803 105.0393 5 0.3178068 445.2341 2.185149 2.777744 291.1032
12 2026-04-14 23:56:36.993 105.0393 5 0.3303398 445.2308 2.185843 2.779082 291.0302
13 2026-04-14 23:56:37.782 105.0393 5 0.3303471 445.2286 2.186305 2.779971 290.9816
14 2026-04-14 23:56:38.430 105.0393 5 0.3296730 445.2267 2.186684 2.780700 290.9418
15 2026-04-14 23:56:39.233 105.0393 5 0.3288297 445.2175 2.187128 2.780738 290.9736
16 2026-04-14 23:56:40.325 105.0394 5 0.3276816 445.2146 2.187732 2.780789 291.0169
17 2026-04-14 23:56:41.131 105.0394 5 0.3276800 445.2124 2.188179 2.780827 291.0489
18 2026-04-14 23:56:41.480 105.0394 5 0.3253675 445.2115 2.188372 2.780843 291.0627
19 2026-04-14 23:56:42.671 105.0394 5 0.3174759 445.2082 2.187548 2.780899 291.1098
20 2026-04-14 23:56:43.457 105.0394 5 0.3174743 445.2061 2.187004 2.780936 291.1410
21 2026-04-14 23:56:44.127 105.0394 5 0.3213143 445.2043 2.186540 2.780967 291.1676
22 2026-04-14 23:56:44.934 105.0394 5 0.3259558 445.2137 2.186023 2.782451 291.1624
23 2026-04-14 23:56:46.033 105.0394 5 0.3322833 445.2775 2.185317 2.784471 291.1554
24 2026-04-14 23:56:46.851 105.0394 5 0.3322917 445.3249 2.184794 2.785973 291.1501
25 2026-04-14 23:56:47.191 105.0394 5 0.3303134 445.3446 2.184575 2.786599 291.1479
26 2026-04-14 23:56:48.361 105.0394 5 0.3235311 445.4125 2.185189 2.788747 291.1403
27 2026-04-14 23:56:49.128 105.0395 5 0.3235388 445.4571 2.185591 2.790157 291.1354
28 2026-04-14 23:56:49.783 105.0395 5 0.3249684 445.4952 2.185935 2.791362 291.1312
29 2026-04-14 23:56:50.575 105.0395 5 0.3266814 445.5240 2.186289 2.790688 291.1241
30 2026-04-14 23:56:51.654 105.0395 5 0.3290173 445.4566 2.186772 2.789772 291.1144
31 2026-04-14 23:56:52.464 105.0395 5 0.3290138 445.4059 2.187135 2.789083 291.1072
32 2026-04-14 23:56:52.812 105.0395 5 0.3268673 445.3841 2.187291 2.788787 291.1040
33 2026-04-14 23:56:53.996 105.0395 5 0.3195706 445.3101 2.186906 2.787783 291.0933
34 2026-04-14 23:56:54.786 105.0395 5 0.3195673 445.2607 2.186648 2.787111 291.0862
35 2026-04-14 23:56:55.448 105.0395 5 0.3206885 445.2193 2.186432 2.786549 291.0803
36 2026-04-14 23:56:56.249 105.0395 5 0.3220452 445.1758 2.186195 2.786689 291.1181
37 2026-04-14 23:56:57.341 105.0396 5 0.3238976 445.1978 2.185870 2.786879 291.1696
38 2026-04-14 23:56:58.132 105.0396 5 0.3238963 445.2137 2.185635 2.787016 291.2069
39 2026-04-14 23:56:58.480 105.0396 5 0.3273677 445.2207 2.185532 2.787076 291.2234
40 2026-04-14 23:56:59.683 105.0396 5 0.3393581 445.2448 2.185464 2.787285 291.2802
41 2026-04-14 23:57:00.494 105.0396 5 0.3393569 445.2611 2.185419 2.787426 291.3185
42 2026-04-14 23:57:01.142 105.0396 5 0.3395438 445.2742 2.185383 2.787538 291.3490
43 2026-04-14 23:57:01.934 105.0396 5 0.3397781 445.2965 2.185362 2.788485 291.3557
44 2026-04-14 23:57:03.048 105.0396 5 0.3401074 445.2491 2.185332 2.789820 291.3652
45 2026-04-14 23:57:03.842 105.0396 5 0.3401119 445.2152 2.185311 2.790773 291.3719
46 2026-04-14 23:57:04.193 105.0396 5 0.3336633 445.2002 2.185302 2.791193 291.3748
47 2026-04-14 23:57:05.359 105.0396 5 0.3121612 445.1505 2.185949 2.792592 291.3845
48 2026-04-14 23:57:06.151 105.0397 5 0.3121652 445.1168 2.186387 2.793540 291.3912
49 2026-04-14 23:57:06.802 105.0397 5 0.3167730 445.0890 2.186748 2.794322 291.3968
50 2026-04-14 23:57:07.582 105.0397 5 0.3222805 445.0489 2.187155 2.794393 291.4160
51 2026-04-14 23:57:08.687 105.0397 5 0.3300833 445.0755 2.187732 2.794491 291.4433
52 2026-04-14 23:57:09.484 105.0397 5 0.3300828 445.0948 2.188148 2.794562 291.4629
53 2026-04-14 23:57:09.815 105.0397 5 0.3296166 445.1027 2.188320 2.794591 291.4710
54 2026-04-14 23:57:10.936 105.0397 5 0.3280329 445.1298 2.188369 2.794690 291.4986
55 2026-04-14 23:57:11.710 105.0397 5 0.3280323 445.1485 2.188402 2.794759 291.5177
56 2026-04-14 23:57:12.365 105.0397 5 0.3282535 445.1643 2.188430 2.794817 291.5338
57 2026-04-14 23:57:13.132 105.0397 5 0.3285180 445.1854 2.188472 2.795206 291.4963
58 2026-04-14 23:57:14.217 105.0397 5 0.3288913 445.1702 2.188532 2.795756 291.4434
59 2026-04-14 23:57:15.032 105.0398 5 0.3288955 445.1588 2.188577 2.796169 291.4036
60 2026-04-14 23:57:15.375 105.0398 5 0.3272631 445.1540 2.188596 2.796343 291.3869
61 2026-04-14 23:57:16.552 105.0398 5 0.3216612 445.1376 2.188087 2.796940 291.3293
62 2026-04-14 23:57:17.332 105.0398 5 0.3216652 445.1267 2.187749 2.797335 291.2913
63 2026-04-14 23:57:17.996 105.0398 5 0.3240257 445.1174 2.187461 2.797672 291.2588
64 2026-04-14 23:57:18.795 105.0398 5 0.3268604 445.1138 2.187143 2.799017 291.2688
65 2026-04-14 23:57:19.858 105.0398 5 0.3306365 445.0597 2.186719 2.800809 291.2820
66 2026-04-14 23:57:20.638 105.0398 5 0.3306424 445.0200 2.186407 2.802126 291.2917
67 2026-04-14 23:57:20.976 105.0398 5 0.3317374 445.0028 2.186272 2.802696 291.2959
68 2026-04-14 23:57:22.161 105.0398 5 0.3355765 444.9426 2.186034 2.804695 291.3107
69 2026-04-14 23:57:22.960 105.0398 5 0.3355828 444.9020 2.185874 2.806043 291.3206
70 2026-04-14 23:57:23.622 105.0399 5 0.3335320 444.8683 2.185741 2.807159 291.3288
71 2026-04-14 23:57:24.394 105.0399 5 0.3311317 444.8137 2.185531 2.806550 291.3143
72 2026-04-14 23:57:25.450 105.0399 5 0.3278491 444.8360 2.185243 2.805715 291.2944
73 2026-04-14 23:57:26.260 105.0399 5 0.3278468 444.8531 2.185023 2.805074 291.2792
74 2026-04-14 23:57:26.594 105.0399 5 0.3272120 444.8601 2.184932 2.804810 291.2729
75 2026-04-14 23:57:27.762 105.0399 5 0.3249855 444.8847 2.184399 2.803886 291.2509
76 2026-04-14 23:57:28.563 105.0399 5 0.3249832 444.9016 2.184033 2.803252 291.2358
77 2026-04-14 23:57:29.233 105.0399 5 0.3255223 444.9157 2.183727 2.802722 291.2232
78 2026-04-14 23:57:30.020 105.0399 5 0.3261669 444.9514 2.183436 2.804473 291.2541
79 2026-04-14 23:57:31.095 105.0399 5 0.3270465 445.0006 2.183037 2.806861 291.2963
80 2026-04-14 23:57:31.888 105.0400 5 0.3270540 445.0369 2.182744 2.808623 291.3274
81 2026-04-14 23:57:32.247 105.0400 5 0.3254171 445.0533 2.182611 2.809420 291.3414
82 2026-04-14 23:57:33.394 105.0400 5 0.3201915 445.1058 2.181914 2.811967 291.3863
83 2026-04-14 23:57:34.187 105.0400 5 0.3201988 445.1421 2.181431 2.813731 291.4174
84 2026-04-14 23:57:34.841 105.0400 5 0.3224833 445.1720 2.181034 2.815182 291.4431
85 2026-04-14 23:57:35.611 105.0400 5 0.3251696 445.1902 2.180504 2.814772 291.4780
86 2026-04-14 23:57:36.720 105.0400 5 0.3290304 445.2778 2.179743 2.814180 291.5282
87 2026-04-14 23:57:37.499 105.0400 5 0.3290268 445.3394 2.179208 2.813764 291.5635
88 2026-04-14 23:57:37.832 105.0400 5 0.3270611 445.3658 2.178978 2.813585 291.5786
89 2026-04-14 23:57:39.003 105.0400 5 0.3201698 445.4584 2.178614 2.812960 291.6315
90 2026-04-14 23:57:39.786 105.0400 5 0.3201662 445.5203 2.178370 2.812542 291.6669
91 2026-04-14 23:57:40.441 105.0401 5 0.3219085 445.5722 2.178166 2.812191 291.6967
92 2026-04-14 23:57:41.240 105.0401 5 0.3240335 445.6363 2.177921 2.811881 291.6896
93 2026-04-14 23:57:42.322 105.0401 5 0.3269075 445.5708 2.177589 2.811465 291.6801
94 2026-04-14 23:57:43.102 105.0401 5 0.3269060 445.5235 2.177349 2.811164 291.6731
95 2026-04-14 23:57:43.437 105.0401 5 0.3277184 445.5032 2.177246 2.811036 291.6702
96 2026-04-14 23:57:44.582 105.0401 5 0.3305060 445.4338 2.177449 2.810595 291.6601
97 2026-04-14 23:57:45.377 105.0401 5 0.3305045 445.3857 2.177589 2.810289 291.6531
98 2026-04-14 23:57:46.039 105.0401 5 0.3285428 445.3456 2.177705 2.810034 291.6472
99 2026-04-14 23:57:46.816 105.0401 5 0.3262405 445.3015 2.177853 2.810108 291.6195
100 2026-04-14 23:57:47.917 105.0401 5 0.3229858 445.3017 2.178062 2.810211 291.5804
101 2026-04-14 23:57:48.744 105.0401 5 0.3229878 445.3019 2.178220 2.810288 291.5510
102 2026-04-14 23:57:49.073 105.0402 5 0.3222705 445.3020 2.178282 2.810319 291.5393
103 2026-04-14 23:57:50.244 105.0402 5 0.3197175 445.3023 2.178280 2.810428 291.4976
104 2026-04-14 23:57:51.049 105.0402 5 0.3197194 445.3024 2.178278 2.810503 291.4690
105 2026-04-14 23:57:51.697 105.0402 5 0.3222249 445.3026 2.178276 2.810564 291.4461
106 2026-04-14 23:57:52.476 105.0402 5 0.3252410 445.2969 2.178254 2.809901 291.4311
107 2026-04-14 23:57:53.594 105.0402 5 0.3295603 445.3135 2.178221 2.808952 291.4097
108 2026-04-14 23:57:54.394 105.0402 5 0.3295577 445.3255 2.178197 2.808272 291.3943
109 2026-04-14 23:57:54.734 105.0402 5 0.3276243 445.3306 2.178187 2.807983 291.3877
110 2026-04-14 23:57:55.901 105.0402 5 0.3209939 445.3479 2.177642 2.806992 291.3652
111 2026-04-14 23:57:56.707 105.0402 5 0.3209914 445.3599 2.177265 2.806307 291.3498
[ reached 'max' / getOption("max.print") -- omitted 104673 rows ]
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
print(dados_leitura)
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
1 2026-04-14 23:56:27.846 105.0392 5 0.3307019 445.1082 2.187245 2.771877 291.1186
2 2026-04-14 23:56:28.930 105.0392 5 0.3311638 445.1326 2.187225 2.772407 291.1577
3 2026-04-14 23:56:29.726 105.0392 5 0.3311643 445.1506 2.187210 2.772798 291.1865
4 2026-04-14 23:56:30.055 105.0392 5 0.3303446 445.1580 2.187204 2.772959 291.1983
5 2026-04-14 23:56:31.223 105.0393 5 0.3274368 445.1843 2.186775 2.773531 291.2404
6 2026-04-14 23:56:32.032 105.0393 5 0.3274374 445.2026 2.186478 2.773928 291.2696
7 2026-04-14 23:56:32.704 105.0393 5 0.3240288 445.2177 2.186231 2.774257 291.2939
8 2026-04-14 23:56:33.530 105.0393 5 0.3198461 445.2406 2.185943 2.775186 291.2430
9 2026-04-14 23:56:34.648 105.0393 5 0.3141843 445.2374 2.185552 2.776444 291.1742
10 2026-04-14 23:56:35.460 105.0393 5 0.3141915 445.2351 2.185269 2.777358 291.1243
11 2026-04-14 23:56:35.803 105.0393 5 0.3178068 445.2341 2.185149 2.777744 291.1032
12 2026-04-14 23:56:36.993 105.0393 5 0.3303398 445.2308 2.185843 2.779082 291.0302
13 2026-04-14 23:56:37.782 105.0393 5 0.3303471 445.2286 2.186305 2.779971 290.9816
14 2026-04-14 23:56:38.430 105.0393 5 0.3296730 445.2267 2.186684 2.780700 290.9418
15 2026-04-14 23:56:39.233 105.0393 5 0.3288297 445.2175 2.187128 2.780738 290.9736
16 2026-04-14 23:56:40.325 105.0394 5 0.3276816 445.2146 2.187732 2.780789 291.0169
17 2026-04-14 23:56:41.131 105.0394 5 0.3276800 445.2124 2.188179 2.780827 291.0489
18 2026-04-14 23:56:41.480 105.0394 5 0.3253675 445.2115 2.188372 2.780843 291.0627
19 2026-04-14 23:56:42.671 105.0394 5 0.3174759 445.2082 2.187548 2.780899 291.1098
20 2026-04-14 23:56:43.457 105.0394 5 0.3174743 445.2061 2.187004 2.780936 291.1410
21 2026-04-14 23:56:44.127 105.0394 5 0.3213143 445.2043 2.186540 2.780967 291.1676
22 2026-04-14 23:56:44.934 105.0394 5 0.3259558 445.2137 2.186023 2.782451 291.1624
23 2026-04-14 23:56:46.033 105.0394 5 0.3322833 445.2775 2.185317 2.784471 291.1554
24 2026-04-14 23:56:46.851 105.0394 5 0.3322917 445.3249 2.184794 2.785973 291.1501
25 2026-04-14 23:56:47.191 105.0394 5 0.3303134 445.3446 2.184575 2.786599 291.1479
26 2026-04-14 23:56:48.361 105.0394 5 0.3235311 445.4125 2.185189 2.788747 291.1403
27 2026-04-14 23:56:49.128 105.0395 5 0.3235388 445.4571 2.185591 2.790157 291.1354
28 2026-04-14 23:56:49.783 105.0395 5 0.3249684 445.4952 2.185935 2.791362 291.1312
29 2026-04-14 23:56:50.575 105.0395 5 0.3266814 445.5240 2.186289 2.790688 291.1241
30 2026-04-14 23:56:51.654 105.0395 5 0.3290173 445.4566 2.186772 2.789772 291.1144
31 2026-04-14 23:56:52.464 105.0395 5 0.3290138 445.4059 2.187135 2.789083 291.1072
32 2026-04-14 23:56:52.812 105.0395 5 0.3268673 445.3841 2.187291 2.788787 291.1040
33 2026-04-14 23:56:53.996 105.0395 5 0.3195706 445.3101 2.186906 2.787783 291.0933
34 2026-04-14 23:56:54.786 105.0395 5 0.3195673 445.2607 2.186648 2.787111 291.0862
35 2026-04-14 23:56:55.448 105.0395 5 0.3206885 445.2193 2.186432 2.786549 291.0803
36 2026-04-14 23:56:56.249 105.0395 5 0.3220452 445.1758 2.186195 2.786689 291.1181
37 2026-04-14 23:56:57.341 105.0396 5 0.3238976 445.1978 2.185870 2.786879 291.1696
38 2026-04-14 23:56:58.132 105.0396 5 0.3238963 445.2137 2.185635 2.787016 291.2069
39 2026-04-14 23:56:58.480 105.0396 5 0.3273677 445.2207 2.185532 2.787076 291.2234
40 2026-04-14 23:56:59.683 105.0396 5 0.3393581 445.2448 2.185464 2.787285 291.2802
41 2026-04-14 23:57:00.494 105.0396 5 0.3393569 445.2611 2.185419 2.787426 291.3185
42 2026-04-14 23:57:01.142 105.0396 5 0.3395438 445.2742 2.185383 2.787538 291.3490
43 2026-04-14 23:57:01.934 105.0396 5 0.3397781 445.2965 2.185362 2.788485 291.3557
44 2026-04-14 23:57:03.048 105.0396 5 0.3401074 445.2491 2.185332 2.789820 291.3652
45 2026-04-14 23:57:03.842 105.0396 5 0.3401119 445.2152 2.185311 2.790773 291.3719
46 2026-04-14 23:57:04.193 105.0396 5 0.3336633 445.2002 2.185302 2.791193 291.3748
47 2026-04-14 23:57:05.359 105.0396 5 0.3121612 445.1505 2.185949 2.792592 291.3845
48 2026-04-14 23:57:06.151 105.0397 5 0.3121652 445.1168 2.186387 2.793540 291.3912
49 2026-04-14 23:57:06.802 105.0397 5 0.3167730 445.0890 2.186748 2.794322 291.3968
50 2026-04-14 23:57:07.582 105.0397 5 0.3222805 445.0489 2.187155 2.794393 291.4160
51 2026-04-14 23:57:08.687 105.0397 5 0.3300833 445.0755 2.187732 2.794491 291.4433
52 2026-04-14 23:57:09.484 105.0397 5 0.3300828 445.0948 2.188148 2.794562 291.4629
53 2026-04-14 23:57:09.815 105.0397 5 0.3296166 445.1027 2.188320 2.794591 291.4710
54 2026-04-14 23:57:10.936 105.0397 5 0.3280329 445.1298 2.188369 2.794690 291.4986
55 2026-04-14 23:57:11.710 105.0397 5 0.3280323 445.1485 2.188402 2.794759 291.5177
56 2026-04-14 23:57:12.365 105.0397 5 0.3282535 445.1643 2.188430 2.794817 291.5338
57 2026-04-14 23:57:13.132 105.0397 5 0.3285180 445.1854 2.188472 2.795206 291.4963
58 2026-04-14 23:57:14.217 105.0397 5 0.3288913 445.1702 2.188532 2.795756 291.4434
59 2026-04-14 23:57:15.032 105.0398 5 0.3288955 445.1588 2.188577 2.796169 291.4036
60 2026-04-14 23:57:15.375 105.0398 5 0.3272631 445.1540 2.188596 2.796343 291.3869
61 2026-04-14 23:57:16.552 105.0398 5 0.3216612 445.1376 2.188087 2.796940 291.3293
62 2026-04-14 23:57:17.332 105.0398 5 0.3216652 445.1267 2.187749 2.797335 291.2913
63 2026-04-14 23:57:17.996 105.0398 5 0.3240257 445.1174 2.187461 2.797672 291.2588
64 2026-04-14 23:57:18.795 105.0398 5 0.3268604 445.1138 2.187143 2.799017 291.2688
65 2026-04-14 23:57:19.858 105.0398 5 0.3306365 445.0597 2.186719 2.800809 291.2820
66 2026-04-14 23:57:20.638 105.0398 5 0.3306424 445.0200 2.186407 2.802126 291.2917
67 2026-04-14 23:57:20.976 105.0398 5 0.3317374 445.0028 2.186272 2.802696 291.2959
68 2026-04-14 23:57:22.161 105.0398 5 0.3355765 444.9426 2.186034 2.804695 291.3107
69 2026-04-14 23:57:22.960 105.0398 5 0.3355828 444.9020 2.185874 2.806043 291.3206
70 2026-04-14 23:57:23.622 105.0399 5 0.3335320 444.8683 2.185741 2.807159 291.3288
71 2026-04-14 23:57:24.394 105.0399 5 0.3311317 444.8137 2.185531 2.806550 291.3143
72 2026-04-14 23:57:25.450 105.0399 5 0.3278491 444.8360 2.185243 2.805715 291.2944
73 2026-04-14 23:57:26.260 105.0399 5 0.3278468 444.8531 2.185023 2.805074 291.2792
74 2026-04-14 23:57:26.594 105.0399 5 0.3272120 444.8601 2.184932 2.804810 291.2729
75 2026-04-14 23:57:27.762 105.0399 5 0.3249855 444.8847 2.184399 2.803886 291.2509
76 2026-04-14 23:57:28.563 105.0399 5 0.3249832 444.9016 2.184033 2.803252 291.2358
77 2026-04-14 23:57:29.233 105.0399 5 0.3255223 444.9157 2.183727 2.802722 291.2232
78 2026-04-14 23:57:30.020 105.0399 5 0.3261669 444.9514 2.183436 2.804473 291.2541
79 2026-04-14 23:57:31.095 105.0399 5 0.3270465 445.0006 2.183037 2.806861 291.2963
80 2026-04-14 23:57:31.888 105.0400 5 0.3270540 445.0369 2.182744 2.808623 291.3274
81 2026-04-14 23:57:32.247 105.0400 5 0.3254171 445.0533 2.182611 2.809420 291.3414
82 2026-04-14 23:57:33.394 105.0400 5 0.3201915 445.1058 2.181914 2.811967 291.3863
83 2026-04-14 23:57:34.187 105.0400 5 0.3201988 445.1421 2.181431 2.813731 291.4174
84 2026-04-14 23:57:34.841 105.0400 5 0.3224833 445.1720 2.181034 2.815182 291.4431
85 2026-04-14 23:57:35.611 105.0400 5 0.3251696 445.1902 2.180504 2.814772 291.4780
86 2026-04-14 23:57:36.720 105.0400 5 0.3290304 445.2778 2.179743 2.814180 291.5282
87 2026-04-14 23:57:37.499 105.0400 5 0.3290268 445.3394 2.179208 2.813764 291.5635
88 2026-04-14 23:57:37.832 105.0400 5 0.3270611 445.3658 2.178978 2.813585 291.5786
89 2026-04-14 23:57:39.003 105.0400 5 0.3201698 445.4584 2.178614 2.812960 291.6315
90 2026-04-14 23:57:39.786 105.0400 5 0.3201662 445.5203 2.178370 2.812542 291.6669
91 2026-04-14 23:57:40.441 105.0401 5 0.3219085 445.5722 2.178166 2.812191 291.6967
92 2026-04-14 23:57:41.240 105.0401 5 0.3240335 445.6363 2.177921 2.811881 291.6896
93 2026-04-14 23:57:42.322 105.0401 5 0.3269075 445.5708 2.177589 2.811465 291.6801
94 2026-04-14 23:57:43.102 105.0401 5 0.3269060 445.5235 2.177349 2.811164 291.6731
95 2026-04-14 23:57:43.437 105.0401 5 0.3277184 445.5032 2.177246 2.811036 291.6702
96 2026-04-14 23:57:44.582 105.0401 5 0.3305060 445.4338 2.177449 2.810595 291.6601
97 2026-04-14 23:57:45.377 105.0401 5 0.3305045 445.3857 2.177589 2.810289 291.6531
98 2026-04-14 23:57:46.039 105.0401 5 0.3285428 445.3456 2.177705 2.810034 291.6472
99 2026-04-14 23:57:46.816 105.0401 5 0.3262405 445.3015 2.177853 2.810108 291.6195
100 2026-04-14 23:57:47.917 105.0401 5 0.3229858 445.3017 2.178062 2.810211 291.5804
datetime
1 2026-04-14 23:56:27
2 2026-04-14 23:56:28
3 2026-04-14 23:56:29
4 2026-04-14 23:56:30
5 2026-04-14 23:56:31
6 2026-04-14 23:56:32
7 2026-04-14 23:56:32
8 2026-04-14 23:56:33
9 2026-04-14 23:56:34
10 2026-04-14 23:56:35
11 2026-04-14 23:56:35
12 2026-04-14 23:56:36
13 2026-04-14 23:56:37
14 2026-04-14 23:56:38
15 2026-04-14 23:56:39
16 2026-04-14 23:56:40
17 2026-04-14 23:56:41
18 2026-04-14 23:56:41
19 2026-04-14 23:56:42
20 2026-04-14 23:56:43
21 2026-04-14 23:56:44
22 2026-04-14 23:56:44
23 2026-04-14 23:56:46
24 2026-04-14 23:56:46
25 2026-04-14 23:56:47
26 2026-04-14 23:56:48
27 2026-04-14 23:56:49
28 2026-04-14 23:56:49
29 2026-04-14 23:56:50
30 2026-04-14 23:56:51
31 2026-04-14 23:56:52
32 2026-04-14 23:56:52
33 2026-04-14 23:56:53
34 2026-04-14 23:56:54
35 2026-04-14 23:56:55
36 2026-04-14 23:56:56
37 2026-04-14 23:56:57
38 2026-04-14 23:56:58
39 2026-04-14 23:56:58
40 2026-04-14 23:56:59
41 2026-04-14 23:57:00
42 2026-04-14 23:57:01
43 2026-04-14 23:57:01
44 2026-04-14 23:57:03
45 2026-04-14 23:57:03
46 2026-04-14 23:57:04
47 2026-04-14 23:57:05
48 2026-04-14 23:57:06
49 2026-04-14 23:57:06
50 2026-04-14 23:57:07
51 2026-04-14 23:57:08
52 2026-04-14 23:57:09
53 2026-04-14 23:57:09
54 2026-04-14 23:57:10
55 2026-04-14 23:57:11
56 2026-04-14 23:57:12
57 2026-04-14 23:57:13
58 2026-04-14 23:57:14
59 2026-04-14 23:57:15
60 2026-04-14 23:57:15
61 2026-04-14 23:57:16
62 2026-04-14 23:57:17
63 2026-04-14 23:57:17
64 2026-04-14 23:57:18
65 2026-04-14 23:57:19
66 2026-04-14 23:57:20
67 2026-04-14 23:57:20
68 2026-04-14 23:57:22
69 2026-04-14 23:57:22
70 2026-04-14 23:57:23
71 2026-04-14 23:57:24
72 2026-04-14 23:57:25
73 2026-04-14 23:57:26
74 2026-04-14 23:57:26
75 2026-04-14 23:57:27
76 2026-04-14 23:57:28
77 2026-04-14 23:57:29
78 2026-04-14 23:57:30
79 2026-04-14 23:57:31
80 2026-04-14 23:57:31
81 2026-04-14 23:57:32
82 2026-04-14 23:57:33
83 2026-04-14 23:57:34
84 2026-04-14 23:57:34
85 2026-04-14 23:57:35
86 2026-04-14 23:57:36
87 2026-04-14 23:57:37
88 2026-04-14 23:57:37
89 2026-04-14 23:57:39
90 2026-04-14 23:57:39
91 2026-04-14 23:57:40
92 2026-04-14 23:57:41
93 2026-04-14 23:57:42
94 2026-04-14 23:57:43
95 2026-04-14 23:57:43
96 2026-04-14 23:57:44
97 2026-04-14 23:57:45
98 2026-04-14 23:57:46
99 2026-04-14 23:57:46
100 2026-04-14 23:57:47
[ reached 'max' / getOption("max.print") -- omitted 104684 rows ]
#Filtrar por horario
filtrados_leitura1 = dados_leitura %>% filter(
(datetime >= as.POSIXct("2026-04-15 09:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-15 12:56:00", tz = "America/Sao_Paulo"))) #aqui
print(filtrados_leitura1) #aqui
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
1 2026-04-15 09:00:00.302 105.4167 6 0.3217566 475.4381 2.280470 2.825441 195.4304
2 2026-04-15 09:00:01.078 105.4167 6 0.3217608 475.3730 2.280697 2.825593 195.3620
3 2026-04-15 09:00:01.736 105.4167 6 0.3195317 475.3179 2.280889 2.825721 195.3041
4 2026-04-15 09:00:02.496 105.4167 6 0.3169542 475.2595 2.281130 2.826495 195.2260
5 2026-04-15 09:00:03.558 105.4167 6 0.3133611 475.2594 2.281465 2.827570 195.1171
6 2026-04-15 09:00:04.345 105.4167 6 0.3133704 475.2594 2.281714 2.828369 195.0363
7 2026-04-15 09:00:04.683 105.4167 6 0.3163665 475.2594 2.281821 2.828711 195.0017
8 2026-04-15 09:00:05.855 105.4167 6 0.3267952 475.2593 2.282153 2.829900 194.8815
9 2026-04-15 09:00:06.638 105.4167 6 0.3268047 475.2593 2.282375 2.830693 194.8012
10 2026-04-15 09:00:07.306 105.4168 6 0.3245602 475.2592 2.282565 2.831372 194.7326
11 2026-04-15 09:00:08.102 105.4168 6 0.3218943 475.2683 2.282823 2.833236 194.6877
12 2026-04-15 09:00:09.191 105.4168 6 0.3182472 475.3510 2.283175 2.835785 194.6263
13 2026-04-15 09:00:10.003 105.4168 6 0.3182620 475.4126 2.283438 2.837686 194.5805
14 2026-04-15 09:00:10.339 105.4168 6 0.3219371 475.4381 2.283547 2.838473 194.5616
15 2026-04-15 09:00:11.484 105.4168 6 0.3344616 475.5250 2.283404 2.841153 194.4972
16 2026-04-15 09:00:12.275 105.4168 6 0.3344765 475.5850 2.283307 2.843003 194.4527
17 2026-04-15 09:00:12.905 105.4168 6 0.3313269 475.6329 2.283229 2.844481 194.4171
18 2026-04-15 09:00:13.663 105.4168 6 0.3275226 475.6561 2.283015 2.842264 194.3717
19 2026-04-15 09:00:14.736 105.4168 6 0.3221250 475.5939 2.282713 2.839123 194.3074
20 2026-04-15 09:00:15.542 105.4168 6 0.3221126 475.5473 2.282487 2.836768 194.2591
21 2026-04-15 09:00:15.877 105.4169 6 0.3220253 475.5279 2.282392 2.835788 194.2391
22 2026-04-15 09:00:17.006 105.4169 6 0.3217311 475.4625 2.282175 2.832484 194.1714
23 2026-04-15 09:00:17.786 105.4169 6 0.3217190 475.4174 2.282025 2.830204 194.1247
24 2026-04-15 09:00:18.463 105.4169 6 0.3217235 475.3783 2.281894 2.828224 194.0841
25 2026-04-15 09:00:19.252 105.4169 6 0.3217555 475.3670 2.281862 2.829918 194.0130
26 2026-04-15 09:00:20.348 105.4169 6 0.3218000 475.3506 2.281818 2.832276 193.9139
27 2026-04-15 09:00:21.148 105.4169 6 0.3218147 475.3386 2.281785 2.833993 193.8417
28 2026-04-15 09:00:21.484 105.4169 6 0.3210942 475.3335 2.281771 2.834718 193.8113
29 2026-04-15 09:00:22.618 105.4169 6 0.3186720 475.3166 2.281904 2.837154 193.7089
30 2026-04-15 09:00:23.407 105.4169 6 0.3186864 475.3047 2.281997 2.838852 193.6375
31 2026-04-15 09:00:24.073 105.4169 6 0.3204466 475.2948 2.282075 2.840284 193.5774
32 2026-04-15 09:00:24.865 105.4170 6 0.3225230 475.2633 2.282099 2.839704 193.4995
33 2026-04-15 09:00:25.977 105.4170 6 0.3254452 475.2857 2.282133 2.838885 193.3899
34 2026-04-15 09:00:26.799 105.4170 6 0.3254459 475.3022 2.282159 2.838281 193.3089
35 2026-04-15 09:00:27.134 105.4170 6 0.3260386 475.3089 2.282169 2.838034 193.2759
36 2026-04-15 09:00:28.275 105.4170 6 0.3280555 475.3318 2.281707 2.837196 193.1636
37 2026-04-15 09:00:29.055 105.4170 6 0.3280562 475.3475 2.281390 2.836621 193.0867
38 2026-04-15 09:00:29.732 105.4170 6 0.3258087 475.3611 2.281116 2.836124 193.0200
39 2026-04-15 09:00:30.536 105.4170 6 0.3231423 475.3862 2.280822 2.836582 192.9404
40 2026-04-15 09:00:31.627 105.4170 6 0.3195235 475.3268 2.280422 2.837205 192.8322
41 2026-04-15 09:00:32.434 105.4170 6 0.3195304 475.2828 2.280126 2.837667 192.7522
42 2026-04-15 09:00:32.789 105.4170 6 0.3208175 475.2635 2.279997 2.837869 192.7171
43 2026-04-15 09:00:33.940 105.4171 6 0.3250023 475.2008 2.280125 2.838527 192.6032
44 2026-04-15 09:00:34.723 105.4171 6 0.3250091 475.1581 2.280212 2.838974 192.5256
45 2026-04-15 09:00:35.394 105.4171 6 0.3225517 475.1215 2.280287 2.839357 192.4591
46 2026-04-15 09:00:36.188 105.4171 6 0.3196402 475.0813 2.280387 2.840173 192.4195
47 2026-04-15 09:00:37.279 105.4171 6 0.3156483 475.0436 2.280523 2.841290 192.3653
48 2026-04-15 09:00:38.086 105.4171 6 0.3156554 475.0156 2.280624 2.842118 192.3251
49 2026-04-15 09:00:38.421 105.4171 6 0.3175190 475.0040 2.280666 2.842460 192.3085
50 2026-04-15 09:00:39.588 105.4171 6 0.3240304 474.9635 2.280355 2.843656 192.2505
51 2026-04-15 09:00:40.388 105.4171 6 0.3240376 474.9358 2.280142 2.844477 192.2107
52 2026-04-15 09:00:41.049 105.4171 6 0.3262776 474.9129 2.279966 2.845154 192.1779
53 2026-04-15 09:00:41.828 105.4172 6 0.3289183 474.8826 2.279747 2.845566 192.1513
54 2026-04-15 09:00:42.900 105.4172 6 0.3325535 475.0085 2.279446 2.846129 192.1147
55 2026-04-15 09:00:43.703 105.4172 6 0.3325584 475.1028 2.279220 2.846550 192.0873
56 2026-04-15 09:00:44.042 105.4172 6 0.3318019 475.1427 2.279124 2.846729 192.0757
57 2026-04-15 09:00:45.171 105.4172 6 0.3292918 475.2752 2.279084 2.847321 192.0371
58 2026-04-15 09:00:45.947 105.4172 6 0.3292965 475.3665 2.279057 2.847729 192.0106
59 2026-04-15 09:00:46.615 105.4172 6 0.3282012 475.4449 2.279033 2.848079 191.9878
60 2026-04-15 09:00:47.401 105.4172 6 0.3269103 475.5268 2.278969 2.847290 191.8855
61 2026-04-15 09:00:48.486 105.4172 6 0.3251256 475.5403 2.278882 2.846201 191.7441
62 2026-04-15 09:00:49.283 105.4172 6 0.3251263 475.5502 2.278817 2.845400 191.6401
63 2026-04-15 09:00:49.640 105.4172 6 0.3249834 475.5546 2.278788 2.845043 191.5937
64 2026-04-15 09:00:50.778 105.4173 6 0.3245265 475.5688 2.278674 2.843901 191.4454
65 2026-04-15 09:00:51.556 105.4173 6 0.3245272 475.5785 2.278595 2.843120 191.3439
66 2026-04-15 09:00:52.239 105.4173 6 0.3251683 475.5870 2.278527 2.842435 191.2550
67 2026-04-15 09:00:53.056 105.4173 6 0.3259399 475.6120 2.278496 2.843343 191.2997
68 2026-04-15 09:00:54.150 105.4173 6 0.3269699 475.4796 2.278456 2.844560 191.3594
69 2026-04-15 09:00:54.943 105.4173 6 0.3269725 475.3836 2.278426 2.845443 191.4027
70 2026-04-15 09:00:55.293 105.4173 6 0.3279528 475.3410 2.278413 2.845834 191.4219
71 2026-04-15 09:00:56.443 105.4173 6 0.3311620 475.2018 2.278235 2.847113 191.4846
72 2026-04-15 09:00:57.227 105.4173 6 0.3311646 475.1067 2.278114 2.847987 191.5275
73 2026-04-15 09:00:57.898 105.4173 6 0.3304053 475.0256 2.278010 2.848734 191.5641
74 2026-04-15 09:00:58.684 105.4173 6 0.3295179 474.9205 2.277854 2.848465 191.4119
75 2026-04-15 09:00:59.763 105.4174 6 0.3283001 475.0149 2.277640 2.848088 191.2028
76 2026-04-15 09:01:00.558 105.4174 6 0.3283074 475.0844 2.277482 2.847811 191.0491
77 2026-04-15 09:01:00.904 105.4174 6 0.3281871 475.1147 2.277413 2.847690 190.9819
78 2026-04-15 09:01:02.032 105.4174 6 0.3277963 475.2134 2.277550 2.847297 190.7636
79 2026-04-15 09:01:02.811 105.4174 6 0.3278034 475.2814 2.277645 2.847025 190.6129
80 2026-04-15 09:01:03.486 105.4174 6 0.3278312 475.3404 2.277727 2.846790 190.4823
81 2026-04-15 09:01:04.289 105.4174 6 0.3278566 475.4105 2.277824 2.846490 190.4655
82 2026-04-15 09:01:05.351 105.4174 6 0.3278895 475.4179 2.277953 2.846094 190.4432
83 2026-04-15 09:01:06.128 105.4174 6 0.3278886 475.4232 2.278046 2.845805 190.4269
84 2026-04-15 09:01:06.479 105.4174 6 0.3277621 475.4257 2.278089 2.845675 190.4196
85 2026-04-15 09:01:07.631 105.4174 6 0.3273458 475.4336 2.277986 2.845247 190.3954
86 2026-04-15 09:01:08.421 105.4175 6 0.3273449 475.4391 2.277915 2.844953 190.3789
87 2026-04-15 09:01:09.072 105.4175 6 0.3272608 475.4435 2.277857 2.844711 190.3652
88 2026-04-15 09:01:09.871 105.4175 6 0.3271679 475.4571 2.277814 2.845352 190.2699
89 2026-04-15 09:01:10.963 105.4175 6 0.3270403 475.3797 2.277755 2.846230 190.1397
90 2026-04-15 09:01:11.767 105.4175 6 0.3270494 475.3227 2.277711 2.846878 190.0437
91 2026-04-15 09:01:12.107 105.4175 6 0.3266513 475.2987 2.277693 2.847150 190.0033
92 2026-04-15 09:01:13.256 105.4175 6 0.3253007 475.2172 2.277547 2.848075 189.8661
93 2026-04-15 09:01:14.035 105.4175 6 0.3253094 475.1621 2.277449 2.848701 189.7733
94 2026-04-15 09:01:14.713 105.4175 6 0.3262921 475.1140 2.277363 2.849248 189.6923
95 2026-04-15 09:01:15.517 105.4175 6 0.3274407 475.0428 2.277211 2.848235 189.6731
96 2026-04-15 09:01:16.578 105.4176 6 0.3289569 475.0191 2.277012 2.846896 189.6478
97 2026-04-15 09:01:17.388 105.4176 6 0.3289512 475.0011 2.276859 2.845874 189.6284
98 2026-04-15 09:01:17.732 105.4176 6 0.3271508 474.9934 2.276795 2.845441 189.6202
99 2026-04-15 09:01:18.871 105.4176 6 0.3211726 474.9680 2.276685 2.844004 189.5929
100 2026-04-15 09:01:19.655 105.4176 6 0.3211673 474.9506 2.276609 2.843014 189.5741
datetime
1 2026-04-15 09:00:00
2 2026-04-15 09:00:01
3 2026-04-15 09:00:01
4 2026-04-15 09:00:02
5 2026-04-15 09:00:03
6 2026-04-15 09:00:04
7 2026-04-15 09:00:04
8 2026-04-15 09:00:05
9 2026-04-15 09:00:06
10 2026-04-15 09:00:07
11 2026-04-15 09:00:08
12 2026-04-15 09:00:09
13 2026-04-15 09:00:10
14 2026-04-15 09:00:10
15 2026-04-15 09:00:11
16 2026-04-15 09:00:12
17 2026-04-15 09:00:12
18 2026-04-15 09:00:13
19 2026-04-15 09:00:14
20 2026-04-15 09:00:15
21 2026-04-15 09:00:15
22 2026-04-15 09:00:17
23 2026-04-15 09:00:17
24 2026-04-15 09:00:18
25 2026-04-15 09:00:19
26 2026-04-15 09:00:20
27 2026-04-15 09:00:21
28 2026-04-15 09:00:21
29 2026-04-15 09:00:22
30 2026-04-15 09:00:23
31 2026-04-15 09:00:24
32 2026-04-15 09:00:24
33 2026-04-15 09:00:25
34 2026-04-15 09:00:26
35 2026-04-15 09:00:27
36 2026-04-15 09:00:28
37 2026-04-15 09:00:29
38 2026-04-15 09:00:29
39 2026-04-15 09:00:30
40 2026-04-15 09:00:31
41 2026-04-15 09:00:32
42 2026-04-15 09:00:32
43 2026-04-15 09:00:33
44 2026-04-15 09:00:34
45 2026-04-15 09:00:35
46 2026-04-15 09:00:36
47 2026-04-15 09:00:37
48 2026-04-15 09:00:38
49 2026-04-15 09:00:38
50 2026-04-15 09:00:39
51 2026-04-15 09:00:40
52 2026-04-15 09:00:41
53 2026-04-15 09:00:41
54 2026-04-15 09:00:42
55 2026-04-15 09:00:43
56 2026-04-15 09:00:44
57 2026-04-15 09:00:45
58 2026-04-15 09:00:45
59 2026-04-15 09:00:46
60 2026-04-15 09:00:47
61 2026-04-15 09:00:48
62 2026-04-15 09:00:49
63 2026-04-15 09:00:49
64 2026-04-15 09:00:50
65 2026-04-15 09:00:51
66 2026-04-15 09:00:52
67 2026-04-15 09:00:53
68 2026-04-15 09:00:54
69 2026-04-15 09:00:54
70 2026-04-15 09:00:55
71 2026-04-15 09:00:56
72 2026-04-15 09:00:57
73 2026-04-15 09:00:57
74 2026-04-15 09:00:58
75 2026-04-15 09:00:59
76 2026-04-15 09:01:00
77 2026-04-15 09:01:00
78 2026-04-15 09:01:02
79 2026-04-15 09:01:02
80 2026-04-15 09:01:03
81 2026-04-15 09:01:04
82 2026-04-15 09:01:05
83 2026-04-15 09:01:06
84 2026-04-15 09:01:06
85 2026-04-15 09:01:07
86 2026-04-15 09:01:08
87 2026-04-15 09:01:09
88 2026-04-15 09:01:09
89 2026-04-15 09:01:10
90 2026-04-15 09:01:11
91 2026-04-15 09:01:12
92 2026-04-15 09:01:13
93 2026-04-15 09:01:14
94 2026-04-15 09:01:14
95 2026-04-15 09:01:15
96 2026-04-15 09:01:16
97 2026-04-15 09:01:17
98 2026-04-15 09:01:17
99 2026-04-15 09:01:18
100 2026-04-15 09:01:19
[ reached 'max' / getOption("max.print") -- omitted 17186 rows ]
range(filtrados_leitura1$datetime) #aqui
[1] "2026-04-15 09:00:00 -03" "2026-04-15 12:55:59 -03"
# Carregar ID da leitura
ID.leitura1=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 1/ID leitura1.csv") #aqui
str(ID.leitura1) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 1 1 1 1 1 1 1 1 1 1 ...
$ Date : chr "15/04/2026" "15/04/2026" "15/04/2026" "15/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "09:09" "09:16" "09:23" "09:30" ...
$ End.reading : chr "09:12" "09:19" "09:26" "09:33" ...
$ External.temperature: num 22.9 22.5 22.1 22.8 22.4 22.8 21.5 21.3 21.7 20.6 ...
$ Internal.temperature: num 25.5 24.6 25.1 25.3 23.8 24.8 25.1 25.1 25 25.5 ...
print(ID.leitura1) #aqui
Bottle Tratamento Abreviacao Bloco Rep Leitura Date Solo.Seco
1 1 Controle - Apenas água CON 1 1 1 15/04/2026 246.61
2 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 1 15/04/2026 246.39
3 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 1 15/04/2026 246.21
4 4 Água ozonizada AO3 1 1 1 15/04/2026 246.31
5 5 Adubo nitrogenado (ureia) NMIN 1 1 1 15/04/2026 246.29
6 6 Controle - Apenas água CON 2 2 1 15/04/2026 246.26
7 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 1 15/04/2026 246.14
8 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 1 15/04/2026 246.21
9 9 Água ozonizada AO3 2 2 1 15/04/2026 246.14
10 10 Adubo nitrogenado NMIN 2 2 1 15/04/2026 246.35
11 11 Controle - Apenas água CON 3 3 1 15/04/2026 246.26
12 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 1 15/04/2026 246.30
13 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 1 15/04/2026 246.38
14 14 Água ozonizada AO3 3 3 1 15/04/2026 246.37
15 15 Adubo nitrogenado NMIN 3 3 1 15/04/2026 246.15
16 16 Controle - Apenas água CON 4 4 1 15/04/2026 246.50
17 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 1 15/04/2026 246.36
18 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 1 15/04/2026 246.30
19 19 Água ozonizada AO3 4 4 1 15/04/2026 246.25
20 20 Adubo nitrogenado NMIN 4 4 1 15/04/2026 246.34
21 21 Controle - Apenas água CON 5 5 1 15/04/2026 246.23
22 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 1 15/04/2026 246.18
23 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 1 15/04/2026 246.21
24 24 Água ozonizada AO3 5 5 1 15/04/2026 246.31
25 25 Adubo nitrogenado NMIN 5 5 1 15/04/2026 246.35
26 26 Controle - Apenas água CON 6 6 1 15/04/2026 246.25
27 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 1 15/04/2026 246.25
28 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 1 15/04/2026 246.36
29 29 Água ozonizada AO3 6 6 1 15/04/2026 246.23
30 30 Adubo nitrogenado NMIN 6 6 1 15/04/2026 246.35
Beginning.reading End.reading External.temperature Internal.temperature
1 09:09 09:12 22.9 25.5
2 09:16 09:19 22.5 24.6
3 09:23 09:26 22.1 25.1
4 09:30 09:33 22.8 25.3
5 09:51 09:54 22.4 23.8
6 09:44 09:47 22.8 24.8
7 09:58 10:01 21.5 25.1
8 10:05 10:08 21.3 25.1
9 10:12 10:15 21.7 25.0
10 10:19 10:22 20.6 25.5
11 10:26 10:29 22.3 25.3
12 10:33 10:36 22.1 25.1
13 10:40 10:43 21.4 25.0
14 10:47 10:50 21.3 25.3
15 10:54 10:57 21.5 25.6
16 11:01 11:04 21.3 25.1
17 11:08 11:11 21.6 25.1
18 11:15 11:18 21.5 25.0
19 11:22 11:25 21.6 25.3
20 11:50 11:53 21.3 24.8
21 11:36 11:39 20.7 25.3
22 11:43 11:46 21.9 25.1
23 11:57 12:00 22.3 25.1
24 12:04 12:07 21.7 25.3
25 12:11 12:14 22.3 25.3
26 12:18 12:21 21.7 25.2
27 12:25 12:28 20.9 25.2
28 12:32 12:35 21.1 25.0
29 12:53 12:56 20.9 24.4
30 12:46 12:49 21.5 24.8
Leitura 2 - 16/04/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 2" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura2 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-04-16 08:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-16 14:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura2) #aqui
range(filtrados_leitura2$datetime) #aqui
[1] "2026-04-16 08:00:00 -03" "2026-04-16 13:59:59 -03"
# Carregar ID da leitura
ID.leitura2=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 2/ID leitura2.csv") #aqui
str(ID.leitura2) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 2 2 2 2 2 2 2 2 2 2 ...
$ Date : chr "16/04/2026" "16/04/2026" "16/04/2026" "16/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "08:49" "08:56" "09:03" "09:10" ...
$ End.reading : chr "08:52" "08:59" "09:06" "09:13" ...
$ External.temperature: num 24.1 24.1 24.4 24.3 24.3 24.3 23.8 22.1 21.8 22.6 ...
$ Internal.temperature: num 24.9 25.3 25.2 25.3 25.5 25.3 25.5 25.2 25.3 25.3 ...
head(ID.leitura2) #aqui
Leitura 3 - 17/04/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 3" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura3 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-04-17 09:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-17 13:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura3) #aqui
range(filtrados_leitura3$datetime) #aqui
[1] "2026-04-17 09:00:01 -03" "2026-04-17 12:59:59 -03"
# Carregar ID da leitura
ID.leitura3=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 3/ID leitura3.csv") #aqui
str(ID.leitura3) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 3 3 3 3 3 3 3 3 3 3 ...
$ Date : chr "17/04/2026" "17/04/2026" "17/04/2026" "17/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "09:09" "09:16" "09:23" "09:30" ...
$ End.reading : chr "09:12" "09:19" "09:26" "09:33" ...
$ External.temperature: num 22.8 21.8 21.8 21.9 22 20.8 21.1 21.9 20.8 21.3 ...
$ Internal.temperature: num 25.1 24.9 25 25.3 25.3 25.2 25.6 25.5 25.3 25.3 ...
head(ID.leitura3) #aqui
Leitura 4 - 19/04/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 4" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura4 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-04-19 09:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-19 14:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura4) #aqui
range(filtrados_leitura4$datetime) #aqui
[1] "2026-04-19 09:00:00 -03" "2026-04-19 13:59:59 -03"
# Carregar ID da leitura
ID.leitura4=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 4/ID leitura4.csv") #aqui
str(ID.leitura4) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : int 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 4 4 4 4 4 4 4 4 4 4 ...
$ Date : chr "19/04/2026" "19/04/2026" "19/04/2026" "19/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "09:31" "09:38" "09:45" "09:52" ...
$ End.reading : chr "09:34" "09:41" "09:48" "09:55" ...
$ External.temperature: num 23.1 21.5 22.3 21.9 20.9 21.9 20.9 21.9 22.5 20.5 ...
$ Internal.temperature: num 25.2 25 25.5 25.3 25.1 25.3 25.2 25.2 25.3 25.3 ...
head(ID.leitura4) #aqui
Leitura 5 - 22/04/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 5" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura5 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-04-22 08:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-22 12:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura5) #aqui
range(filtrados_leitura5$datetime) #aqui
[1] "2026-04-22 08:00:00 -03" "2026-04-22 11:59:59 -03"
# Carregar ID da leitura
ID.leitura5=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 5/ID leitura5.csv") #aqui
str(ID.leitura5) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : int 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 5 5 5 5 5 5 5 5 5 5 ...
$ Date : chr "22/04/2026" "22/04/2026" "22/04/2026" "22/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "08:22" "08:29" "08:36" "08:43" ...
$ End.reading : chr "08:25" "08:32" "08:39" "08:46" ...
$ External.temperature: num 22.8 20.6 21.3 21 20.8 21.5 20.1 20.8 20.6 20.8 ...
$ Internal.temperature: num 25 25.2 25.3 25.2 25.2 25.4 25.1 25.3 25.1 25.5 ...
head(ID.leitura5) #aqui
Leitura 6 - 27/04/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 6" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura6 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-04-27 09:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-04-27 13:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura6) #aqui
range(filtrados_leitura6$datetime) #aqui
[1] "2026-04-27 09:00:00 -03" "2026-04-27 12:59:59 -03"
# Carregar ID da leitura
ID.leitura6=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 6/ID leitura6.csv") #aqui
str(ID.leitura6) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 6 6 6 6 6 6 6 6 6 6 ...
$ Date : chr "27/04/2026" "27/04/2026" "27/04/2026" "27/04/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "09:06" "09:13" "09:20" "09:27" ...
$ End.reading : chr "09:09" "09:16" "09:23" "09:30" ...
$ External.temperature: num 23.1 22.4 23.1 22.3 20.7 20.9 20.5 20.9 20.1 21.9 ...
$ Internal.temperature: num 25.3 25.3 25.5 25.5 25.3 25.5 25.4 25.2 25.2 25.1 ...
head(ID.leitura6) #aqui
Leitura 7 - 05/05/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 7" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura7 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-05-05 10:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-05-05 14:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura7) #aqui
range(filtrados_leitura7$datetime) #aqui
[1] "2026-05-05 10:00:00 -03" "2026-05-05 13:59:59 -03"
# Carregar ID da leitura
ID.leitura7=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 7/ID leitura7.csv") #aqui
str(ID.leitura7) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 7 7 7 7 7 7 7 7 7 7 ...
$ Date : chr "05/05/2026" "05/05/2026" "05/05/2026" "05/05/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "10:12" "10:19" "10:25" "10:33" ...
$ End.reading : chr "10:15" "10:22" "10:28" "10:36" ...
$ External.temperature: num 23.6 22.4 22.4 22.6 20.9 22.1 22.3 20.7 21.8 21.6 ...
$ Internal.temperature: num 25.1 25.1 25.2 25.3 25.3 25.5 25.4 25.3 25.5 25.3 ...
head(ID.leitura7) #aqui
Leitura 8 - 18/05/2026
# Caminho dos arquivos .dat
file_leitura = "C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 8" #aqui
# Obter a lista de arquivos .dat
file_list_leitura = list.files(file_leitura, pattern = ".dat", full.names = TRUE)
# Ler os dados de todos os arquivos
data_list_leitura = lapply(file_list_leitura, read.table, header = TRUE, sep = "",fill = TRUE)
# Juntar os dados
dados_leitura = do.call(rbind, data_list_leitura)
# Excluir colunas desnecessarias
dados_leitura = subset(dados_leitura, select = c("DATE","TIME","JULIAN_DAYS","MPVPosition","N2O_dry","CO2_dry","CH4_dry","H2O","NH3"))
#Criar datetime
dados_leitura = dados_leitura %>% mutate(datetime = as.POSIXct(paste(DATE, TIME),
format = "%Y-%m-%d %H:%M:%OS", tz = "America/Sao_Paulo"))
#Filtrar por horario
filtrados_leitura8 = dados_leitura %>% filter( #aqui
(datetime >= as.POSIXct("2026-05-18 08:00:00", tz = "America/Sao_Paulo") & #aqui
datetime <= as.POSIXct("2026-05-18 13:00:00", tz = "America/Sao_Paulo"))) #aqui
head(filtrados_leitura8) #aqui
range(filtrados_leitura8$datetime) #aqui
[1] "2026-05-18 08:00:00 -03" "2026-05-18 12:59:59 -03"
# Carregar ID da leitura
ID.leitura8=read.csv("C:/Users/Samsung/OneDrive/Documentos/2 - Material de trabalho/5 - Atividades Didáticas/5.5 - Orientação/Mestrado/Isabelle/Data/Leitura 8/ID leitura8.csv") #aqui
str(ID.leitura8) #aqui
'data.frame': 30 obs. of 12 variables:
$ Bottle : int 1 2 3 4 5 6 7 8 9 10 ...
$ Tratamento : chr "Controle - Apenas água" "Fezes ovinas tratadas com oleo de girassol ozonizado " "Fezes ovinas tratadas com oleo de girassol" "Água ozonizada" ...
$ Abreviacao : chr "CON" "FOGO3" "FOG" "AO3" ...
$ Bloco : int 1 1 1 1 1 2 2 2 2 2 ...
$ Rep : num 1 1 1 1 1 2 2 2 2 2 ...
$ Leitura : int 8 8 8 8 8 8 8 8 8 8 ...
$ Date : chr "18/05/2026" "18/05/2026" "18/05/2026" "18/05/2026" ...
$ Solo.Seco : num 247 246 246 246 246 ...
$ Beginning.reading : chr "09:00" "09:07" "09:14" "09:21" ...
$ End.reading : chr "09:03" "09:10" "09:17" "09:24" ...
$ External.temperature: num 23.5 22.3 21.6 22.5 23.6 22.4 22.8 22.1 22.5 21.7 ...
$ Internal.temperature: num 24.9 24.8 25.1 25 25.1 25.3 25.3 25.1 25.1 25.1 ...
head(ID.leitura8) #aqui
2 - Identificar leituras dos frascos e
background
Leitura 1 - 15/04/2026
library(data.table)
########################### PREPARAR DADOS ###########################
dados1 = as.data.table(filtrados_leitura1)
id = as.data.table(ID.leitura1)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 1 15/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 1 15/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 1 15/04/2026
4: 4 Água ozonizada AO3 1 1 1 15/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 1 15/04/2026
6: 6 Controle - Apenas água CON 2 2 1 15/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 1 15/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 1 15/04/2026
9: 9 Água ozonizada AO3 2 2 1 15/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 1 15/04/2026
11: 11 Controle - Apenas água CON 3 3 1 15/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 1 15/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 1 15/04/2026
14: 14 Água ozonizada AO3 3 3 1 15/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 1 15/04/2026
16: 16 Controle - Apenas água CON 4 4 1 15/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 1 15/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 1 15/04/2026
19: 19 Água ozonizada AO3 4 4 1 15/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 1 15/04/2026
21: 21 Controle - Apenas água CON 5 5 1 15/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 1 15/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 1 15/04/2026
24: 24 Água ozonizada AO3 5 5 1 15/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 1 15/04/2026
26: 26 Controle - Apenas água CON 6 6 1 15/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 1 15/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 1 15/04/2026
29: 29 Água ozonizada AO3 6 6 1 15/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 1 15/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:09 09:12 22.9 25.5 2026-04-15 09:09:00
2: 246.39 09:16 09:19 22.5 24.6 2026-04-15 09:16:00
3: 246.21 09:23 09:26 22.1 25.1 2026-04-15 09:23:00
4: 246.31 09:30 09:33 22.8 25.3 2026-04-15 09:30:00
5: 246.29 09:51 09:54 22.4 23.8 2026-04-15 09:51:00
6: 246.26 09:44 09:47 22.8 24.8 2026-04-15 09:44:00
7: 246.14 09:58 10:01 21.5 25.1 2026-04-15 09:58:00
8: 246.21 10:05 10:08 21.3 25.1 2026-04-15 10:05:00
9: 246.14 10:12 10:15 21.7 25.0 2026-04-15 10:12:00
10: 246.35 10:19 10:22 20.6 25.5 2026-04-15 10:19:00
11: 246.26 10:26 10:29 22.3 25.3 2026-04-15 10:26:00
12: 246.30 10:33 10:36 22.1 25.1 2026-04-15 10:33:00
13: 246.38 10:40 10:43 21.4 25.0 2026-04-15 10:40:00
14: 246.37 10:47 10:50 21.3 25.3 2026-04-15 10:47:00
15: 246.15 10:54 10:57 21.5 25.6 2026-04-15 10:54:00
16: 246.50 11:01 11:04 21.3 25.1 2026-04-15 11:01:00
17: 246.36 11:08 11:11 21.6 25.1 2026-04-15 11:08:00
18: 246.30 11:15 11:18 21.5 25.0 2026-04-15 11:15:00
19: 246.25 11:22 11:25 21.6 25.3 2026-04-15 11:22:00
20: 246.34 11:50 11:53 21.3 24.8 2026-04-15 11:50:00
21: 246.23 11:36 11:39 20.7 25.3 2026-04-15 11:36:00
22: 246.18 11:43 11:46 21.9 25.1 2026-04-15 11:43:00
23: 246.21 11:57 12:00 22.3 25.1 2026-04-15 11:57:00
24: 246.31 12:04 12:07 21.7 25.3 2026-04-15 12:04:00
25: 246.35 12:11 12:14 22.3 25.3 2026-04-15 12:11:00
26: 246.25 12:18 12:21 21.7 25.2 2026-04-15 12:18:00
27: 246.25 12:25 12:28 20.9 25.2 2026-04-15 12:25:00
28: 246.36 12:32 12:35 21.1 25.0 2026-04-15 12:32:00
29: 246.23 12:53 12:56 20.9 24.4 2026-04-15 12:53:00
30: 246.35 12:46 12:49 21.5 24.8 2026-04-15 12:46:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 1 15/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 1 15/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 1 15/04/2026
4: 4 Água ozonizada AO3 1 1 1 15/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 1 15/04/2026
6: 6 Controle - Apenas água CON 2 2 1 15/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 1 15/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 1 15/04/2026
9: 9 Água ozonizada AO3 2 2 1 15/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 1 15/04/2026
11: 11 Controle - Apenas água CON 3 3 1 15/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 1 15/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 1 15/04/2026
14: 14 Água ozonizada AO3 3 3 1 15/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 1 15/04/2026
16: 16 Controle - Apenas água CON 4 4 1 15/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 1 15/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 1 15/04/2026
19: 19 Água ozonizada AO3 4 4 1 15/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 1 15/04/2026
21: 21 Controle - Apenas água CON 5 5 1 15/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 1 15/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 1 15/04/2026
24: 24 Água ozonizada AO3 5 5 1 15/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 1 15/04/2026
26: 26 Controle - Apenas água CON 6 6 1 15/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 1 15/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 1 15/04/2026
29: 29 Água ozonizada AO3 6 6 1 15/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 1 15/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:09 09:12 22.9 25.5 2026-04-15 09:09:00
2: 246.39 09:16 09:19 22.5 24.6 2026-04-15 09:16:00
3: 246.21 09:23 09:26 22.1 25.1 2026-04-15 09:23:00
4: 246.31 09:30 09:33 22.8 25.3 2026-04-15 09:30:00
5: 246.29 09:51 09:54 22.4 23.8 2026-04-15 09:51:00
6: 246.26 09:44 09:47 22.8 24.8 2026-04-15 09:44:00
7: 246.14 09:58 10:01 21.5 25.1 2026-04-15 09:58:00
8: 246.21 10:05 10:08 21.3 25.1 2026-04-15 10:05:00
9: 246.14 10:12 10:15 21.7 25.0 2026-04-15 10:12:00
10: 246.35 10:19 10:22 20.6 25.5 2026-04-15 10:19:00
11: 246.26 10:26 10:29 22.3 25.3 2026-04-15 10:26:00
12: 246.30 10:33 10:36 22.1 25.1 2026-04-15 10:33:00
13: 246.38 10:40 10:43 21.4 25.0 2026-04-15 10:40:00
14: 246.37 10:47 10:50 21.3 25.3 2026-04-15 10:47:00
15: 246.15 10:54 10:57 21.5 25.6 2026-04-15 10:54:00
16: 246.50 11:01 11:04 21.3 25.1 2026-04-15 11:01:00
17: 246.36 11:08 11:11 21.6 25.1 2026-04-15 11:08:00
18: 246.30 11:15 11:18 21.5 25.0 2026-04-15 11:15:00
19: 246.25 11:22 11:25 21.6 25.3 2026-04-15 11:22:00
20: 246.34 11:50 11:53 21.3 24.8 2026-04-15 11:50:00
21: 246.23 11:36 11:39 20.7 25.3 2026-04-15 11:36:00
22: 246.18 11:43 11:46 21.9 25.1 2026-04-15 11:43:00
23: 246.21 11:57 12:00 22.3 25.1 2026-04-15 11:57:00
24: 246.31 12:04 12:07 21.7 25.3 2026-04-15 12:04:00
25: 246.35 12:11 12:14 22.3 25.3 2026-04-15 12:11:00
26: 246.25 12:18 12:21 21.7 25.2 2026-04-15 12:18:00
27: 246.25 12:25 12:28 20.9 25.2 2026-04-15 12:25:00
28: 246.36 12:32 12:35 21.1 25.0 2026-04-15 12:32:00
29: 246.23 12:53 12:56 20.9 24.4 2026-04-15 12:53:00
30: 246.35 12:46 12:49 21.5 24.8 2026-04-15 12:46:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-15 09:12:00
2: 2026-04-15 09:19:00
3: 2026-04-15 09:26:00
4: 2026-04-15 09:33:00
5: 2026-04-15 09:54:00
6: 2026-04-15 09:47:00
7: 2026-04-15 10:01:00
8: 2026-04-15 10:08:00
9: 2026-04-15 10:15:00
10: 2026-04-15 10:22:00
11: 2026-04-15 10:29:00
12: 2026-04-15 10:36:00
13: 2026-04-15 10:43:00
14: 2026-04-15 10:50:00
15: 2026-04-15 10:57:00
16: 2026-04-15 11:04:00
17: 2026-04-15 11:11:00
18: 2026-04-15 11:18:00
19: 2026-04-15 11:25:00
20: 2026-04-15 11:53:00
21: 2026-04-15 11:39:00
22: 2026-04-15 11:46:00
23: 2026-04-15 12:00:00
24: 2026-04-15 12:07:00
25: 2026-04-15 12:14:00
26: 2026-04-15 12:21:00
27: 2026-04-15 12:28:00
28: 2026-04-15 12:35:00
29: 2026-04-15 12:56:00
30: 2026-04-15 12:49:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura1 = copy(dados1)
leitura1[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-15 09:00:00.302 105.4167 6 0.3217566 475.4381 2.280470 2.825441 195.4304
2: 2026-04-15 09:00:01.078 105.4167 6 0.3217608 475.3730 2.280697 2.825593 195.3620
3: 2026-04-15 09:00:01.736 105.4167 6 0.3195317 475.3179 2.280889 2.825721 195.3041
4: 2026-04-15 09:00:02.496 105.4167 6 0.3169542 475.2595 2.281130 2.826495 195.2260
5: 2026-04-15 09:00:03.558 105.4167 6 0.3133611 475.2594 2.281465 2.827570 195.1171
---
17282: 2026-04-15 12:55:56.891 105.5805 1 0.3281264 568.5016 2.942714 4.671953 202.7369
17283: 2026-04-15 12:55:57.677 105.5805 1 0.3305572 568.6779 2.942535 4.684007 203.1691
17284: 2026-04-15 12:55:58.753 105.5805 1 0.3338910 569.1185 2.942289 4.700526 203.7612
17285: 2026-04-15 12:55:59.581 105.5806 1 0.3339351 569.4571 2.942101 4.713218 204.2159
17286: 2026-04-15 12:55:59.910 105.5806 1 0.3339171 569.5919 2.942026 4.718269 204.3968
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-15 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-15 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-15 09:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-15 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-15 09:00:03 NA <NA> NA NA NA NA NA
---
17282: 2026-04-15 12:55:56 NA <NA> NA NA NA NA NA
17283: 2026-04-15 12:55:57 NA <NA> NA NA NA NA NA
17284: 2026-04-15 12:55:58 NA <NA> NA NA NA NA NA
17285: 2026-04-15 12:55:59 NA <NA> NA NA NA NA NA
17286: 2026-04-15 12:55:59 NA <NA> NA NA NA NA NA
leitura1[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-15 09:00:00.302 105.4167 6 0.3217566 475.4381 2.280470 2.825441 195.4304
2: 2026-04-15 09:00:01.078 105.4167 6 0.3217608 475.3730 2.280697 2.825593 195.3620
3: 2026-04-15 09:00:01.736 105.4167 6 0.3195317 475.3179 2.280889 2.825721 195.3041
4: 2026-04-15 09:00:02.496 105.4167 6 0.3169542 475.2595 2.281130 2.826495 195.2260
5: 2026-04-15 09:00:03.558 105.4167 6 0.3133611 475.2594 2.281465 2.827570 195.1171
---
17282: 2026-04-15 12:55:56.891 105.5805 1 0.3281264 568.5016 2.942714 4.671953 202.7369
17283: 2026-04-15 12:55:57.677 105.5805 1 0.3305572 568.6779 2.942535 4.684007 203.1691
17284: 2026-04-15 12:55:58.753 105.5805 1 0.3338910 569.1185 2.942289 4.700526 203.7612
17285: 2026-04-15 12:55:59.581 105.5806 1 0.3339351 569.4571 2.942101 4.713218 204.2159
17286: 2026-04-15 12:55:59.910 105.5806 1 0.3339171 569.5919 2.942026 4.718269 204.3968
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-15 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-15 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-15 09:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-15 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-15 09:00:03 NA <NA> NA NA NA NA NA
---
17282: 2026-04-15 12:55:56 29 AO3 6 6 1 246.23 24.4
17283: 2026-04-15 12:55:57 29 AO3 6 6 1 246.23 24.4
17284: 2026-04-15 12:55:58 29 AO3 6 6 1 246.23 24.4
17285: 2026-04-15 12:55:59 29 AO3 6 6 1 246.23 24.4
17286: 2026-04-15 12:55:59 29 AO3 6 6 1 246.23 24.4
# Manter apenas as leituras válidas dos frascos
leitura1 = leitura1[MPVPosition == 1 & !is.na(Bottle)]
View(leitura1)
Leitura 2 - 16/04/2026
########################### PREPARAR DADOS ###########################
dados2 = as.data.table(filtrados_leitura2)
id = as.data.table(ID.leitura2)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 2 16/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 2 16/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 2 16/04/2026
4: 4 Água ozonizada AO3 1 1 2 16/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 2 16/04/2026
6: 6 Controle - Apenas água CON 2 2 2 16/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 2 16/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 2 16/04/2026
9: 9 Água ozonizada AO3 2 2 2 16/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 2 16/04/2026
11: 11 Controle - Apenas água CON 3 3 2 16/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 2 16/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 2 16/04/2026
14: 14 Água ozonizada AO3 3 3 2 16/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 2 16/04/2026
16: 16 Controle - Apenas água CON 4 4 2 16/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 2 16/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 2 16/04/2026
19: 19 Água ozonizada AO3 4 4 2 16/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 2 16/04/2026
21: 21 Controle - Apenas água CON 5 5 2 16/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 2 16/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 2 16/04/2026
24: 24 Água ozonizada AO3 5 5 2 16/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 2 16/04/2026
26: 26 Controle - Apenas água CON 6 6 2 16/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 2 16/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 2 16/04/2026
29: 29 Água ozonizada AO3 6 6 2 16/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 2 16/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 08:49 08:52 24.1 24.9 2026-04-16 08:49:00
2: 246.39 08:56 08:59 24.1 25.3 2026-04-16 08:56:00
3: 246.21 09:03 09:06 24.4 25.2 2026-04-16 09:03:00
4: 246.31 09:10 09:13 24.3 25.3 2026-04-16 09:10:00
5: 246.29 09:17 09:20 24.3 25.5 2026-04-16 09:17:00
6: 246.26 09:24 09:27 24.3 25.3 2026-04-16 09:24:00
7: 246.14 09:31 09:34 23.8 25.5 2026-04-16 09:31:00
8: 246.21 09:38 09:41 22.1 25.2 2026-04-16 09:38:00
9: 246.14 09:45 09:48 21.8 25.3 2026-04-16 09:45:00
10: 246.35 09:52 09:55 22.6 25.3 2026-04-16 09:52:00
11: 246.26 09:59 10:02 21.9 25.3 2026-04-16 09:59:00
12: 246.30 10:06 10:09 21.0 25.3 2026-04-16 10:06:00
13: 246.38 10:13 10:16 22.5 25.3 2026-04-16 10:13:00
14: 246.37 10:20 10:23 21.0 25.2 2026-04-16 10:20:00
15: 246.15 10:27 10:30 21.4 25.3 2026-04-16 10:27:00
16: 246.50 10:34 10:37 21.3 25.3 2026-04-16 10:34:00
17: 246.36 10:41 10:44 21.8 25.3 2026-04-16 10:41:00
18: 246.30 10:48 10:51 22.5 25.3 2026-04-16 10:48:00
19: 246.25 10:55 10:58 22.1 25.2 2026-04-16 10:55:00
20: 246.34 11:02 11:05 21.9 25.8 2026-04-16 11:02:00
21: 246.23 11:23 11:26 22.5 25.7 2026-04-16 11:23:00
22: 246.18 12:32 12:35 23.4 24.9 2026-04-16 12:32:00
23: 246.21 12:39 12:42 22.8 24.8 2026-04-16 12:39:00
24: 246.31 12:46 12:49 22.6 25.1 2026-04-16 12:46:00
25: 246.35 12:53 12:56 20.3 24.9 2026-04-16 12:53:00
26: 246.25 13:00 13:03 22.7 24.8 2026-04-16 13:00:00
27: 246.25 13:07 13:10 20.6 24.6 2026-04-16 13:07:00
28: 246.36 13:14 13:17 22.1 25.3 2026-04-16 13:14:00
29: 246.23 13:21 13:24 22.8 25.1 2026-04-16 13:21:00
30: 246.35 13:28 13:31 21.3 25.2 2026-04-16 13:28:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 2 16/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 2 16/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 2 16/04/2026
4: 4 Água ozonizada AO3 1 1 2 16/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 2 16/04/2026
6: 6 Controle - Apenas água CON 2 2 2 16/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 2 16/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 2 16/04/2026
9: 9 Água ozonizada AO3 2 2 2 16/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 2 16/04/2026
11: 11 Controle - Apenas água CON 3 3 2 16/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 2 16/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 2 16/04/2026
14: 14 Água ozonizada AO3 3 3 2 16/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 2 16/04/2026
16: 16 Controle - Apenas água CON 4 4 2 16/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 2 16/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 2 16/04/2026
19: 19 Água ozonizada AO3 4 4 2 16/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 2 16/04/2026
21: 21 Controle - Apenas água CON 5 5 2 16/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 2 16/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 2 16/04/2026
24: 24 Água ozonizada AO3 5 5 2 16/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 2 16/04/2026
26: 26 Controle - Apenas água CON 6 6 2 16/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 2 16/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 2 16/04/2026
29: 29 Água ozonizada AO3 6 6 2 16/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 2 16/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 08:49 08:52 24.1 24.9 2026-04-16 08:49:00
2: 246.39 08:56 08:59 24.1 25.3 2026-04-16 08:56:00
3: 246.21 09:03 09:06 24.4 25.2 2026-04-16 09:03:00
4: 246.31 09:10 09:13 24.3 25.3 2026-04-16 09:10:00
5: 246.29 09:17 09:20 24.3 25.5 2026-04-16 09:17:00
6: 246.26 09:24 09:27 24.3 25.3 2026-04-16 09:24:00
7: 246.14 09:31 09:34 23.8 25.5 2026-04-16 09:31:00
8: 246.21 09:38 09:41 22.1 25.2 2026-04-16 09:38:00
9: 246.14 09:45 09:48 21.8 25.3 2026-04-16 09:45:00
10: 246.35 09:52 09:55 22.6 25.3 2026-04-16 09:52:00
11: 246.26 09:59 10:02 21.9 25.3 2026-04-16 09:59:00
12: 246.30 10:06 10:09 21.0 25.3 2026-04-16 10:06:00
13: 246.38 10:13 10:16 22.5 25.3 2026-04-16 10:13:00
14: 246.37 10:20 10:23 21.0 25.2 2026-04-16 10:20:00
15: 246.15 10:27 10:30 21.4 25.3 2026-04-16 10:27:00
16: 246.50 10:34 10:37 21.3 25.3 2026-04-16 10:34:00
17: 246.36 10:41 10:44 21.8 25.3 2026-04-16 10:41:00
18: 246.30 10:48 10:51 22.5 25.3 2026-04-16 10:48:00
19: 246.25 10:55 10:58 22.1 25.2 2026-04-16 10:55:00
20: 246.34 11:02 11:05 21.9 25.8 2026-04-16 11:02:00
21: 246.23 11:23 11:26 22.5 25.7 2026-04-16 11:23:00
22: 246.18 12:32 12:35 23.4 24.9 2026-04-16 12:32:00
23: 246.21 12:39 12:42 22.8 24.8 2026-04-16 12:39:00
24: 246.31 12:46 12:49 22.6 25.1 2026-04-16 12:46:00
25: 246.35 12:53 12:56 20.3 24.9 2026-04-16 12:53:00
26: 246.25 13:00 13:03 22.7 24.8 2026-04-16 13:00:00
27: 246.25 13:07 13:10 20.6 24.6 2026-04-16 13:07:00
28: 246.36 13:14 13:17 22.1 25.3 2026-04-16 13:14:00
29: 246.23 13:21 13:24 22.8 25.1 2026-04-16 13:21:00
30: 246.35 13:28 13:31 21.3 25.2 2026-04-16 13:28:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-16 08:52:00
2: 2026-04-16 08:59:00
3: 2026-04-16 09:06:00
4: 2026-04-16 09:13:00
5: 2026-04-16 09:20:00
6: 2026-04-16 09:27:00
7: 2026-04-16 09:34:00
8: 2026-04-16 09:41:00
9: 2026-04-16 09:48:00
10: 2026-04-16 09:55:00
11: 2026-04-16 10:02:00
12: 2026-04-16 10:09:00
13: 2026-04-16 10:16:00
14: 2026-04-16 10:23:00
15: 2026-04-16 10:30:00
16: 2026-04-16 10:37:00
17: 2026-04-16 10:44:00
18: 2026-04-16 10:51:00
19: 2026-04-16 10:58:00
20: 2026-04-16 11:05:00
21: 2026-04-16 11:26:00
22: 2026-04-16 12:35:00
23: 2026-04-16 12:42:00
24: 2026-04-16 12:49:00
25: 2026-04-16 12:56:00
26: 2026-04-16 13:03:00
27: 2026-04-16 13:10:00
28: 2026-04-16 13:17:00
29: 2026-04-16 13:24:00
30: 2026-04-16 13:31:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura2 = copy(dados2)
leitura2[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-16 08:00:00.319 106.375 2 0.3453462 519.8073 2.843718 1.980916 174.8344
2: 2026-04-16 08:00:00.990 106.375 2 0.3408664 519.7384 2.843515 1.981191 174.8154
3: 2026-04-16 08:00:01.782 106.375 2 0.3355795 519.6579 2.843278 1.981595 174.7870
4: 2026-04-16 08:00:02.869 106.375 2 0.3283175 519.6893 2.842953 1.982147 174.7481
5: 2026-04-16 08:00:03.670 106.375 2 0.3283217 519.7123 2.842713 1.982553 174.7195
---
23326: 2026-04-16 13:59:56.207 106.625 2 0.3313497 473.5128 2.751786 1.478828 134.6767
23327: 2026-04-16 13:59:56.976 106.625 2 0.3313584 473.4986 2.751614 1.480540 134.7796
23328: 2026-04-16 13:59:57.631 106.625 2 0.3310794 473.4865 2.751467 1.481998 134.8673
23329: 2026-04-16 13:59:58.388 106.625 2 0.3307511 473.4638 2.751260 1.482631 134.9263
23330: 2026-04-16 13:59:59.447 106.625 2 0.3302906 473.3283 2.750971 1.483521 135.0090
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-16 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-16 08:00:00 NA <NA> NA NA NA NA NA
3: 2026-04-16 08:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-16 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-16 08:00:03 NA <NA> NA NA NA NA NA
---
23326: 2026-04-16 13:59:56 NA <NA> NA NA NA NA NA
23327: 2026-04-16 13:59:56 NA <NA> NA NA NA NA NA
23328: 2026-04-16 13:59:57 NA <NA> NA NA NA NA NA
23329: 2026-04-16 13:59:58 NA <NA> NA NA NA NA NA
23330: 2026-04-16 13:59:59 NA <NA> NA NA NA NA NA
leitura2[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-16 08:00:00.319 106.375 2 0.3453462 519.8073 2.843718 1.980916 174.8344
2: 2026-04-16 08:00:00.990 106.375 2 0.3408664 519.7384 2.843515 1.981191 174.8154
3: 2026-04-16 08:00:01.782 106.375 2 0.3355795 519.6579 2.843278 1.981595 174.7870
4: 2026-04-16 08:00:02.869 106.375 2 0.3283175 519.6893 2.842953 1.982147 174.7481
5: 2026-04-16 08:00:03.670 106.375 2 0.3283217 519.7123 2.842713 1.982553 174.7195
---
23326: 2026-04-16 13:59:56.207 106.625 2 0.3313497 473.5128 2.751786 1.478828 134.6767
23327: 2026-04-16 13:59:56.976 106.625 2 0.3313584 473.4986 2.751614 1.480540 134.7796
23328: 2026-04-16 13:59:57.631 106.625 2 0.3310794 473.4865 2.751467 1.481998 134.8673
23329: 2026-04-16 13:59:58.388 106.625 2 0.3307511 473.4638 2.751260 1.482631 134.9263
23330: 2026-04-16 13:59:59.447 106.625 2 0.3302906 473.3283 2.750971 1.483521 135.0090
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-16 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-16 08:00:00 NA <NA> NA NA NA NA NA
3: 2026-04-16 08:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-16 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-16 08:00:03 NA <NA> NA NA NA NA NA
---
23326: 2026-04-16 13:59:56 NA <NA> NA NA NA NA NA
23327: 2026-04-16 13:59:56 NA <NA> NA NA NA NA NA
23328: 2026-04-16 13:59:57 NA <NA> NA NA NA NA NA
23329: 2026-04-16 13:59:58 NA <NA> NA NA NA NA NA
23330: 2026-04-16 13:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura2 = leitura2[MPVPosition == 1 & !is.na(Bottle)]
View(leitura2)
Leitura 3 - 17/04/2026
########################### PREPARAR DADOS ###########################
dados3 = as.data.table(filtrados_leitura3)
id = as.data.table(ID.leitura3)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 3 17/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 3 17/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 3 17/04/2026
4: 4 Água ozonizada AO3 1 1 3 17/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 3 17/04/2026
6: 6 Controle - Apenas água CON 2 2 3 17/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 3 17/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 3 17/04/2026
9: 9 Água ozonizada AO3 2 2 3 17/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 3 17/04/2026
11: 11 Controle - Apenas água CON 3 3 3 17/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 3 17/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 3 17/04/2026
14: 14 Água ozonizada AO3 3 3 3 17/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 3 17/04/2026
16: 16 Controle - Apenas água CON 4 4 3 17/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 3 17/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 3 17/04/2026
19: 19 Água ozonizada AO3 4 4 3 17/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 3 17/04/2026
21: 21 Controle - Apenas água CON 5 5 3 17/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 3 17/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 3 17/04/2026
24: 24 Água ozonizada AO3 5 5 3 17/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 3 17/04/2026
26: 26 Controle - Apenas água CON 6 6 3 17/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 3 17/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 3 17/04/2026
29: 29 Água ozonizada AO3 6 6 3 17/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 3 17/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:09 09:12 22.8 25.1 2026-04-17 09:09:00
2: 246.39 09:16 09:19 21.8 24.9 2026-04-17 09:16:00
3: 246.21 09:23 09:26 21.8 25.0 2026-04-17 09:23:00
4: 246.31 09:30 09:33 21.9 25.3 2026-04-17 09:30:00
5: 246.29 09:37 09:40 22.0 25.3 2026-04-17 09:37:00
6: 246.26 09:44 09:47 20.8 25.2 2026-04-17 09:44:00
7: 246.14 09:51 09:54 21.1 25.6 2026-04-17 09:51:00
8: 246.21 09:58 10:01 21.9 25.5 2026-04-17 09:58:00
9: 246.14 10:05 10:08 20.8 25.3 2026-04-17 10:05:00
10: 246.35 10:12 10:15 21.3 25.3 2026-04-17 10:12:00
11: 246.26 10:19 10:22 21.2 25.3 2026-04-17 10:19:00
12: 246.30 10:26 10:29 20.6 25.6 2026-04-17 10:26:00
13: 246.38 10:33 10:36 21.0 25.3 2026-04-17 10:33:00
14: 246.37 10:40 10:43 20.7 25.3 2026-04-17 10:40:00
15: 246.15 10:47 10:50 20.9 25.1 2026-04-17 10:47:00
16: 246.50 10:54 10:57 20.8 24.9 2026-04-17 10:54:00
17: 246.36 11:01 11:04 18.5 25.4 2026-04-17 11:01:00
18: 246.30 11:08 11:11 19.0 25.3 2026-04-17 11:08:00
19: 246.25 11:15 11:18 20.7 25.1 2026-04-17 11:15:00
20: 246.34 11:22 11:25 19.8 25.1 2026-04-17 11:22:00
21: 246.23 11:29 11:32 20.3 25.1 2026-04-17 11:29:00
22: 246.18 11:36 11:39 20.6 25.4 2026-04-17 11:36:00
23: 246.21 11:43 11:46 20.0 25.1 2026-04-17 11:43:00
24: 246.31 11:50 11:53 20.5 25.0 2026-04-17 11:50:00
25: 246.35 11:57 12:00 19.8 25.1 2026-04-17 11:57:00
26: 246.25 12:04 12:07 19.6 25.3 2026-04-17 12:04:00
27: 246.25 12:11 12:14 20.6 25.2 2026-04-17 12:11:00
28: 246.36 12:18 12:21 19.9 25.3 2026-04-17 12:18:00
29: 246.23 12:25 12:28 19.2 24.9 2026-04-17 12:25:00
30: 246.35 12:32 12:35 18.9 24.9 2026-04-17 12:32:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 3 17/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 3 17/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 3 17/04/2026
4: 4 Água ozonizada AO3 1 1 3 17/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 3 17/04/2026
6: 6 Controle - Apenas água CON 2 2 3 17/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 3 17/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 3 17/04/2026
9: 9 Água ozonizada AO3 2 2 3 17/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 3 17/04/2026
11: 11 Controle - Apenas água CON 3 3 3 17/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 3 17/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 3 17/04/2026
14: 14 Água ozonizada AO3 3 3 3 17/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 3 17/04/2026
16: 16 Controle - Apenas água CON 4 4 3 17/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 3 17/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 3 17/04/2026
19: 19 Água ozonizada AO3 4 4 3 17/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 3 17/04/2026
21: 21 Controle - Apenas água CON 5 5 3 17/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 3 17/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 3 17/04/2026
24: 24 Água ozonizada AO3 5 5 3 17/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 3 17/04/2026
26: 26 Controle - Apenas água CON 6 6 3 17/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 3 17/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 3 17/04/2026
29: 29 Água ozonizada AO3 6 6 3 17/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 3 17/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:09 09:12 22.8 25.1 2026-04-17 09:09:00
2: 246.39 09:16 09:19 21.8 24.9 2026-04-17 09:16:00
3: 246.21 09:23 09:26 21.8 25.0 2026-04-17 09:23:00
4: 246.31 09:30 09:33 21.9 25.3 2026-04-17 09:30:00
5: 246.29 09:37 09:40 22.0 25.3 2026-04-17 09:37:00
6: 246.26 09:44 09:47 20.8 25.2 2026-04-17 09:44:00
7: 246.14 09:51 09:54 21.1 25.6 2026-04-17 09:51:00
8: 246.21 09:58 10:01 21.9 25.5 2026-04-17 09:58:00
9: 246.14 10:05 10:08 20.8 25.3 2026-04-17 10:05:00
10: 246.35 10:12 10:15 21.3 25.3 2026-04-17 10:12:00
11: 246.26 10:19 10:22 21.2 25.3 2026-04-17 10:19:00
12: 246.30 10:26 10:29 20.6 25.6 2026-04-17 10:26:00
13: 246.38 10:33 10:36 21.0 25.3 2026-04-17 10:33:00
14: 246.37 10:40 10:43 20.7 25.3 2026-04-17 10:40:00
15: 246.15 10:47 10:50 20.9 25.1 2026-04-17 10:47:00
16: 246.50 10:54 10:57 20.8 24.9 2026-04-17 10:54:00
17: 246.36 11:01 11:04 18.5 25.4 2026-04-17 11:01:00
18: 246.30 11:08 11:11 19.0 25.3 2026-04-17 11:08:00
19: 246.25 11:15 11:18 20.7 25.1 2026-04-17 11:15:00
20: 246.34 11:22 11:25 19.8 25.1 2026-04-17 11:22:00
21: 246.23 11:29 11:32 20.3 25.1 2026-04-17 11:29:00
22: 246.18 11:36 11:39 20.6 25.4 2026-04-17 11:36:00
23: 246.21 11:43 11:46 20.0 25.1 2026-04-17 11:43:00
24: 246.31 11:50 11:53 20.5 25.0 2026-04-17 11:50:00
25: 246.35 11:57 12:00 19.8 25.1 2026-04-17 11:57:00
26: 246.25 12:04 12:07 19.6 25.3 2026-04-17 12:04:00
27: 246.25 12:11 12:14 20.6 25.2 2026-04-17 12:11:00
28: 246.36 12:18 12:21 19.9 25.3 2026-04-17 12:18:00
29: 246.23 12:25 12:28 19.2 24.9 2026-04-17 12:25:00
30: 246.35 12:32 12:35 18.9 24.9 2026-04-17 12:32:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-17 09:12:00
2: 2026-04-17 09:19:00
3: 2026-04-17 09:26:00
4: 2026-04-17 09:33:00
5: 2026-04-17 09:40:00
6: 2026-04-17 09:47:00
7: 2026-04-17 09:54:00
8: 2026-04-17 10:01:00
9: 2026-04-17 10:08:00
10: 2026-04-17 10:15:00
11: 2026-04-17 10:22:00
12: 2026-04-17 10:29:00
13: 2026-04-17 10:36:00
14: 2026-04-17 10:43:00
15: 2026-04-17 10:50:00
16: 2026-04-17 10:57:00
17: 2026-04-17 11:04:00
18: 2026-04-17 11:11:00
19: 2026-04-17 11:18:00
20: 2026-04-17 11:25:00
21: 2026-04-17 11:32:00
22: 2026-04-17 11:39:00
23: 2026-04-17 11:46:00
24: 2026-04-17 11:53:00
25: 2026-04-17 12:00:00
26: 2026-04-17 12:07:00
27: 2026-04-17 12:14:00
28: 2026-04-17 12:21:00
29: 2026-04-17 12:28:00
30: 2026-04-17 12:35:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura3 = copy(dados3)
leitura3[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-17 09:00:01.065 107.4167 2 0.3422074 567.7332 3.080015 1.930018 187.99025
2: 2026-04-17 09:00:01.825 107.4167 2 0.3422014 567.5623 3.080052 1.929129 187.96281
3: 2026-04-17 09:00:02.450 107.4167 2 0.3410180 567.4215 3.080083 1.928398 187.94019
4: 2026-04-17 09:00:03.190 107.4167 2 0.3396211 567.2517 3.080105 1.927198 187.81842
5: 2026-04-17 09:00:04.282 107.4167 2 0.3375602 567.0791 3.080139 1.925427 187.63873
---
18167: 2026-04-17 12:59:56.684 107.5833 2 0.3364050 459.2750 2.172541 1.357984 84.98730
18168: 2026-04-17 12:59:57.448 107.5833 2 0.3364013 459.2459 2.172491 1.357547 84.98544
18169: 2026-04-17 12:59:58.125 107.5833 2 0.3344320 459.2201 2.172447 1.357160 84.98376
18170: 2026-04-17 12:59:58.907 107.5833 2 0.3321558 459.1934 2.172407 1.357096 85.01648
18171: 2026-04-17 12:59:59.974 107.5833 2 0.3290474 459.2013 2.172352 1.357008 85.06117
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-17 09:00:01 NA <NA> NA NA NA NA NA
2: 2026-04-17 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-17 09:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-17 09:00:03 NA <NA> NA NA NA NA NA
5: 2026-04-17 09:00:04 NA <NA> NA NA NA NA NA
---
18167: 2026-04-17 12:59:56 NA <NA> NA NA NA NA NA
18168: 2026-04-17 12:59:57 NA <NA> NA NA NA NA NA
18169: 2026-04-17 12:59:58 NA <NA> NA NA NA NA NA
18170: 2026-04-17 12:59:58 NA <NA> NA NA NA NA NA
18171: 2026-04-17 12:59:59 NA <NA> NA NA NA NA NA
leitura3[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-17 09:00:01.065 107.4167 2 0.3422074 567.7332 3.080015 1.930018 187.99025
2: 2026-04-17 09:00:01.825 107.4167 2 0.3422014 567.5623 3.080052 1.929129 187.96281
3: 2026-04-17 09:00:02.450 107.4167 2 0.3410180 567.4215 3.080083 1.928398 187.94019
4: 2026-04-17 09:00:03.190 107.4167 2 0.3396211 567.2517 3.080105 1.927198 187.81842
5: 2026-04-17 09:00:04.282 107.4167 2 0.3375602 567.0791 3.080139 1.925427 187.63873
---
18167: 2026-04-17 12:59:56.684 107.5833 2 0.3364050 459.2750 2.172541 1.357984 84.98730
18168: 2026-04-17 12:59:57.448 107.5833 2 0.3364013 459.2459 2.172491 1.357547 84.98544
18169: 2026-04-17 12:59:58.125 107.5833 2 0.3344320 459.2201 2.172447 1.357160 84.98376
18170: 2026-04-17 12:59:58.907 107.5833 2 0.3321558 459.1934 2.172407 1.357096 85.01648
18171: 2026-04-17 12:59:59.974 107.5833 2 0.3290474 459.2013 2.172352 1.357008 85.06117
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-17 09:00:01 NA <NA> NA NA NA NA NA
2: 2026-04-17 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-17 09:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-17 09:00:03 NA <NA> NA NA NA NA NA
5: 2026-04-17 09:00:04 NA <NA> NA NA NA NA NA
---
18167: 2026-04-17 12:59:56 NA <NA> NA NA NA NA NA
18168: 2026-04-17 12:59:57 NA <NA> NA NA NA NA NA
18169: 2026-04-17 12:59:58 NA <NA> NA NA NA NA NA
18170: 2026-04-17 12:59:58 NA <NA> NA NA NA NA NA
18171: 2026-04-17 12:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura3 = leitura3[MPVPosition == 1 & !is.na(Bottle)]
View(leitura3)
Leitura 4 - 19/04/2026
########################### PREPARAR DADOS ###########################
dados4 = as.data.table(filtrados_leitura4)
id = as.data.table(ID.leitura4)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <int> <int> <char>
1: 1 Controle - Apenas água CON 1 1 4 19/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 4 19/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 4 19/04/2026
4: 4 Água ozonizada AO3 1 1 4 19/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 4 19/04/2026
6: 6 Controle - Apenas água CON 2 2 4 19/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 4 19/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 4 19/04/2026
9: 9 Água ozonizada AO3 2 2 4 19/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 4 19/04/2026
11: 11 Controle - Apenas água CON 3 3 4 19/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 4 19/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 4 19/04/2026
14: 14 Água ozonizada AO3 3 3 4 19/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 4 19/04/2026
16: 16 Controle - Apenas água CON 4 4 4 19/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 4 19/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 4 19/04/2026
19: 19 Água ozonizada AO3 4 4 4 19/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 4 19/04/2026
21: 21 Controle - Apenas água CON 5 5 4 19/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 4 19/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 4 19/04/2026
24: 24 Água ozonizada AO3 5 5 4 19/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 4 19/04/2026
26: 26 Controle - Apenas água CON 6 6 4 19/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 4 19/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 4 19/04/2026
29: 29 Água ozonizada AO3 6 6 4 19/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 4 19/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:31 09:34 23.1 25.2 2026-04-19 09:31:00
2: 246.39 09:38 09:41 21.5 25.0 2026-04-19 09:38:00
3: 246.21 09:45 09:48 22.3 25.5 2026-04-19 09:45:00
4: 246.31 09:52 09:55 21.9 25.3 2026-04-19 09:52:00
5: 246.29 09:59 10:02 20.9 25.1 2026-04-19 09:59:00
6: 246.26 10:06 10:09 21.9 25.3 2026-04-19 10:06:00
7: 246.14 10:13 10:16 20.9 25.2 2026-04-19 10:13:00
8: 246.21 10:20 10:23 21.9 25.2 2026-04-19 10:20:00
9: 246.14 10:27 10:30 22.5 25.3 2026-04-19 10:27:00
10: 246.35 10:34 10:37 20.5 25.3 2026-04-19 10:34:00
11: 246.26 10:41 10:44 21.8 24.9 2026-04-19 10:41:00
12: 246.30 10:48 10:51 20.4 25.1 2026-04-19 10:48:00
13: 246.38 10:55 10:58 19.6 25.3 2026-04-19 10:55:00
14: 246.37 11:02 11:05 20.8 25.1 2026-04-19 11:02:00
15: 246.15 11:09 11:12 20.7 25.3 2026-04-19 11:09:00
16: 246.50 11:16 11:19 20.3 25.2 2026-04-19 11:16:00
17: 246.36 11:23 11:26 20.6 25.2 2026-04-19 11:23:00
18: 246.30 12:05 12:08 22.5 24.1 2026-04-19 12:05:00
19: 246.25 12:12 12:15 20.6 25.3 2026-04-19 12:12:00
20: 246.34 12:19 12:22 19.1 25.0 2026-04-19 12:19:00
21: 246.23 12:26 12:29 19.4 25.1 2026-04-19 12:26:00
22: 246.18 12:33 12:36 20.0 25.1 2026-04-19 12:33:00
23: 246.21 12:40 12:43 19.9 24.9 2026-04-19 12:40:00
24: 246.31 13:01 13:04 19.9 24.6 2026-04-19 13:01:00
25: 246.35 12:54 12:57 22.6 25.1 2026-04-19 12:54:00
26: 246.25 13:15 13:18 21.7 25.1 2026-04-19 13:15:00
27: 246.25 13:22 13:25 20.5 25.3 2026-04-19 13:22:00
28: 246.36 13:29 13:32 20.1 24.9 2026-04-19 13:29:00
29: 246.23 13:36 13:39 20.0 24.8 2026-04-19 13:36:00
30: 246.35 13:43 13:46 19.6 25.2 2026-04-19 13:43:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <int> <int> <char>
1: 1 Controle - Apenas água CON 1 1 4 19/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 4 19/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 4 19/04/2026
4: 4 Água ozonizada AO3 1 1 4 19/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 4 19/04/2026
6: 6 Controle - Apenas água CON 2 2 4 19/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 4 19/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 4 19/04/2026
9: 9 Água ozonizada AO3 2 2 4 19/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 4 19/04/2026
11: 11 Controle - Apenas água CON 3 3 4 19/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 4 19/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 4 19/04/2026
14: 14 Água ozonizada AO3 3 3 4 19/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 4 19/04/2026
16: 16 Controle - Apenas água CON 4 4 4 19/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 4 19/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 4 19/04/2026
19: 19 Água ozonizada AO3 4 4 4 19/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 4 19/04/2026
21: 21 Controle - Apenas água CON 5 5 4 19/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 4 19/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 4 19/04/2026
24: 24 Água ozonizada AO3 5 5 4 19/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 4 19/04/2026
26: 26 Controle - Apenas água CON 6 6 4 19/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 4 19/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 4 19/04/2026
29: 29 Água ozonizada AO3 6 6 4 19/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 4 19/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:31 09:34 23.1 25.2 2026-04-19 09:31:00
2: 246.39 09:38 09:41 21.5 25.0 2026-04-19 09:38:00
3: 246.21 09:45 09:48 22.3 25.5 2026-04-19 09:45:00
4: 246.31 09:52 09:55 21.9 25.3 2026-04-19 09:52:00
5: 246.29 09:59 10:02 20.9 25.1 2026-04-19 09:59:00
6: 246.26 10:06 10:09 21.9 25.3 2026-04-19 10:06:00
7: 246.14 10:13 10:16 20.9 25.2 2026-04-19 10:13:00
8: 246.21 10:20 10:23 21.9 25.2 2026-04-19 10:20:00
9: 246.14 10:27 10:30 22.5 25.3 2026-04-19 10:27:00
10: 246.35 10:34 10:37 20.5 25.3 2026-04-19 10:34:00
11: 246.26 10:41 10:44 21.8 24.9 2026-04-19 10:41:00
12: 246.30 10:48 10:51 20.4 25.1 2026-04-19 10:48:00
13: 246.38 10:55 10:58 19.6 25.3 2026-04-19 10:55:00
14: 246.37 11:02 11:05 20.8 25.1 2026-04-19 11:02:00
15: 246.15 11:09 11:12 20.7 25.3 2026-04-19 11:09:00
16: 246.50 11:16 11:19 20.3 25.2 2026-04-19 11:16:00
17: 246.36 11:23 11:26 20.6 25.2 2026-04-19 11:23:00
18: 246.30 12:05 12:08 22.5 24.1 2026-04-19 12:05:00
19: 246.25 12:12 12:15 20.6 25.3 2026-04-19 12:12:00
20: 246.34 12:19 12:22 19.1 25.0 2026-04-19 12:19:00
21: 246.23 12:26 12:29 19.4 25.1 2026-04-19 12:26:00
22: 246.18 12:33 12:36 20.0 25.1 2026-04-19 12:33:00
23: 246.21 12:40 12:43 19.9 24.9 2026-04-19 12:40:00
24: 246.31 13:01 13:04 19.9 24.6 2026-04-19 13:01:00
25: 246.35 12:54 12:57 22.6 25.1 2026-04-19 12:54:00
26: 246.25 13:15 13:18 21.7 25.1 2026-04-19 13:15:00
27: 246.25 13:22 13:25 20.5 25.3 2026-04-19 13:22:00
28: 246.36 13:29 13:32 20.1 24.9 2026-04-19 13:29:00
29: 246.23 13:36 13:39 20.0 24.8 2026-04-19 13:36:00
30: 246.35 13:43 13:46 19.6 25.2 2026-04-19 13:43:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-19 09:34:00
2: 2026-04-19 09:41:00
3: 2026-04-19 09:48:00
4: 2026-04-19 09:55:00
5: 2026-04-19 10:02:00
6: 2026-04-19 10:09:00
7: 2026-04-19 10:16:00
8: 2026-04-19 10:23:00
9: 2026-04-19 10:30:00
10: 2026-04-19 10:37:00
11: 2026-04-19 10:44:00
12: 2026-04-19 10:51:00
13: 2026-04-19 10:58:00
14: 2026-04-19 11:05:00
15: 2026-04-19 11:12:00
16: 2026-04-19 11:19:00
17: 2026-04-19 11:26:00
18: 2026-04-19 12:08:00
19: 2026-04-19 12:15:00
20: 2026-04-19 12:22:00
21: 2026-04-19 12:29:00
22: 2026-04-19 12:36:00
23: 2026-04-19 12:43:00
24: 2026-04-19 13:04:00
25: 2026-04-19 12:57:00
26: 2026-04-19 13:18:00
27: 2026-04-19 13:25:00
28: 2026-04-19 13:32:00
29: 2026-04-19 13:39:00
30: 2026-04-19 13:46:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura4 = copy(dados4)
leitura4[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-19 09:00:00.414 109.4167 2 0.3251889 515.2003 3.100977 1.942901 209.1246
2: 2026-04-19 09:00:01.065 109.4167 2 0.3298713 515.1399 3.100505 1.942570 209.1125
3: 2026-04-19 09:00:01.825 109.4167 2 0.3353444 515.0749 3.099976 1.942788 209.2270
4: 2026-04-19 09:00:02.881 109.4167 2 0.3429575 515.1224 3.099241 1.943086 209.3864
5: 2026-04-19 09:00:03.687 109.4167 2 0.3429540 515.1585 3.098681 1.943314 209.5077
---
22258: 2026-04-19 13:59:56.516 109.6250 1 0.3363921 455.7402 2.814126 1.588747 235.1718
22259: 2026-04-19 13:59:57.160 109.6250 1 0.3338485 455.7401 2.814224 1.588953 235.2667
22260: 2026-04-19 13:59:57.924 109.6250 1 0.3308305 455.7482 2.814379 1.590230 235.4322
22261: 2026-04-19 13:59:59.000 109.6250 1 0.3265808 455.8966 2.814597 1.592024 235.6652
22262: 2026-04-19 13:59:59.799 109.6250 1 0.3265830 456.0068 2.814758 1.593357 235.8382
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-19 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-19 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-19 09:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-19 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-19 09:00:03 NA <NA> NA NA NA NA NA
---
22258: 2026-04-19 13:59:56 NA <NA> NA NA NA NA NA
22259: 2026-04-19 13:59:57 NA <NA> NA NA NA NA NA
22260: 2026-04-19 13:59:57 NA <NA> NA NA NA NA NA
22261: 2026-04-19 13:59:59 NA <NA> NA NA NA NA NA
22262: 2026-04-19 13:59:59 NA <NA> NA NA NA NA NA
leitura4[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-19 09:00:00.414 109.4167 2 0.3251889 515.2003 3.100977 1.942901 209.1246
2: 2026-04-19 09:00:01.065 109.4167 2 0.3298713 515.1399 3.100505 1.942570 209.1125
3: 2026-04-19 09:00:01.825 109.4167 2 0.3353444 515.0749 3.099976 1.942788 209.2270
4: 2026-04-19 09:00:02.881 109.4167 2 0.3429575 515.1224 3.099241 1.943086 209.3864
5: 2026-04-19 09:00:03.687 109.4167 2 0.3429540 515.1585 3.098681 1.943314 209.5077
---
22258: 2026-04-19 13:59:56.516 109.6250 1 0.3363921 455.7402 2.814126 1.588747 235.1718
22259: 2026-04-19 13:59:57.160 109.6250 1 0.3338485 455.7401 2.814224 1.588953 235.2667
22260: 2026-04-19 13:59:57.924 109.6250 1 0.3308305 455.7482 2.814379 1.590230 235.4322
22261: 2026-04-19 13:59:59.000 109.6250 1 0.3265808 455.8966 2.814597 1.592024 235.6652
22262: 2026-04-19 13:59:59.799 109.6250 1 0.3265830 456.0068 2.814758 1.593357 235.8382
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-19 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-19 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-19 09:00:01 NA <NA> NA NA NA NA NA
4: 2026-04-19 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-19 09:00:03 NA <NA> NA NA NA NA NA
---
22258: 2026-04-19 13:59:56 NA <NA> NA NA NA NA NA
22259: 2026-04-19 13:59:57 NA <NA> NA NA NA NA NA
22260: 2026-04-19 13:59:57 NA <NA> NA NA NA NA NA
22261: 2026-04-19 13:59:59 NA <NA> NA NA NA NA NA
22262: 2026-04-19 13:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura4 = leitura4[MPVPosition == 1 & !is.na(Bottle)]
View(leitura4)
Leitura 5 - 22/04/2026
########################### PREPARAR DADOS ###########################
dados5 = as.data.table(filtrados_leitura5)
id = as.data.table(ID.leitura5)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <int> <int> <char>
1: 1 Controle - Apenas água CON 1 1 5 22/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 5 22/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 5 22/04/2026
4: 4 Água ozonizada AO3 1 1 5 22/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 5 22/04/2026
6: 6 Controle - Apenas água CON 2 2 5 22/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 5 22/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 5 22/04/2026
9: 9 Água ozonizada AO3 2 2 5 22/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 5 22/04/2026
11: 11 Controle - Apenas água CON 3 3 5 22/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 5 22/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 5 22/04/2026
14: 14 Água ozonizada AO3 3 3 5 22/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 5 22/04/2026
16: 16 Controle - Apenas água CON 4 4 5 22/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 5 22/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 5 22/04/2026
19: 19 Água ozonizada AO3 4 4 5 22/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 5 22/04/2026
21: 21 Controle - Apenas água CON 5 5 5 22/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 5 22/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 5 22/04/2026
24: 24 Água ozonizada AO3 5 5 5 22/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 5 22/04/2026
26: 26 Controle - Apenas água CON 6 6 5 22/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 5 22/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 5 22/04/2026
29: 29 Água ozonizada AO3 6 6 5 22/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 5 22/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 08:22 08:25 22.8 25.0 2026-04-22 08:22:00
2: 246.39 08:29 08:32 20.6 25.2 2026-04-22 08:29:00
3: 246.21 08:36 08:39 21.3 25.3 2026-04-22 08:36:00
4: 246.31 08:43 08:46 21.0 25.2 2026-04-22 08:43:00
5: 246.29 08:50 08:53 20.8 25.2 2026-04-22 08:50:00
6: 246.26 08:57 09:00 21.5 25.4 2026-04-22 08:57:00
7: 246.14 09:04 09:07 20.1 25.1 2026-04-22 09:04:00
8: 246.21 09:11 09:14 20.8 25.3 2026-04-22 09:11:00
9: 246.14 09:18 09:21 20.6 25.1 2026-04-22 09:18:00
10: 246.35 09:25 09:28 20.8 25.5 2026-04-22 09:25:00
11: 246.26 09:32 09:35 21.4 25.4 2026-04-22 09:32:00
12: 246.30 09:39 09:42 20.5 25.5 2026-04-22 09:39:00
13: 246.38 09:46 09:49 21.2 25.5 2026-04-22 09:46:00
14: 246.37 09:53 09:56 21.6 25.5 2026-04-22 09:53:00
15: 246.15 10:00 10:03 21.1 25.2 2026-04-22 10:00:00
16: 246.50 10:07 10:10 20.6 25.2 2026-04-22 10:07:00
17: 246.36 10:14 10:17 20.8 25.2 2026-04-22 10:14:00
18: 246.30 10:21 10:24 20.3 25.5 2026-04-22 10:21:00
19: 246.25 10:28 10:31 21.5 25.3 2026-04-22 10:28:00
20: 246.34 10:35 10:38 21.1 25.1 2026-04-22 10:35:00
21: 246.23 10:42 10:45 20.6 25.1 2026-04-22 10:42:00
22: 246.18 10:49 10:52 21.3 25.3 2026-04-22 10:49:00
23: 246.21 10:56 10:59 21.2 25.5 2026-04-22 10:56:00
24: 246.31 11:03 11:06 20.8 25.2 2026-04-22 11:03:00
25: 246.35 11:10 11:13 21.5 25.3 2026-04-22 11:10:00
26: 246.25 11:17 11:20 20.9 25.4 2026-04-22 11:17:00
27: 246.25 11:24 11:27 21.6 25.1 2026-04-22 11:24:00
28: 246.36 11:45 11:48 19.8 24.6 2026-04-22 11:45:00
29: 246.23 11:38 11:41 21.9 25.6 2026-04-22 11:38:00
30: 246.35 11:52 11:55 19.5 25.2 2026-04-22 11:52:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <int> <int> <char>
1: 1 Controle - Apenas água CON 1 1 5 22/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 5 22/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 5 22/04/2026
4: 4 Água ozonizada AO3 1 1 5 22/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 5 22/04/2026
6: 6 Controle - Apenas água CON 2 2 5 22/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 5 22/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 5 22/04/2026
9: 9 Água ozonizada AO3 2 2 5 22/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 5 22/04/2026
11: 11 Controle - Apenas água CON 3 3 5 22/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 5 22/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 5 22/04/2026
14: 14 Água ozonizada AO3 3 3 5 22/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 5 22/04/2026
16: 16 Controle - Apenas água CON 4 4 5 22/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 5 22/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 5 22/04/2026
19: 19 Água ozonizada AO3 4 4 5 22/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 5 22/04/2026
21: 21 Controle - Apenas água CON 5 5 5 22/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 5 22/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 5 22/04/2026
24: 24 Água ozonizada AO3 5 5 5 22/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 5 22/04/2026
26: 26 Controle - Apenas água CON 6 6 5 22/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 5 22/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 5 22/04/2026
29: 29 Água ozonizada AO3 6 6 5 22/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 5 22/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 08:22 08:25 22.8 25.0 2026-04-22 08:22:00
2: 246.39 08:29 08:32 20.6 25.2 2026-04-22 08:29:00
3: 246.21 08:36 08:39 21.3 25.3 2026-04-22 08:36:00
4: 246.31 08:43 08:46 21.0 25.2 2026-04-22 08:43:00
5: 246.29 08:50 08:53 20.8 25.2 2026-04-22 08:50:00
6: 246.26 08:57 09:00 21.5 25.4 2026-04-22 08:57:00
7: 246.14 09:04 09:07 20.1 25.1 2026-04-22 09:04:00
8: 246.21 09:11 09:14 20.8 25.3 2026-04-22 09:11:00
9: 246.14 09:18 09:21 20.6 25.1 2026-04-22 09:18:00
10: 246.35 09:25 09:28 20.8 25.5 2026-04-22 09:25:00
11: 246.26 09:32 09:35 21.4 25.4 2026-04-22 09:32:00
12: 246.30 09:39 09:42 20.5 25.5 2026-04-22 09:39:00
13: 246.38 09:46 09:49 21.2 25.5 2026-04-22 09:46:00
14: 246.37 09:53 09:56 21.6 25.5 2026-04-22 09:53:00
15: 246.15 10:00 10:03 21.1 25.2 2026-04-22 10:00:00
16: 246.50 10:07 10:10 20.6 25.2 2026-04-22 10:07:00
17: 246.36 10:14 10:17 20.8 25.2 2026-04-22 10:14:00
18: 246.30 10:21 10:24 20.3 25.5 2026-04-22 10:21:00
19: 246.25 10:28 10:31 21.5 25.3 2026-04-22 10:28:00
20: 246.34 10:35 10:38 21.1 25.1 2026-04-22 10:35:00
21: 246.23 10:42 10:45 20.6 25.1 2026-04-22 10:42:00
22: 246.18 10:49 10:52 21.3 25.3 2026-04-22 10:49:00
23: 246.21 10:56 10:59 21.2 25.5 2026-04-22 10:56:00
24: 246.31 11:03 11:06 20.8 25.2 2026-04-22 11:03:00
25: 246.35 11:10 11:13 21.5 25.3 2026-04-22 11:10:00
26: 246.25 11:17 11:20 20.9 25.4 2026-04-22 11:17:00
27: 246.25 11:24 11:27 21.6 25.1 2026-04-22 11:24:00
28: 246.36 11:45 11:48 19.8 24.6 2026-04-22 11:45:00
29: 246.23 11:38 11:41 21.9 25.6 2026-04-22 11:38:00
30: 246.35 11:52 11:55 19.5 25.2 2026-04-22 11:52:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-22 08:25:00
2: 2026-04-22 08:32:00
3: 2026-04-22 08:39:00
4: 2026-04-22 08:46:00
5: 2026-04-22 08:53:00
6: 2026-04-22 09:00:00
7: 2026-04-22 09:07:00
8: 2026-04-22 09:14:00
9: 2026-04-22 09:21:00
10: 2026-04-22 09:28:00
11: 2026-04-22 09:35:00
12: 2026-04-22 09:42:00
13: 2026-04-22 09:49:00
14: 2026-04-22 09:56:00
15: 2026-04-22 10:03:00
16: 2026-04-22 10:10:00
17: 2026-04-22 10:17:00
18: 2026-04-22 10:24:00
19: 2026-04-22 10:31:00
20: 2026-04-22 10:38:00
21: 2026-04-22 10:45:00
22: 2026-04-22 10:52:00
23: 2026-04-22 10:59:00
24: 2026-04-22 11:06:00
25: 2026-04-22 11:13:00
26: 2026-04-22 11:20:00
27: 2026-04-22 11:27:00
28: 2026-04-22 11:48:00
29: 2026-04-22 11:41:00
30: 2026-04-22 11:55:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura5 = copy(dados5)
leitura5[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-22 08:00:00.259 112.3750 2 0.3418550 489.4310 2.514914 1.739537 170.4868
2: 2026-04-22 08:00:01.322 112.3750 2 0.3383274 489.8048 2.515608 1.740927 170.4470
3: 2026-04-22 08:00:02.138 112.3750 2 0.3383381 490.0915 2.516139 1.741994 170.4166
4: 2026-04-22 08:00:02.476 112.3750 2 0.3366002 490.2103 2.516360 1.742436 170.4039
5: 2026-04-22 08:00:03.631 112.3750 2 0.3306664 490.6158 2.516621 1.743944 170.3608
---
17963: 2026-04-22 11:59:56.857 112.5416 1 0.3283243 485.9612 2.407098 2.780741 133.8801
17964: 2026-04-22 11:59:57.194 112.5416 1 0.3286898 485.9406 2.407094 2.780189 133.8402
17965: 2026-04-22 11:59:58.361 112.5416 1 0.3299555 485.8689 2.406784 2.778276 133.7019
17966: 2026-04-22 11:59:59.138 112.5417 1 0.3299510 485.8212 2.406578 2.777002 133.6098
17967: 2026-04-22 11:59:59.785 112.5417 1 0.3270313 485.7815 2.406406 2.775942 133.5331
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-22 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-22 08:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-22 08:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-22 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-22 08:00:03 NA <NA> NA NA NA NA NA
---
17963: 2026-04-22 11:59:56 NA <NA> NA NA NA NA NA
17964: 2026-04-22 11:59:57 NA <NA> NA NA NA NA NA
17965: 2026-04-22 11:59:58 NA <NA> NA NA NA NA NA
17966: 2026-04-22 11:59:59 NA <NA> NA NA NA NA NA
17967: 2026-04-22 11:59:59 NA <NA> NA NA NA NA NA
leitura5[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-22 08:00:00.259 112.3750 2 0.3418550 489.4310 2.514914 1.739537 170.4868
2: 2026-04-22 08:00:01.322 112.3750 2 0.3383274 489.8048 2.515608 1.740927 170.4470
3: 2026-04-22 08:00:02.138 112.3750 2 0.3383381 490.0915 2.516139 1.741994 170.4166
4: 2026-04-22 08:00:02.476 112.3750 2 0.3366002 490.2103 2.516360 1.742436 170.4039
5: 2026-04-22 08:00:03.631 112.3750 2 0.3306664 490.6158 2.516621 1.743944 170.3608
---
17963: 2026-04-22 11:59:56.857 112.5416 1 0.3283243 485.9612 2.407098 2.780741 133.8801
17964: 2026-04-22 11:59:57.194 112.5416 1 0.3286898 485.9406 2.407094 2.780189 133.8402
17965: 2026-04-22 11:59:58.361 112.5416 1 0.3299555 485.8689 2.406784 2.778276 133.7019
17966: 2026-04-22 11:59:59.138 112.5417 1 0.3299510 485.8212 2.406578 2.777002 133.6098
17967: 2026-04-22 11:59:59.785 112.5417 1 0.3270313 485.7815 2.406406 2.775942 133.5331
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-22 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-22 08:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-22 08:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-22 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-22 08:00:03 NA <NA> NA NA NA NA NA
---
17963: 2026-04-22 11:59:56 NA <NA> NA NA NA NA NA
17964: 2026-04-22 11:59:57 NA <NA> NA NA NA NA NA
17965: 2026-04-22 11:59:58 NA <NA> NA NA NA NA NA
17966: 2026-04-22 11:59:59 NA <NA> NA NA NA NA NA
17967: 2026-04-22 11:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura5 = leitura5[MPVPosition == 1 & !is.na(Bottle)]
View(leitura5)
Leitura 6 - 27/04/2026
########################### PREPARAR DADOS ###########################
dados6 = as.data.table(filtrados_leitura6)
id = as.data.table(ID.leitura6)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 6 27/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 6 27/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 6 27/04/2026
4: 4 Água ozonizada AO3 1 1 6 27/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 6 27/04/2026
6: 6 Controle - Apenas água CON 2 2 6 27/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 6 27/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 6 27/04/2026
9: 9 Água ozonizada AO3 2 2 6 27/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 6 27/04/2026
11: 11 Controle - Apenas água CON 3 3 6 27/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 6 27/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 6 27/04/2026
14: 14 Água ozonizada AO3 3 3 6 27/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 6 27/04/2026
16: 16 Controle - Apenas água CON 4 4 6 27/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 6 27/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 6 27/04/2026
19: 19 Água ozonizada AO3 4 4 6 27/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 6 27/04/2026
21: 21 Controle - Apenas água CON 5 5 6 27/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 6 27/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 6 27/04/2026
24: 24 Água ozonizada AO3 5 5 6 27/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 6 27/04/2026
26: 26 Controle - Apenas água CON 6 6 6 27/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 6 27/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 6 27/04/2026
29: 29 Água ozonizada AO3 6 6 6 27/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 6 27/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:06 09:09 23.1 25.3 2026-04-27 09:06:00
2: 246.39 09:13 09:16 22.4 25.3 2026-04-27 09:13:00
3: 246.21 09:20 09:23 23.1 25.5 2026-04-27 09:20:00
4: 246.31 09:27 09:30 22.3 25.5 2026-04-27 09:27:00
5: 246.29 09:34 09:37 20.7 25.3 2026-04-27 09:34:00
6: 246.26 09:41 09:44 20.9 25.5 2026-04-27 09:41:00
7: 246.14 09:48 09:51 20.5 25.4 2026-04-27 09:48:00
8: 246.21 09:55 09:58 20.9 25.2 2026-04-27 09:55:00
9: 246.14 10:02 10:05 20.1 25.2 2026-04-27 10:02:00
10: 246.35 10:09 10:12 21.9 25.1 2026-04-27 10:09:00
11: 246.26 10:16 10:19 20.0 25.1 2026-04-27 10:16:00
12: 246.30 10:23 10:26 20.7 25.6 2026-04-27 10:23:00
13: 246.38 10:30 10:33 21.2 25.5 2026-04-27 10:30:00
14: 246.37 10:37 10:40 20.9 25.4 2026-04-27 10:37:00
15: 246.15 10:44 10:47 19.5 24.9 2026-04-27 10:44:00
16: 246.50 10:51 10:54 19.2 24.9 2026-04-27 10:51:00
17: 246.36 10:58 11:01 19.7 24.9 2026-04-27 10:58:00
18: 246.30 11:05 11:08 20.0 25.3 2026-04-27 11:05:00
19: 246.25 11:12 11:15 20.1 25.1 2026-04-27 11:12:00
20: 246.34 11:19 11:22 20.1 25.1 2026-04-27 11:19:00
21: 246.23 11:26 11:29 20.0 25.0 2026-04-27 11:26:00
22: 246.18 11:33 11:36 20.4 25.3 2026-04-27 11:33:00
23: 246.21 11:40 11:43 19.9 25.5 2026-04-27 11:40:00
24: 246.31 11:47 11:50 19.9 25.1 2026-04-27 11:47:00
25: 246.35 11:54 11:57 20.0 25.0 2026-04-27 11:54:00
26: 246.25 12:01 12:04 19.8 24.9 2026-04-27 12:01:00
27: 246.25 12:08 12:11 20.1 24.9 2026-04-27 12:08:00
28: 246.36 12:15 12:18 20.4 24.9 2026-04-27 12:15:00
29: 246.23 12:22 12:25 20.0 25.1 2026-04-27 12:22:00
30: 246.35 12:29 12:32 20.0 25.4 2026-04-27 12:29:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 6 27/04/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 6 27/04/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 6 27/04/2026
4: 4 Água ozonizada AO3 1 1 6 27/04/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 6 27/04/2026
6: 6 Controle - Apenas água CON 2 2 6 27/04/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 6 27/04/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 6 27/04/2026
9: 9 Água ozonizada AO3 2 2 6 27/04/2026
10: 10 Adubo nitrogenado NMIN 2 2 6 27/04/2026
11: 11 Controle - Apenas água CON 3 3 6 27/04/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 6 27/04/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 6 27/04/2026
14: 14 Água ozonizada AO3 3 3 6 27/04/2026
15: 15 Adubo nitrogenado NMIN 3 3 6 27/04/2026
16: 16 Controle - Apenas água CON 4 4 6 27/04/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 6 27/04/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 6 27/04/2026
19: 19 Água ozonizada AO3 4 4 6 27/04/2026
20: 20 Adubo nitrogenado NMIN 4 4 6 27/04/2026
21: 21 Controle - Apenas água CON 5 5 6 27/04/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 6 27/04/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 6 27/04/2026
24: 24 Água ozonizada AO3 5 5 6 27/04/2026
25: 25 Adubo nitrogenado NMIN 5 5 6 27/04/2026
26: 26 Controle - Apenas água CON 6 6 6 27/04/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 6 27/04/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 6 27/04/2026
29: 29 Água ozonizada AO3 6 6 6 27/04/2026
30: 30 Adubo nitrogenado NMIN 6 6 6 27/04/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:06 09:09 23.1 25.3 2026-04-27 09:06:00
2: 246.39 09:13 09:16 22.4 25.3 2026-04-27 09:13:00
3: 246.21 09:20 09:23 23.1 25.5 2026-04-27 09:20:00
4: 246.31 09:27 09:30 22.3 25.5 2026-04-27 09:27:00
5: 246.29 09:34 09:37 20.7 25.3 2026-04-27 09:34:00
6: 246.26 09:41 09:44 20.9 25.5 2026-04-27 09:41:00
7: 246.14 09:48 09:51 20.5 25.4 2026-04-27 09:48:00
8: 246.21 09:55 09:58 20.9 25.2 2026-04-27 09:55:00
9: 246.14 10:02 10:05 20.1 25.2 2026-04-27 10:02:00
10: 246.35 10:09 10:12 21.9 25.1 2026-04-27 10:09:00
11: 246.26 10:16 10:19 20.0 25.1 2026-04-27 10:16:00
12: 246.30 10:23 10:26 20.7 25.6 2026-04-27 10:23:00
13: 246.38 10:30 10:33 21.2 25.5 2026-04-27 10:30:00
14: 246.37 10:37 10:40 20.9 25.4 2026-04-27 10:37:00
15: 246.15 10:44 10:47 19.5 24.9 2026-04-27 10:44:00
16: 246.50 10:51 10:54 19.2 24.9 2026-04-27 10:51:00
17: 246.36 10:58 11:01 19.7 24.9 2026-04-27 10:58:00
18: 246.30 11:05 11:08 20.0 25.3 2026-04-27 11:05:00
19: 246.25 11:12 11:15 20.1 25.1 2026-04-27 11:12:00
20: 246.34 11:19 11:22 20.1 25.1 2026-04-27 11:19:00
21: 246.23 11:26 11:29 20.0 25.0 2026-04-27 11:26:00
22: 246.18 11:33 11:36 20.4 25.3 2026-04-27 11:33:00
23: 246.21 11:40 11:43 19.9 25.5 2026-04-27 11:40:00
24: 246.31 11:47 11:50 19.9 25.1 2026-04-27 11:47:00
25: 246.35 11:54 11:57 20.0 25.0 2026-04-27 11:54:00
26: 246.25 12:01 12:04 19.8 24.9 2026-04-27 12:01:00
27: 246.25 12:08 12:11 20.1 24.9 2026-04-27 12:08:00
28: 246.36 12:15 12:18 20.4 24.9 2026-04-27 12:15:00
29: 246.23 12:22 12:25 20.0 25.1 2026-04-27 12:22:00
30: 246.35 12:29 12:32 20.0 25.4 2026-04-27 12:29:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-04-27 09:09:00
2: 2026-04-27 09:16:00
3: 2026-04-27 09:23:00
4: 2026-04-27 09:30:00
5: 2026-04-27 09:37:00
6: 2026-04-27 09:44:00
7: 2026-04-27 09:51:00
8: 2026-04-27 09:58:00
9: 2026-04-27 10:05:00
10: 2026-04-27 10:12:00
11: 2026-04-27 10:19:00
12: 2026-04-27 10:26:00
13: 2026-04-27 10:33:00
14: 2026-04-27 10:40:00
15: 2026-04-27 10:47:00
16: 2026-04-27 10:54:00
17: 2026-04-27 11:01:00
18: 2026-04-27 11:08:00
19: 2026-04-27 11:15:00
20: 2026-04-27 11:22:00
21: 2026-04-27 11:29:00
22: 2026-04-27 11:36:00
23: 2026-04-27 11:43:00
24: 2026-04-27 11:50:00
25: 2026-04-27 11:57:00
26: 2026-04-27 12:04:00
27: 2026-04-27 12:11:00
28: 2026-04-27 12:18:00
29: 2026-04-27 12:25:00
30: 2026-04-27 12:32:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura6 = copy(dados6)
leitura6[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-27 09:00:00.727 117.4167 1.00000 0.3496643 563.8459 2.881716 2.092712 912.0522
2: 2026-04-27 09:00:01.492 117.4167 1.00000 0.3497405 564.1107 2.881741 2.092165 910.4254
3: 2026-04-27 09:00:02.153 117.4167 1.00000 0.3467633 564.3399 2.881763 2.091692 909.0180
4: 2026-04-27 09:00:02.938 117.4167 1.00000 0.3432238 564.6146 2.881798 2.091357 907.3144
5: 2026-04-27 09:00:04.029 117.4167 1.00000 0.3383082 564.6062 2.881847 2.090904 904.9498
---
18038: 2026-04-27 12:59:57.095 117.5833 1.88862 0.3333136 444.0541 2.100215 1.763829 197.4754
18039: 2026-04-27 12:59:57.437 117.5833 2.00000 0.3299605 444.0880 2.100372 1.763344 197.4533
18040: 2026-04-27 12:59:58.573 117.5833 2.00000 0.3188556 444.2002 2.099961 1.761736 197.3798
18041: 2026-04-27 12:59:59.361 117.5833 2.00000 0.3188512 444.2780 2.099676 1.760621 197.3289
18042: 2026-04-27 12:59:59.993 117.5833 2.00000 0.3221046 444.3404 2.099447 1.759727 197.2881
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-27 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-27 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-27 09:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-27 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-27 09:00:04 NA <NA> NA NA NA NA NA
---
18038: 2026-04-27 12:59:57 NA <NA> NA NA NA NA NA
18039: 2026-04-27 12:59:57 NA <NA> NA NA NA NA NA
18040: 2026-04-27 12:59:58 NA <NA> NA NA NA NA NA
18041: 2026-04-27 12:59:59 NA <NA> NA NA NA NA NA
18042: 2026-04-27 12:59:59 NA <NA> NA NA NA NA NA
leitura6[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-04-27 09:00:00.727 117.4167 1.00000 0.3496643 563.8459 2.881716 2.092712 912.0522
2: 2026-04-27 09:00:01.492 117.4167 1.00000 0.3497405 564.1107 2.881741 2.092165 910.4254
3: 2026-04-27 09:00:02.153 117.4167 1.00000 0.3467633 564.3399 2.881763 2.091692 909.0180
4: 2026-04-27 09:00:02.938 117.4167 1.00000 0.3432238 564.6146 2.881798 2.091357 907.3144
5: 2026-04-27 09:00:04.029 117.4167 1.00000 0.3383082 564.6062 2.881847 2.090904 904.9498
---
18038: 2026-04-27 12:59:57.095 117.5833 1.88862 0.3333136 444.0541 2.100215 1.763829 197.4754
18039: 2026-04-27 12:59:57.437 117.5833 2.00000 0.3299605 444.0880 2.100372 1.763344 197.4533
18040: 2026-04-27 12:59:58.573 117.5833 2.00000 0.3188556 444.2002 2.099961 1.761736 197.3798
18041: 2026-04-27 12:59:59.361 117.5833 2.00000 0.3188512 444.2780 2.099676 1.760621 197.3289
18042: 2026-04-27 12:59:59.993 117.5833 2.00000 0.3221046 444.3404 2.099447 1.759727 197.2881
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-04-27 09:00:00 NA <NA> NA NA NA NA NA
2: 2026-04-27 09:00:01 NA <NA> NA NA NA NA NA
3: 2026-04-27 09:00:02 NA <NA> NA NA NA NA NA
4: 2026-04-27 09:00:02 NA <NA> NA NA NA NA NA
5: 2026-04-27 09:00:04 NA <NA> NA NA NA NA NA
---
18038: 2026-04-27 12:59:57 NA <NA> NA NA NA NA NA
18039: 2026-04-27 12:59:57 NA <NA> NA NA NA NA NA
18040: 2026-04-27 12:59:58 NA <NA> NA NA NA NA NA
18041: 2026-04-27 12:59:59 NA <NA> NA NA NA NA NA
18042: 2026-04-27 12:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura6 = leitura6[MPVPosition == 1 & !is.na(Bottle)]
View(leitura6)
Leitura 7 - 05/05/2026
########################### PREPARAR DADOS ###########################
dados7 = as.data.table(filtrados_leitura7)
id = as.data.table(ID.leitura7)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 7 05/05/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 7 05/05/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 7 05/05/2026
4: 4 Água ozonizada AO3 1 1 7 05/05/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 7 05/05/2026
6: 6 Controle - Apenas água CON 2 2 7 05/05/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 7 05/05/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 7 05/05/2026
9: 9 Água ozonizada AO3 2 2 7 05/05/2026
10: 10 Adubo nitrogenado NMIN 2 2 7 05/05/2026
11: 11 Controle - Apenas água CON 3 3 7 05/05/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 7 05/05/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 7 05/05/2026
14: 14 Água ozonizada AO3 3 3 7 05/05/2026
15: 15 Adubo nitrogenado NMIN 3 3 7 05/05/2026
16: 16 Controle - Apenas água CON 4 4 7 05/05/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 7 05/05/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 7 05/05/2026
19: 19 Água ozonizada AO3 4 4 7 05/05/2026
20: 20 Adubo nitrogenado NMIN 4 4 7 05/05/2026
21: 21 Controle - Apenas água CON 5 5 7 05/05/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 7 05/05/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 7 05/05/2026
24: 24 Água ozonizada AO3 5 5 7 05/05/2026
25: 25 Adubo nitrogenado NMIN 5 5 7 05/05/2026
26: 26 Controle - Apenas água CON 6 6 7 05/05/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 7 05/05/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 7 05/05/2026
29: 29 Água ozonizada AO3 6 6 7 05/05/2026
30: 30 Adubo nitrogenado NMIN 6 6 7 05/05/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 10:12 10:15 23.6 25.1 2026-05-05 10:12:00
2: 246.39 10:19 10:22 22.4 25.1 2026-05-05 10:19:00
3: 246.21 10:25 10:28 22.4 25.2 2026-05-05 10:25:00
4: 246.31 10:33 10:36 22.6 25.3 2026-05-05 10:33:00
5: 246.29 10:40 10:43 20.9 25.3 2026-05-05 10:40:00
6: 246.26 10:47 10:50 22.1 25.5 2026-05-05 10:47:00
7: 246.14 10:54 10:57 22.3 25.4 2026-05-05 10:54:00
8: 246.21 11:01 11:04 20.7 25.3 2026-05-05 11:01:00
9: 246.14 11:08 11:11 21.8 25.5 2026-05-05 11:08:00
10: 246.35 11:15 11:18 21.6 25.3 2026-05-05 11:15:00
11: 246.26 11:22 11:25 21.9 25.6 2026-05-05 11:22:00
12: 246.30 11:43 11:46 23.1 25.0 2026-05-05 11:43:00
13: 246.38 11:36 11:39 22.9 25.5 2026-05-05 11:36:00
14: 246.37 11:50 11:53 21.1 25.3 2026-05-05 11:50:00
15: 246.15 11:57 12:00 21.2 25.3 2026-05-05 11:57:00
16: 246.50 12:04 12:07 22.2 25.3 2026-05-05 12:04:00
17: 246.36 12:11 12:14 21.9 25.2 2026-05-05 12:11:00
18: 246.30 12:18 12:21 22.5 25.1 2026-05-05 12:18:00
19: 246.25 12:25 12:28 21.1 25.3 2026-05-05 12:25:00
20: 246.34 12:32 12:35 20.6 25.2 2026-05-05 12:32:00
21: 246.23 12:39 12:42 21.0 25.1 2026-05-05 12:39:00
22: 246.18 12:46 12:49 20.7 25.3 2026-05-05 12:46:00
23: 246.21 12:53 12:56 20.7 25.4 2026-05-05 12:53:00
24: 246.31 13:00 13:03 20.8 25.1 2026-05-05 13:00:00
25: 246.35 13:07 13:10 21.0 25.3 2026-05-05 13:07:00
26: 246.25 13:14 13:17 20.3 24.9 2026-05-05 13:14:00
27: 246.25 13:21 13:24 20.5 24.8 2026-05-05 13:21:00
28: 246.36 13:27 13:30 19.5 25.0 2026-05-05 13:27:00
29: 246.23 13:34 13:37 19.9 25.1 2026-05-05 13:34:00
30: 246.35 13:41 13:44 20.0 24.8 2026-05-05 13:41:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 7 05/05/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 7 05/05/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 7 05/05/2026
4: 4 Água ozonizada AO3 1 1 7 05/05/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 7 05/05/2026
6: 6 Controle - Apenas água CON 2 2 7 05/05/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 7 05/05/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 7 05/05/2026
9: 9 Água ozonizada AO3 2 2 7 05/05/2026
10: 10 Adubo nitrogenado NMIN 2 2 7 05/05/2026
11: 11 Controle - Apenas água CON 3 3 7 05/05/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 7 05/05/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 7 05/05/2026
14: 14 Água ozonizada AO3 3 3 7 05/05/2026
15: 15 Adubo nitrogenado NMIN 3 3 7 05/05/2026
16: 16 Controle - Apenas água CON 4 4 7 05/05/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 7 05/05/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 7 05/05/2026
19: 19 Água ozonizada AO3 4 4 7 05/05/2026
20: 20 Adubo nitrogenado NMIN 4 4 7 05/05/2026
21: 21 Controle - Apenas água CON 5 5 7 05/05/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 7 05/05/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 7 05/05/2026
24: 24 Água ozonizada AO3 5 5 7 05/05/2026
25: 25 Adubo nitrogenado NMIN 5 5 7 05/05/2026
26: 26 Controle - Apenas água CON 6 6 7 05/05/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 7 05/05/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 7 05/05/2026
29: 29 Água ozonizada AO3 6 6 7 05/05/2026
30: 30 Adubo nitrogenado NMIN 6 6 7 05/05/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 10:12 10:15 23.6 25.1 2026-05-05 10:12:00
2: 246.39 10:19 10:22 22.4 25.1 2026-05-05 10:19:00
3: 246.21 10:25 10:28 22.4 25.2 2026-05-05 10:25:00
4: 246.31 10:33 10:36 22.6 25.3 2026-05-05 10:33:00
5: 246.29 10:40 10:43 20.9 25.3 2026-05-05 10:40:00
6: 246.26 10:47 10:50 22.1 25.5 2026-05-05 10:47:00
7: 246.14 10:54 10:57 22.3 25.4 2026-05-05 10:54:00
8: 246.21 11:01 11:04 20.7 25.3 2026-05-05 11:01:00
9: 246.14 11:08 11:11 21.8 25.5 2026-05-05 11:08:00
10: 246.35 11:15 11:18 21.6 25.3 2026-05-05 11:15:00
11: 246.26 11:22 11:25 21.9 25.6 2026-05-05 11:22:00
12: 246.30 11:43 11:46 23.1 25.0 2026-05-05 11:43:00
13: 246.38 11:36 11:39 22.9 25.5 2026-05-05 11:36:00
14: 246.37 11:50 11:53 21.1 25.3 2026-05-05 11:50:00
15: 246.15 11:57 12:00 21.2 25.3 2026-05-05 11:57:00
16: 246.50 12:04 12:07 22.2 25.3 2026-05-05 12:04:00
17: 246.36 12:11 12:14 21.9 25.2 2026-05-05 12:11:00
18: 246.30 12:18 12:21 22.5 25.1 2026-05-05 12:18:00
19: 246.25 12:25 12:28 21.1 25.3 2026-05-05 12:25:00
20: 246.34 12:32 12:35 20.6 25.2 2026-05-05 12:32:00
21: 246.23 12:39 12:42 21.0 25.1 2026-05-05 12:39:00
22: 246.18 12:46 12:49 20.7 25.3 2026-05-05 12:46:00
23: 246.21 12:53 12:56 20.7 25.4 2026-05-05 12:53:00
24: 246.31 13:00 13:03 20.8 25.1 2026-05-05 13:00:00
25: 246.35 13:07 13:10 21.0 25.3 2026-05-05 13:07:00
26: 246.25 13:14 13:17 20.3 24.9 2026-05-05 13:14:00
27: 246.25 13:21 13:24 20.5 24.8 2026-05-05 13:21:00
28: 246.36 13:27 13:30 19.5 25.0 2026-05-05 13:27:00
29: 246.23 13:34 13:37 19.9 25.1 2026-05-05 13:34:00
30: 246.35 13:41 13:44 20.0 24.8 2026-05-05 13:41:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-05-05 10:15:00
2: 2026-05-05 10:22:00
3: 2026-05-05 10:28:00
4: 2026-05-05 10:36:00
5: 2026-05-05 10:43:00
6: 2026-05-05 10:50:00
7: 2026-05-05 10:57:00
8: 2026-05-05 11:04:00
9: 2026-05-05 11:11:00
10: 2026-05-05 11:18:00
11: 2026-05-05 11:25:00
12: 2026-05-05 11:46:00
13: 2026-05-05 11:39:00
14: 2026-05-05 11:53:00
15: 2026-05-05 12:00:00
16: 2026-05-05 12:07:00
17: 2026-05-05 12:14:00
18: 2026-05-05 12:21:00
19: 2026-05-05 12:28:00
20: 2026-05-05 12:35:00
21: 2026-05-05 12:42:00
22: 2026-05-05 12:49:00
23: 2026-05-05 12:56:00
24: 2026-05-05 13:03:00
25: 2026-05-05 13:10:00
26: 2026-05-05 13:17:00
27: 2026-05-05 13:24:00
28: 2026-05-05 13:30:00
29: 2026-05-05 13:37:00
30: 2026-05-05 13:44:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura7 = copy(dados7)
leitura7[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-05-05 10:00:00.236 125.4583 1 0.3331141 500.3166 2.552657 2.091699 162.98052
2: 2026-05-05 10:00:00.579 125.4583 1 0.3327318 499.9666 2.552479 2.091127 162.95755
3: 2026-05-05 10:00:01.704 125.4584 1 0.3314818 498.8224 2.552563 2.089258 162.88243
4: 2026-05-05 10:00:02.496 125.4584 1 0.3314693 498.0179 2.552623 2.087945 162.82962
5: 2026-05-05 10:00:03.148 125.4584 1 0.3316185 497.3538 2.552672 2.086860 162.78602
---
17672: 2026-05-05 13:59:56.174 125.6250 2 0.3236655 438.3252 2.012625 1.533754 79.76837
17673: 2026-05-05 13:59:57.309 125.6250 2 0.3219233 438.3822 2.013018 1.533108 79.82989
17674: 2026-05-05 13:59:58.084 125.6250 2 0.3219186 438.4211 2.013286 1.532668 79.87185
17675: 2026-05-05 13:59:58.742 125.6250 2 0.3228059 438.4542 2.013514 1.532293 79.90753
17676: 2026-05-05 13:59:59.496 125.6250 2 0.3238297 438.4951 2.013785 1.532259 79.84567
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-05-05 10:00:00 NA <NA> NA NA NA NA NA
2: 2026-05-05 10:00:00 NA <NA> NA NA NA NA NA
3: 2026-05-05 10:00:01 NA <NA> NA NA NA NA NA
4: 2026-05-05 10:00:02 NA <NA> NA NA NA NA NA
5: 2026-05-05 10:00:03 NA <NA> NA NA NA NA NA
---
17672: 2026-05-05 13:59:56 NA <NA> NA NA NA NA NA
17673: 2026-05-05 13:59:57 NA <NA> NA NA NA NA NA
17674: 2026-05-05 13:59:58 NA <NA> NA NA NA NA NA
17675: 2026-05-05 13:59:58 NA <NA> NA NA NA NA NA
17676: 2026-05-05 13:59:59 NA <NA> NA NA NA NA NA
leitura7[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-05-05 10:00:00.236 125.4583 1 0.3331141 500.3166 2.552657 2.091699 162.98052
2: 2026-05-05 10:00:00.579 125.4583 1 0.3327318 499.9666 2.552479 2.091127 162.95755
3: 2026-05-05 10:00:01.704 125.4584 1 0.3314818 498.8224 2.552563 2.089258 162.88243
4: 2026-05-05 10:00:02.496 125.4584 1 0.3314693 498.0179 2.552623 2.087945 162.82962
5: 2026-05-05 10:00:03.148 125.4584 1 0.3316185 497.3538 2.552672 2.086860 162.78602
---
17672: 2026-05-05 13:59:56.174 125.6250 2 0.3236655 438.3252 2.012625 1.533754 79.76837
17673: 2026-05-05 13:59:57.309 125.6250 2 0.3219233 438.3822 2.013018 1.533108 79.82989
17674: 2026-05-05 13:59:58.084 125.6250 2 0.3219186 438.4211 2.013286 1.532668 79.87185
17675: 2026-05-05 13:59:58.742 125.6250 2 0.3228059 438.4542 2.013514 1.532293 79.90753
17676: 2026-05-05 13:59:59.496 125.6250 2 0.3238297 438.4951 2.013785 1.532259 79.84567
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-05-05 10:00:00 NA <NA> NA NA NA NA NA
2: 2026-05-05 10:00:00 NA <NA> NA NA NA NA NA
3: 2026-05-05 10:00:01 NA <NA> NA NA NA NA NA
4: 2026-05-05 10:00:02 NA <NA> NA NA NA NA NA
5: 2026-05-05 10:00:03 NA <NA> NA NA NA NA NA
---
17672: 2026-05-05 13:59:56 NA <NA> NA NA NA NA NA
17673: 2026-05-05 13:59:57 NA <NA> NA NA NA NA NA
17674: 2026-05-05 13:59:58 NA <NA> NA NA NA NA NA
17675: 2026-05-05 13:59:58 NA <NA> NA NA NA NA NA
17676: 2026-05-05 13:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura7 = leitura7[MPVPosition == 1 & !is.na(Bottle)]
View(leitura7)
Leitura 8 - 18/05/2026
########################### PREPARAR DADOS ###########################
dados8 = as.data.table(filtrados_leitura8)
id = as.data.table(ID.leitura8)
# Criar início e fim das leituras
id[, start := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), Beginning.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 8 18/05/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 8 18/05/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 8 18/05/2026
4: 4 Água ozonizada AO3 1 1 8 18/05/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 8 18/05/2026
6: 6 Controle - Apenas água CON 2 2 8 18/05/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 8 18/05/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 8 18/05/2026
9: 9 Água ozonizada AO3 2 2 8 18/05/2026
10: 10 Adubo nitrogenado NMIN 2 2 8 18/05/2026
11: 11 Controle - Apenas água CON 3 3 8 18/05/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 8 18/05/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 8 18/05/2026
14: 14 Água ozonizada AO3 3 3 8 18/05/2026
15: 15 Adubo nitrogenado NMIN 3 3 8 18/05/2026
16: 16 Controle - Apenas água CON 4 4 8 18/05/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 8 18/05/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 8 18/05/2026
19: 19 Água ozonizada AO3 4 4 8 18/05/2026
20: 20 Adubo nitrogenado NMIN 4 4 8 18/05/2026
21: 21 Controle - Apenas água CON 5 5 8 18/05/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 8 18/05/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 8 18/05/2026
24: 24 Água ozonizada AO3 5 5 8 18/05/2026
25: 25 Adubo nitrogenado NMIN 5 5 8 18/05/2026
26: 26 Controle - Apenas água CON 6 6 8 18/05/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 8 18/05/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 8 18/05/2026
29: 29 Água ozonizada AO3 6 6 8 18/05/2026
30: 30 Adubo nitrogenado NMIN 6 6 8 18/05/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:00 09:03 23.5 24.9 2026-05-18 09:00:00
2: 246.39 09:07 09:10 22.3 24.8 2026-05-18 09:07:00
3: 246.21 09:14 09:17 21.6 25.1 2026-05-18 09:14:00
4: 246.31 09:21 09:24 22.5 25.0 2026-05-18 09:21:00
5: 246.29 09:28 09:31 23.6 25.1 2026-05-18 09:28:00
6: 246.26 09:35 09:38 22.4 25.3 2026-05-18 09:35:00
7: 246.14 09:42 09:45 22.8 25.3 2026-05-18 09:42:00
8: 246.21 09:49 09:52 22.1 25.1 2026-05-18 09:49:00
9: 246.14 09:56 09:59 22.5 25.1 2026-05-18 09:56:00
10: 246.35 10:03 10:06 21.7 25.1 2026-05-18 10:03:00
11: 246.26 10:10 10:13 22.3 25.3 2026-05-18 10:10:00
12: 246.30 10:17 10:20 22.4 25.5 2026-05-18 10:17:00
13: 246.38 10:24 10:27 21.8 25.5 2026-05-18 10:24:00
14: 246.37 10:31 10:34 21.6 25.3 2026-05-18 10:31:00
15: 246.15 10:38 10:41 21.1 25.5 2026-05-18 10:38:00
16: 246.50 10:45 10:48 21.1 25.1 2026-05-18 10:45:00
17: 246.36 10:52 10:55 21.8 25.0 2026-05-18 10:52:00
18: 246.30 10:59 11:02 21.8 25.1 2026-05-18 10:59:00
19: 246.25 11:06 11:09 21.4 25.2 2026-05-18 11:06:00
20: 246.34 11:13 11:16 21.5 25.4 2026-05-18 11:13:00
21: 246.23 11:20 11:23 21.6 25.5 2026-05-18 11:20:00
22: 246.18 11:27 11:30 21.3 25.2 2026-05-18 11:27:00
23: 246.21 11:34 11:37 21.9 25.1 2026-05-18 11:34:00
24: 246.31 11:41 11:44 21.5 25.4 2026-05-18 11:41:00
25: 246.35 11:48 11:51 22.1 25.1 2026-05-18 11:48:00
26: 246.25 11:55 11:58 22.1 25.0 2026-05-18 11:55:00
27: 246.25 12:02 12:05 21.0 24.9 2026-05-18 12:02:00
28: 246.36 12:09 12:12 21.5 25.0 2026-05-18 12:09:00
29: 246.23 12:16 12:19 21.6 25.5 2026-05-18 12:16:00
30: 246.35 12:23 12:26 21.1 25.0 2026-05-18 12:23:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
id[, end := as.POSIXct(paste(as.Date(Date, format = "%d/%m/%Y"), End.reading),
format = "%Y-%m-%d %H:%M",tz = "America/Sao_Paulo")]
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
<int> <char> <char> <int> <num> <int> <char>
1: 1 Controle - Apenas água CON 1 1 8 18/05/2026
2: 2 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 1 1 8 18/05/2026
3: 3 Fezes ovinas tratadas com oleo de girassol FOG 1 1 8 18/05/2026
4: 4 Água ozonizada AO3 1 1 8 18/05/2026
5: 5 Adubo nitrogenado (ureia) NMIN 1 1 8 18/05/2026
6: 6 Controle - Apenas água CON 2 2 8 18/05/2026
7: 7 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 2 2 8 18/05/2026
8: 8 Fezes ovinas tratadas com oleo de girassol FOG 2 2 8 18/05/2026
9: 9 Água ozonizada AO3 2 2 8 18/05/2026
10: 10 Adubo nitrogenado NMIN 2 2 8 18/05/2026
11: 11 Controle - Apenas água CON 3 3 8 18/05/2026
12: 12 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 3 3 8 18/05/2026
13: 13 Fezes ovinas tratadas com oleo de girassol FOG 3 3 8 18/05/2026
14: 14 Água ozonizada AO3 3 3 8 18/05/2026
15: 15 Adubo nitrogenado NMIN 3 3 8 18/05/2026
16: 16 Controle - Apenas água CON 4 4 8 18/05/2026
17: 17 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 4 4 8 18/05/2026
18: 18 Fezes ovinas tratadas com oleo de girassol FOG 4 4 8 18/05/2026
19: 19 Água ozonizada AO3 4 4 8 18/05/2026
20: 20 Adubo nitrogenado NMIN 4 4 8 18/05/2026
21: 21 Controle - Apenas água CON 5 5 8 18/05/2026
22: 22 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 5 5 8 18/05/2026
23: 23 Fezes ovinas tratadas com oleo de girassol FOG 5 5 8 18/05/2026
24: 24 Água ozonizada AO3 5 5 8 18/05/2026
25: 25 Adubo nitrogenado NMIN 5 5 8 18/05/2026
26: 26 Controle - Apenas água CON 6 6 8 18/05/2026
27: 27 Fezes ovinas tratadas com oleo de girassol ozonizado FOGO3 6 6 8 18/05/2026
28: 28 Fezes ovinas tratadas com oleo de girassol FOG 6 6 8 18/05/2026
29: 29 Água ozonizada AO3 6 6 8 18/05/2026
30: 30 Adubo nitrogenado NMIN 6 6 8 18/05/2026
Bottle Tratamento Abreviacao Bloco Rep Leitura Date
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
<num> <char> <char> <num> <num> <POSc>
1: 246.61 09:00 09:03 23.5 24.9 2026-05-18 09:00:00
2: 246.39 09:07 09:10 22.3 24.8 2026-05-18 09:07:00
3: 246.21 09:14 09:17 21.6 25.1 2026-05-18 09:14:00
4: 246.31 09:21 09:24 22.5 25.0 2026-05-18 09:21:00
5: 246.29 09:28 09:31 23.6 25.1 2026-05-18 09:28:00
6: 246.26 09:35 09:38 22.4 25.3 2026-05-18 09:35:00
7: 246.14 09:42 09:45 22.8 25.3 2026-05-18 09:42:00
8: 246.21 09:49 09:52 22.1 25.1 2026-05-18 09:49:00
9: 246.14 09:56 09:59 22.5 25.1 2026-05-18 09:56:00
10: 246.35 10:03 10:06 21.7 25.1 2026-05-18 10:03:00
11: 246.26 10:10 10:13 22.3 25.3 2026-05-18 10:10:00
12: 246.30 10:17 10:20 22.4 25.5 2026-05-18 10:17:00
13: 246.38 10:24 10:27 21.8 25.5 2026-05-18 10:24:00
14: 246.37 10:31 10:34 21.6 25.3 2026-05-18 10:31:00
15: 246.15 10:38 10:41 21.1 25.5 2026-05-18 10:38:00
16: 246.50 10:45 10:48 21.1 25.1 2026-05-18 10:45:00
17: 246.36 10:52 10:55 21.8 25.0 2026-05-18 10:52:00
18: 246.30 10:59 11:02 21.8 25.1 2026-05-18 10:59:00
19: 246.25 11:06 11:09 21.4 25.2 2026-05-18 11:06:00
20: 246.34 11:13 11:16 21.5 25.4 2026-05-18 11:13:00
21: 246.23 11:20 11:23 21.6 25.5 2026-05-18 11:20:00
22: 246.18 11:27 11:30 21.3 25.2 2026-05-18 11:27:00
23: 246.21 11:34 11:37 21.9 25.1 2026-05-18 11:34:00
24: 246.31 11:41 11:44 21.5 25.4 2026-05-18 11:41:00
25: 246.35 11:48 11:51 22.1 25.1 2026-05-18 11:48:00
26: 246.25 11:55 11:58 22.1 25.0 2026-05-18 11:55:00
27: 246.25 12:02 12:05 21.0 24.9 2026-05-18 12:02:00
28: 246.36 12:09 12:12 21.5 25.0 2026-05-18 12:09:00
29: 246.23 12:16 12:19 21.6 25.5 2026-05-18 12:16:00
30: 246.35 12:23 12:26 21.1 25.0 2026-05-18 12:23:00
Solo.Seco Beginning.reading End.reading External.temperature Internal.temperature start
end
<POSc>
1: 2026-05-18 09:03:00
2: 2026-05-18 09:10:00
3: 2026-05-18 09:17:00
4: 2026-05-18 09:24:00
5: 2026-05-18 09:31:00
6: 2026-05-18 09:38:00
7: 2026-05-18 09:45:00
8: 2026-05-18 09:52:00
9: 2026-05-18 09:59:00
10: 2026-05-18 10:06:00
11: 2026-05-18 10:13:00
12: 2026-05-18 10:20:00
13: 2026-05-18 10:27:00
14: 2026-05-18 10:34:00
15: 2026-05-18 10:41:00
16: 2026-05-18 10:48:00
17: 2026-05-18 10:55:00
18: 2026-05-18 11:02:00
19: 2026-05-18 11:09:00
20: 2026-05-18 11:16:00
21: 2026-05-18 11:23:00
22: 2026-05-18 11:30:00
23: 2026-05-18 11:37:00
24: 2026-05-18 11:44:00
25: 2026-05-18 11:51:00
26: 2026-05-18 11:58:00
27: 2026-05-18 12:05:00
28: 2026-05-18 12:12:00
29: 2026-05-18 12:19:00
30: 2026-05-18 12:26:00
end
########################### MPV 1 - LEITURA DOS FRASCOS ###########################
leitura8 = copy(dados8)
leitura8[, c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") := .(
NA_integer_, NA_character_, NA_integer_, NA_integer_,NA_integer_, NA_real_, NA_real_)]
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-05-18 08:00:00.234 138.3750 1 0.3363889 498.0335 2.522241 1.941849 154.5771
2: 2026-05-18 08:00:01.026 138.3750 1 0.3363787 498.0620 2.521272 1.940609 154.6118
3: 2026-05-18 08:00:01.676 138.3750 1 0.3360332 498.0854 2.520478 1.939592 154.6402
4: 2026-05-18 08:00:02.437 138.3750 1 0.3356440 498.1288 2.519605 1.940208 154.5930
5: 2026-05-18 08:00:03.490 138.3750 1 0.3351059 498.0852 2.518400 1.941061 154.5279
---
22691: 2026-05-18 12:59:56.377 138.5833 1 0.3371623 501.9600 2.175345 2.466752 154.2754
22692: 2026-05-18 12:59:57.453 138.5833 1 0.3383252 502.0502 2.175419 2.466417 154.3238
22693: 2026-05-18 12:59:58.226 138.5833 1 0.3383222 502.1149 2.175473 2.466176 154.3586
22694: 2026-05-18 12:59:58.573 138.5833 1 0.3369384 502.1441 2.175497 2.466067 154.3742
22695: 2026-05-18 12:59:59.707 138.5833 1 0.3324290 502.2390 2.175433 2.465713 154.4252
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-05-18 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-05-18 08:00:01 NA <NA> NA NA NA NA NA
3: 2026-05-18 08:00:01 NA <NA> NA NA NA NA NA
4: 2026-05-18 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-05-18 08:00:03 NA <NA> NA NA NA NA NA
---
22691: 2026-05-18 12:59:56 NA <NA> NA NA NA NA NA
22692: 2026-05-18 12:59:57 NA <NA> NA NA NA NA NA
22693: 2026-05-18 12:59:58 NA <NA> NA NA NA NA NA
22694: 2026-05-18 12:59:58 NA <NA> NA NA NA NA NA
22695: 2026-05-18 12:59:59 NA <NA> NA NA NA NA NA
leitura8[MPVPosition == 1,c(
"Bottle", "Abreviacao", "Bloco", "Rep","Leitura", "Solo.Seco", "Internal.temperature") :=
id[.SD,.(Bottle, Abreviacao, Bloco, Rep,Leitura, Solo.Seco, Internal.temperature),
on = .(start <= datetime, end > datetime),mult = "first"]]
Index: <MPVPosition>
DATE TIME JULIAN_DAYS MPVPosition N2O_dry CO2_dry CH4_dry H2O NH3
<char> <char> <num> <num> <num> <num> <num> <num> <num>
1: 2026-05-18 08:00:00.234 138.3750 1 0.3363889 498.0335 2.522241 1.941849 154.5771
2: 2026-05-18 08:00:01.026 138.3750 1 0.3363787 498.0620 2.521272 1.940609 154.6118
3: 2026-05-18 08:00:01.676 138.3750 1 0.3360332 498.0854 2.520478 1.939592 154.6402
4: 2026-05-18 08:00:02.437 138.3750 1 0.3356440 498.1288 2.519605 1.940208 154.5930
5: 2026-05-18 08:00:03.490 138.3750 1 0.3351059 498.0852 2.518400 1.941061 154.5279
---
22691: 2026-05-18 12:59:56.377 138.5833 1 0.3371623 501.9600 2.175345 2.466752 154.2754
22692: 2026-05-18 12:59:57.453 138.5833 1 0.3383252 502.0502 2.175419 2.466417 154.3238
22693: 2026-05-18 12:59:58.226 138.5833 1 0.3383222 502.1149 2.175473 2.466176 154.3586
22694: 2026-05-18 12:59:58.573 138.5833 1 0.3369384 502.1441 2.175497 2.466067 154.3742
22695: 2026-05-18 12:59:59.707 138.5833 1 0.3324290 502.2390 2.175433 2.465713 154.4252
datetime Bottle Abreviacao Bloco Rep Leitura Solo.Seco Internal.temperature
<POSc> <int> <char> <int> <int> <int> <num> <num>
1: 2026-05-18 08:00:00 NA <NA> NA NA NA NA NA
2: 2026-05-18 08:00:01 NA <NA> NA NA NA NA NA
3: 2026-05-18 08:00:01 NA <NA> NA NA NA NA NA
4: 2026-05-18 08:00:02 NA <NA> NA NA NA NA NA
5: 2026-05-18 08:00:03 NA <NA> NA NA NA NA NA
---
22691: 2026-05-18 12:59:56 NA <NA> NA NA NA NA NA
22692: 2026-05-18 12:59:57 NA <NA> NA NA NA NA NA
22693: 2026-05-18 12:59:58 NA <NA> NA NA NA NA NA
22694: 2026-05-18 12:59:58 NA <NA> NA NA NA NA NA
22695: 2026-05-18 12:59:59 NA <NA> NA NA NA NA NA
# Manter apenas as leituras válidas dos frascos
leitura8 = leitura8[MPVPosition == 1 & !is.na(Bottle)]
View(leitura8)
Backgorunds
########################### FUNÇÃO PARA EXTRAIR O BACKGROUND ###########################
criar_background = function(dados, leitura) {
# Identificar o início real da leitura de cada frasco
mapa = leitura[, .(
inicio_leitura = min(datetime),
Abreviacao = data.table::first(Abreviacao),
Bloco = data.table::first(Bloco),
Rep = data.table::first(Rep),
Leitura = data.table::first(Leitura),
Solo.Seco = data.table::first(Solo.Seco),
Internal.temperature = data.table::first(Internal.temperature)), by = Bottle]
# Definir os 4 minutos anteriores à leitura
mapa[, background_start := inicio_leitura - 240]
# Manter apenas dados do MPVPosition 2
bg_raw = dados[MPVPosition == 2]
# Extrair separadamente o background de cada frasco
background = data.table::rbindlist(
lapply(seq_len(nrow(mapa)), function(i) {
m = mapa[i]
bg = data.table::copy(
bg_raw[datetime >= m$background_start & datetime < m$inicio_leitura])
if (nrow(bg) == 0) return(NULL)
bg[, `:=`(
Bottle = m$Bottle,
Abreviacao = m$Abreviacao,
Bloco = m$Bloco,
Rep = m$Rep,
Leitura = m$Leitura,
Solo.Seco = m$Solo.Seco,
Internal.temperature = m$Internal.temperature,
inicio_leitura = m$inicio_leitura,
# Tempo desde o início dos 4 min de background
t_background = as.numeric(
difftime(datetime,m$background_start,units = "secs")))]
bg}),use.names = TRUE,fill = TRUE)
return(background)}
########################### CRIAR OS 8 BACKGROUNDS ###########################
background1 = criar_background(dados1, leitura1)
background2 = criar_background(dados2, leitura2)
background3 = criar_background(dados3, leitura3)
background4 = criar_background(dados4, leitura4)
background5 = criar_background(dados5, leitura5)
background6 = criar_background(dados6, leitura6)
background7 = criar_background(dados7, leitura7)
background8 = criar_background(dados8, leitura8)
Juntar as 8 leituras e backgrounds
########################### Leituras ###########################
Leituras_completas = dplyr::bind_rows(
leitura1,leitura2,leitura3,leitura4,leitura5,leitura6,leitura7,leitura8)
View(Leituras_completas)
dim(Leituras_completas)
[1] 46905 17
table(Leituras_completas$Leitura)
1 2 3 4 5 6 7 8
5048 6296 5105 5845 5370 6545 6299 6397
str(Leituras_completas)
Classes ‘data.table’ and 'data.frame': 46905 obs. of 17 variables:
$ DATE : chr "2026-04-15" "2026-04-15" "2026-04-15" "2026-04-15" ...
$ TIME : chr "09:09:52.979" "09:09:53.765" "09:09:54.828" "09:09:55.624" ...
$ JULIAN_DAYS : num 105 105 105 105 105 ...
$ MPVPosition : num 1 1 1 1 1 1 1 1 1 1 ...
$ N2O_dry : num 0.339 0.351 0.368 0.368 0.399 ...
$ CO2_dry : num 783 783 817 843 854 ...
$ CH4_dry : num 2.85 2.86 2.87 2.88 2.89 ...
$ H2O : num 2.09 2.15 2.22 2.28 2.31 ...
$ NH3 : num 173 175 179 182 183 ...
$ datetime : POSIXct, format: "2026-04-15 09:09:52" "2026-04-15 09:09:53" "2026-04-15 09:09:54" "2026-04-15 09:09:55" ...
$ Bottle : int 1 1 1 1 1 1 1 1 1 1 ...
$ Abreviacao : chr "CON" "CON" "CON" "CON" ...
$ Bloco : int 1 1 1 1 1 1 1 1 1 1 ...
$ Rep : int 1 1 1 1 1 1 1 1 1 1 ...
$ Leitura : int 1 1 1 1 1 1 1 1 1 1 ...
$ Solo.Seco : num 247 247 247 247 247 ...
$ Internal.temperature: num 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 ...
- attr(*, ".internal.selfref")=<externalptr>
########################### backgrounds ###########################
background_completo = dplyr::bind_rows(
background1,background2,background3,background4,background5,background6,background7,background8)
View(background_completo)
dim(background_completo)
[1] 71118 19
table(background_completo$Leitura)
1 2 3 4 5 6 7 8
8707 8909 9001 9011 8829 8940 8739 8982
str(background_completo)
Classes ‘data.table’ and 'data.frame': 71118 obs. of 19 variables:
$ DATE : chr "2026-04-15" "2026-04-15" "2026-04-15" "2026-04-15" ...
$ TIME : chr "09:05:53.203" "09:05:53.529" "09:05:54.671" "09:05:55.453" ...
$ JULIAN_DAYS : num 105 105 105 105 105 ...
$ MPVPosition : num 2 2 2 2 2 2 2 2 2 2 ...
$ N2O_dry : num 0.332 0.333 0.338 0.338 0.335 ...
$ CO2_dry : num 771 771 770 770 769 ...
$ CH4_dry : num 2.85 2.85 2.85 2.85 2.85 ...
$ H2O : num 2.01 2.01 2.01 2.01 2.01 ...
$ NH3 : num 173 173 173 172 172 ...
$ datetime : POSIXct, format: "2026-04-15 09:05:53" "2026-04-15 09:05:53" "2026-04-15 09:05:54" "2026-04-15 09:05:55" ...
$ Bottle : int 1 1 1 1 1 1 1 1 1 1 ...
$ Abreviacao : chr "CON" "CON" "CON" "CON" ...
$ Bloco : int 1 1 1 1 1 1 1 1 1 1 ...
$ Rep : int 1 1 1 1 1 1 1 1 1 1 ...
$ Leitura : int 1 1 1 1 1 1 1 1 1 1 ...
$ Solo.Seco : num 247 247 247 247 247 ...
$ Internal.temperature: num 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 25.5 ...
$ inicio_leitura : POSIXct, format: "2026-04-15 09:09:52" "2026-04-15 09:09:52" "2026-04-15 09:09:52" "2026-04-15 09:09:52" ...
$ t_background : num 0.224 0.55 1.692 2.474 3.126 ...
- attr(*, ".internal.selfref")=<externalptr>
3 - Controle de qualidade e definição da janela de
leitura
Leituras
dados_proc = Leituras_completas %>%
dplyr::mutate(BottleID = paste(Leitura,Bottle,Abreviacao,Bloco,Rep,sep = "_")) %>%
dplyr::group_by(BottleID) %>%
dplyr::arrange(datetime, .by_group = TRUE) %>%
dplyr::mutate(t_sec = as.numeric(difftime(datetime, min(datetime), units = "secs"))) %>%
dplyr::ungroup()
head(dados_proc)
########################### PREPARAR DADOS ###########################
dados_diagnostico = dados_proc %>% dplyr::filter(t_sec <= 120) %>%
dplyr::select(BottleID, t_sec,CO2_dry, N2O_dry, CH4_dry, H2O, NH3) %>%
tidyr::pivot_longer(cols = c(CO2_dry, N2O_dry, CH4_dry, H2O, NH3),
names_to = "Gas",values_to = "Concentracao") %>%
dplyr::mutate(Gas = dplyr::recode(Gas,
"CH4_dry"="CH4 (ppm)","CO2_dry"="CO2 (ppm)","N2O_dry"="N2O (ppm)","H2O"="H2O (%)","NH3"= "NH3 (ppb)"))
########################### FIGURA S2 - PERFIL DAS LEITURAS ###########################
fig_S2 = ggplot(dados_diagnostico, aes(x = t_sec, y = Concentracao, group = BottleID)) +
geom_line(alpha = 0.35) +
geom_vline(xintercept = c(15, 45), linetype = "dashed") +
facet_wrap(~ Gas, scales = "free_y", ncol = 3) +
labs(x = "Reading time (s)",y = "Concentration") + theme_bw() +
scale_x_continuous(breaks = seq(0, 120, by = 15))+
theme(strip.text = element_text(hjust = 0.5, face = "bold"),panel.spacing = unit(1, "lines"))
fig_S2
ggsave("Figure S2.png",fig_S2, width = 10, height = 6, dpi = 300, bg = "white")

########################### AVALIAR JANELAS CANDIDATAS ###########################
gases_qc = c("CO2_dry", "N2O_dry", "CH4_dry")
janelas = data.frame(Janela = c("15-35", "15-45", "15-60","20-40", "20-50", "20-60"),
inicio = c(15, 15, 15, 20, 20, 20), fim = c(35, 45, 60, 40, 50, 60))
avaliacao_janelas = dplyr::bind_rows(lapply(seq_len(nrow(janelas)), function(i) {
ini = janelas$inicio[i]
fim = janelas$fim[i]
dplyr::bind_rows(lapply(gases_qc, function(g) {dados_proc %>%
dplyr::filter(t_sec >= ini, t_sec <= fim) %>%
dplyr::group_by(BottleID) %>%
dplyr::summarise(media = mean(.data[[g]], na.rm = TRUE),sd = sd(.data[[g]], na.rm = TRUE),
slope = cov(t_sec,.data[[g]],use = "complete.obs") / var(t_sec, na.rm = TRUE),.groups = "drop") %>%
dplyr::mutate(Gas = g,Janela = janelas$Janela[i],
# Coeficiente de variação dentro da janela
CV = (sd / abs(media)) * 100,
# Mudança estimada da concentração ao longo da janela
Drift = abs(slope) * (fim - ini) / abs(media) * 100)}))}))
########################### ESTABILIDADE DAS JANELAS ###########################
tab_S2 = avaliacao_janelas %>% dplyr::group_by(Gas, Janela) %>%
dplyr::summarise(CV_mediano = median(CV, na.rm = TRUE), CV_P90 = quantile(CV, 0.90, na.rm = TRUE),
Drift_mediano = median(Drift, na.rm = TRUE),
Drift_P90 = quantile(Drift, 0.90, na.rm = TRUE),.groups = "drop") %>%
dplyr::mutate(Janela = factor(Janela, levels = janelas$Janela)) %>%
dplyr::arrange(Gas, Janela)
print(tab_S2)
# A tibble: 18 × 6
Gas Janela CV_mediano CV_P90 Drift_mediano Drift_P90
<chr> <fct> <dbl> <dbl> <dbl> <dbl>
1 CH4_dry 15-35 0.0267 0.0439 0.0482 0.109
2 CH4_dry 15-45 0.0301 0.0496 0.0449 0.118
3 CH4_dry 15-60 0.0351 0.0544 0.0509 0.120
4 CH4_dry 20-40 0.0258 0.0437 0.0456 0.112
5 CH4_dry 20-50 0.0293 0.0521 0.0449 0.120
6 CH4_dry 20-60 0.0339 0.0538 0.0457 0.133
7 CO2_dry 15-35 0.131 0.328 0.440 1.09
8 CO2_dry 15-45 0.228 0.558 0.761 1.88
9 CO2_dry 15-60 0.391 0.928 1.30 3.19
10 CO2_dry 20-40 0.151 0.366 0.506 1.24
11 CO2_dry 20-50 0.256 0.612 0.863 2.08
12 CO2_dry 20-60 0.358 0.875 1.22 3.04
13 N2O_dry 15-35 1.27 1.84 1.07 3.24
14 N2O_dry 15-45 1.34 1.80 1.12 2.67
15 N2O_dry 15-60 1.37 1.83 1.20 2.81
16 N2O_dry 20-40 1.26 1.88 1.24 3.24
17 N2O_dry 20-50 1.31 1.85 1.10 2.82
18 N2O_dry 20-60 1.35 1.83 1.33 2.86
########################### FIGURA S3 - COMPARAÇÃO DAS JANELAS ###########################
dados_fig_S3 = tab_S2 %>%
dplyr::select(Gas, Janela, CV_P90, Drift_P90) %>%
tidyr::pivot_longer(cols = c(CV_P90, Drift_P90),names_to = "Metrica",values_to = "Valor") %>%
dplyr::mutate(
Gas = dplyr::recode(Gas,"CH4_dry"="CH4 (ppm)","CO2_dry"="CO2 (ppm)","N2O_dry"="N2O (ppm)"),
Metrica = dplyr::recode(Metrica,"CV_P90" = "CV P90 (%)","Drift_P90" = "Drift P90 (%)"))
fig_S3 = ggplot(dados_fig_S3,aes(x = Janela, y = Valor, group = Gas)) +
geom_line() + geom_point(size = 2) +
facet_grid(Metrica ~ Gas, scales = "free_y") +
labs(x = "Reading window (s)",y = "Value (%)") + theme_bw() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),strip.text = element_text(face = "bold", hjust = 0.5))
fig_S3
ggsave("Figure S3.png",fig_S3, width = 10, height = 6, dpi = 400, bg = "white")

########################### JANELA FINAL: 15-45 s ###########################
dados_estaveis = dados_proc %>% dplyr::filter(t_sec >= 15, t_sec <= 45)
########################### CONCENTRAÇÕES MÉDIAS ###########################
medias_leituras = dados_estaveis %>% dplyr::group_by(
Leitura, Bottle, Abreviacao, Bloco, Rep) %>%
dplyr::summarise(
Temperatura = mean(Internal.temperature, na.rm = TRUE),
Peso.solo = mean(Solo.Seco, na.rm = TRUE),
N2O = mean(N2O_dry, na.rm = TRUE),
CO2 = mean(CO2_dry, na.rm = TRUE),
CH4 = mean(CH4_dry, na.rm = TRUE),
# Mantido apenas como controle de qualidade
H2O_QC = mean(H2O, na.rm = TRUE),
n_obs = dplyr::n(),.groups = "drop")
View(medias_leituras)
Background
########################### PREPARAR DADOS ###########################
background_proc = background_completo %>% dplyr::mutate(
BottleID = paste(Leitura, Bottle, Abreviacao, Bloco, Rep,sep = "_"))
head(background_proc)
########################### PREPARAR DADOS PARA DIAGNÓSTICO ###########################
background_diagnostico = background_proc %>% dplyr::filter(
t_background >= 0,t_background <= 240) %>%
dplyr::select(BottleID,t_background,CO2_dry,N2O_dry,CH4_dry,H2O) %>%
tidyr::pivot_longer(cols = c(CO2_dry, N2O_dry, CH4_dry, H2O),names_to = "Gas",values_to = "Concentracao") %>%
dplyr::mutate(
Gas = dplyr::recode(Gas,"CH4_dry"="CH4 (ppm)","CO2_dry"="CO2 (ppm)","N2O_dry"="N2O (ppm)","H2O"="H2O (%)"))
########################### FIGURA S4 - PERFIL DO BACKGROUND ###########################
fig_S4 = ggplot(background_diagnostico,aes(x = t_background,y = Concentracao,group = BottleID)) +
geom_line(alpha = 0.30) +
geom_vline(xintercept = c(60, 90),linetype = "dashed") +
facet_wrap(~ Gas,scales = "free_y",ncol = 2) +
scale_x_continuous(breaks = seq(0, 240, by = 30)) +
labs(x = "Background measurement time (s)",y = "Concentration") +
theme_bw()+theme(strip.text = element_text(hjust = 0.5,face = "bold"),panel.spacing = grid::unit(1, "lines"))
fig_S4
ggsave("Figure S4.png",fig_S4,width = 9,height = 7,dpi = 300,bg = "white")

########################### AVALIAR JANELAS DO BACKGROUND ###########################
gases_bg = c("CO2_dry","N2O_dry","CH4_dry")
janelas_bg = data.frame(Janela = c("20-50","30-60","30-90","60-90","60-120","180-240"),
inicio = c(20,30,30,60,60,180),fim = c(50,60,90,90,120,240))
avaliacao_bg = dplyr::bind_rows(
lapply(seq_len(nrow(janelas_bg)), function(i) {
ini = janelas_bg$inicio[i]
fim = janelas_bg$fim[i]
dplyr::bind_rows(lapply(gases_bg, function(g) {
background_proc %>%
dplyr::filter(t_background >= ini,t_background <= fim) %>%
dplyr::group_by(BottleID) %>%
dplyr::summarise(media = mean(.data[[g]],na.rm = TRUE),
sd = sd(.data[[g]],na.rm = TRUE),
slope = cov(t_background,.data[[g]],
use = "complete.obs") /var(t_background,na.rm = TRUE),.groups = "drop") %>%
dplyr::mutate(Gas = g,
Janela = janelas_bg$Janela[i],
# Coeficiente de variação dentro da janela
CV = (sd / abs(media)) * 100,
# Mudança relativa estimada ao longo da janela
Drift = abs(slope) * (fim - ini) / abs(media) * 100)}))}))
########################### RESUMO DAS JANELAS ###########################
resumo_bg = avaliacao_bg %>%
dplyr::group_by(Gas,Janela) %>%
dplyr::summarise(CV_mediano = median(CV,na.rm = TRUE),
CV_P90 = quantile(CV,0.90,na.rm = TRUE),
Drift_mediano = median(Drift,na.rm = TRUE),
Drift_P90 = quantile(Drift,0.90,na.rm = TRUE),.groups = "drop") %>%
dplyr::mutate(Janela = factor(Janela,levels = janelas_bg$Janela)) %>%
dplyr::arrange(Gas,Janela)
print(resumo_bg)
# A tibble: 18 × 6
Gas Janela CV_mediano CV_P90 Drift_mediano Drift_P90
<chr> <fct> <dbl> <dbl> <dbl> <dbl>
1 CH4_dry 20-50 0.0686 0.193 0.149 0.492
2 CH4_dry 30-60 0.0594 0.211 0.144 0.582
3 CH4_dry 30-90 0.0954 0.340 0.194 1.06
4 CH4_dry 60-90 0.0560 0.193 0.120 0.598
5 CH4_dry 60-120 0.0836 0.310 0.167 0.834
6 CH4_dry 180-240 0.110 0.402 0.229 1.20
7 CO2_dry 20-50 0.628 2.79 1.02 5.76
8 CO2_dry 30-60 0.550 3.18 1.00 6.29
9 CO2_dry 30-90 0.883 3.88 1.14 6.81
10 CO2_dry 60-90 0.565 2.75 0.998 5.13
11 CO2_dry 60-120 0.768 3.30 0.982 5.06
12 CO2_dry 180-240 1.01 5.06 1.10 8.57
13 N2O_dry 20-50 1.61 2.24 1.77 4.43
14 N2O_dry 30-60 1.46 1.92 1.33 3.01
15 N2O_dry 30-90 1.52 1.88 1.12 2.84
16 N2O_dry 60-90 1.43 1.91 1.19 3.11
17 N2O_dry 60-120 1.48 1.83 0.915 2.45
18 N2O_dry 180-240 1.51 1.85 0.903 2.54
########################### FIGURA S5 - COMPARAÇÃO DAS JANELAS ###########################
dados_fig_S5 = resumo_bg %>% dplyr::select(
Gas,Janela,CV_P90,Drift_P90) %>%
tidyr::pivot_longer(cols = c(CV_P90,Drift_P90),
names_to = "Metrica",values_to = "Valor") %>%
dplyr::mutate(Gas = dplyr::recode(
Gas,"CH4_dry" = "CH4 (ppm)","CO2_dry" = "CO2 (ppm)","N2O_dry" = "N2O (ppm)"),
Metrica = dplyr::recode(Metrica,"CV_P90" = "CV P90 (%)","Drift_P90" = "Drift P90 (%)"))
fig_S5 = ggplot(dados_fig_S5,aes(x = Janela,y = Valor,group = Gas)) +
geom_line() +
geom_point(size = 2) +
facet_grid(Metrica ~ Gas,scales = "free_y") +
labs(x = "Background window (s)",y = "Value (%)") +
theme_bw() + theme(axis.text.x = element_text(angle = 45,hjust = 1),
strip.text = element_text(face = "bold",hjust = 0.5))
fig_S5
ggsave("Figure S5.png",fig_S5,width = 10,height = 6,dpi = 400,bg = "white")

########################### BACKGROUND FINAL: 60-90 s ###########################
background_estavel = background_proc %>%
dplyr::filter(t_background >= 60,t_background <= 90)
########################### CONCENTRAÇÕES MÉDIAS DO BACKGROUND ###########################
medias_background = background_estavel %>%
dplyr::group_by(Leitura,Bottle) %>%
dplyr::summarise(
CO2_bg = mean(CO2_dry,na.rm = TRUE),
N2O_bg = mean(N2O_dry,na.rm = TRUE),
CH4_bg = mean(CH4_dry,na.rm = TRUE),
# Mantido apenas como controle de qualidade
H2O_bg = mean(H2O,na.rm = TRUE),
n_obs_bg = dplyr::n(),.groups = "drop")
nrow(medias_background)
[1] 239
View(medias_background)
LS0tDQp0aXRsZTogIkxpbXBlemEgZSBjYWxjdWxvIGRvcyBkYWRvcyBkbyBtaWNyb2Nvc21vIG5vIHBpY2Fycm8gLSBJc2FiZWxsZSINCmF1dGhvcjogIlZhZ25lciBPdmFuaSINCmRhdGU6ICIxOC8wOC8yMDI2Ig0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIHRoZW1lOiB1bml0ZWQNCi0tLQ0KDQoqKioNCioqKg0KIyAqKjEgLSBEYWRvcyBicnV0b3MqKg0KKioqDQoqKioNCiMjIF8qKkxlaXR1cmEgMSAtIDE1LzA0LzIwMjYqKl8NCioqKg0KKioqDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQojIENhbWluaG8gZG9zIGFycXVpdm9zIC5kYXQNCmZpbGVfbGVpdHVyYSA9ICJDOi9Vc2Vycy9TYW1zdW5nL09uZURyaXZlL0RvY3VtZW50b3MvMiAtIE1hdGVyaWFsIGRlIHRyYWJhbGhvLzUgLSBBdGl2aWRhZGVzIERpZMOhdGljYXMvNS41IC0gT3JpZW50YcOnw6NvL01lc3RyYWRvL0lzYWJlbGxlL0RhdGEvTGVpdHVyYSAxIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpmaWxlX2xlaXR1cmENCiMgT2J0ZXIgYSBsaXN0YSBkZSBhcnF1aXZvcyAuZGF0DQpmaWxlX2xpc3RfbGVpdHVyYSA9IGxpc3QuZmlsZXMoZmlsZV9sZWl0dXJhLCBwYXR0ZXJuID0gIi5kYXQiLCBmdWxsLm5hbWVzID0gVFJVRSkNCiMgTGVyIG9zIGRhZG9zIGRlIHRvZG9zIG9zIGFycXVpdm9zDQpkYXRhX2xpc3RfbGVpdHVyYSA9IGxhcHBseShmaWxlX2xpc3RfbGVpdHVyYSwgcmVhZC50YWJsZSwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiIsZmlsbCA9IFRSVUUpDQojIEp1bnRhciBvcyBkYWRvcw0KZGFkb3NfbGVpdHVyYSA9IGRvLmNhbGwocmJpbmQsIGRhdGFfbGlzdF9sZWl0dXJhKQ0KZGFkb3NfbGVpdHVyYQ0KIyBFeGNsdWlyIGNvbHVuYXMgZGVzbmVjZXNzYXJpYXMNCmRhZG9zX2xlaXR1cmEgPSBzdWJzZXQoZGFkb3NfbGVpdHVyYSwgc2VsZWN0ID0gYygiREFURSIsIlRJTUUiLCJKVUxJQU5fREFZUyIsIk1QVlBvc2l0aW9uIiwiTjJPX2RyeSIsIkNPMl9kcnkiLCJDSDRfZHJ5IiwiSDJPIiwiTkgzIikpDQpwcmludChkYWRvc19sZWl0dXJhKQ0KI0NyaWFyIGRhdGV0aW1lDQpkYWRvc19sZWl0dXJhID0gZGFkb3NfbGVpdHVyYSAlPiUgbXV0YXRlKGRhdGV0aW1lID0gYXMuUE9TSVhjdChwYXN0ZShEQVRFLCBUSU1FKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNOiVPUyIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpDQpwcmludChkYWRvc19sZWl0dXJhKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhMSA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlcigNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xNSAwOTowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xNSAxMjo1NjowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnByaW50KGZpbHRyYWRvc19sZWl0dXJhMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhMSRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KDQojIENhcnJlZ2FyIElEIGRhIGxlaXR1cmENCklELmxlaXR1cmExPXJlYWQuY3N2KCJDOi9Vc2Vycy9TYW1zdW5nL09uZURyaXZlL0RvY3VtZW50b3MvMiAtIE1hdGVyaWFsIGRlIHRyYWJhbGhvLzUgLSBBdGl2aWRhZGVzIERpZMOhdGljYXMvNS41IC0gT3JpZW50YcOnw6NvL01lc3RyYWRvL0lzYWJlbGxlL0RhdGEvTGVpdHVyYSAxL0lEIGxlaXR1cmExLmNzdiIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnN0cihJRC5sZWl0dXJhMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnByaW50KElELmxlaXR1cmExKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmBgYA0KKioqDQoqKioNCiMjIF8qKkxlaXR1cmEgMiAtIDE2LzA0LzIwMjYqKl8NCioqKg0KKioqDQpgYGB7cn0NCiMgQ2FtaW5obyBkb3MgYXJxdWl2b3MgLmRhdA0KZmlsZV9sZWl0dXJhID0gIkM6L1VzZXJzL1NhbXN1bmcvT25lRHJpdmUvRG9jdW1lbnRvcy8yIC0gTWF0ZXJpYWwgZGUgdHJhYmFsaG8vNSAtIEF0aXZpZGFkZXMgRGlkw6F0aWNhcy81LjUgLSBPcmllbnRhw6fDo28vTWVzdHJhZG8vSXNhYmVsbGUvRGF0YS9MZWl0dXJhIDIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiMgT2J0ZXIgYSBsaXN0YSBkZSBhcnF1aXZvcyAuZGF0DQpmaWxlX2xpc3RfbGVpdHVyYSA9IGxpc3QuZmlsZXMoZmlsZV9sZWl0dXJhLCBwYXR0ZXJuID0gIi5kYXQiLCBmdWxsLm5hbWVzID0gVFJVRSkNCiMgTGVyIG9zIGRhZG9zIGRlIHRvZG9zIG9zIGFycXVpdm9zDQpkYXRhX2xpc3RfbGVpdHVyYSA9IGxhcHBseShmaWxlX2xpc3RfbGVpdHVyYSwgcmVhZC50YWJsZSwgaGVhZGVyID0gVFJVRSwgc2VwID0gIiIsZmlsbCA9IFRSVUUpDQojIEp1bnRhciBvcyBkYWRvcw0KZGFkb3NfbGVpdHVyYSA9IGRvLmNhbGwocmJpbmQsIGRhdGFfbGlzdF9sZWl0dXJhKQ0KIyBFeGNsdWlyIGNvbHVuYXMgZGVzbmVjZXNzYXJpYXMNCmRhZG9zX2xlaXR1cmEgPSBzdWJzZXQoZGFkb3NfbGVpdHVyYSwgc2VsZWN0ID0gYygiREFURSIsIlRJTUUiLCJKVUxJQU5fREFZUyIsIk1QVlBvc2l0aW9uIiwiTjJPX2RyeSIsIkNPMl9kcnkiLCJDSDRfZHJ5IiwiSDJPIiwiTkgzIikpDQojQ3JpYXIgZGF0ZXRpbWUNCmRhZG9zX2xlaXR1cmEgPSBkYWRvc19sZWl0dXJhICU+JSBtdXRhdGUoZGF0ZXRpbWUgPSBhcy5QT1NJWGN0KHBhc3RlKERBVEUsIFRJTUUpLA0KICBmb3JtYXQgPSAiJVktJW0tJWQgJUg6JU06JU9TIiwgdHogPSAiQW1lcmljYS9TYW9fUGF1bG8iKSkNCiNGaWx0cmFyIHBvciBob3JhcmlvDQpmaWx0cmFkb3NfbGVpdHVyYTIgPSBkYWRvc19sZWl0dXJhICU+JSBmaWx0ZXIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQogICAgKGRhdGV0aW1lID49IGFzLlBPU0lYY3QoIjIwMjYtMDQtMTYgMDg6MDA6MDAiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpICYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQogICAgIGRhdGV0aW1lIDw9IGFzLlBPU0lYY3QoIjIwMjYtMDQtMTYgMTQ6MDA6MDAiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpoZWFkKGZpbHRyYWRvc19sZWl0dXJhMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhMiRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhMj1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgMi9JRCBsZWl0dXJhMi5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSAzIC0gMTcvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgMyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhMyA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xNyAwOTowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xNyAxMzowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmEzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhMyRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhMz1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgMy9JRCBsZWl0dXJhMy5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSA0IC0gMTkvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhNCA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xOSAwOTowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNC0xOSAxNDowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmE0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhNCRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhND1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNC9JRCBsZWl0dXJhNC5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSA1IC0gMjIvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhNSA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNC0yMiAwODowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNC0yMiAxMjowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhNSRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhNT1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNS9JRCBsZWl0dXJhNS5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSA2IC0gMjcvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhNiA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNC0yNyAwOTowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNC0yNyAxMzowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmE2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhNiRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhNj1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNi9JRCBsZWl0dXJhNi5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSA3IC0gMDUvMDUvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhNyA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNS0wNSAxMDowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNS0wNSAxNDowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhNyRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhNz1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgNy9JRCBsZWl0dXJhNy5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSA4IC0gMTgvMDUvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyBDYW1pbmhvIGRvcyBhcnF1aXZvcyAuZGF0DQpmaWxlX2xlaXR1cmEgPSAiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgOCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KIyBPYnRlciBhIGxpc3RhIGRlIGFycXVpdm9zIC5kYXQNCmZpbGVfbGlzdF9sZWl0dXJhID0gbGlzdC5maWxlcyhmaWxlX2xlaXR1cmEsIHBhdHRlcm4gPSAiLmRhdCIsIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBMZXIgb3MgZGFkb3MgZGUgdG9kb3Mgb3MgYXJxdWl2b3MNCmRhdGFfbGlzdF9sZWl0dXJhID0gbGFwcGx5KGZpbGVfbGlzdF9sZWl0dXJhLCByZWFkLnRhYmxlLCBoZWFkZXIgPSBUUlVFLCBzZXAgPSAiIixmaWxsID0gVFJVRSkNCiMgSnVudGFyIG9zIGRhZG9zDQpkYWRvc19sZWl0dXJhID0gZG8uY2FsbChyYmluZCwgZGF0YV9saXN0X2xlaXR1cmEpDQojIEV4Y2x1aXIgY29sdW5hcyBkZXNuZWNlc3Nhcmlhcw0KZGFkb3NfbGVpdHVyYSA9IHN1YnNldChkYWRvc19sZWl0dXJhLCBzZWxlY3QgPSBjKCJEQVRFIiwiVElNRSIsIkpVTElBTl9EQVlTIiwiTVBWUG9zaXRpb24iLCJOMk9fZHJ5IiwiQ08yX2RyeSIsIkNINF9kcnkiLCJIMk8iLCJOSDMiKSkNCiNDcmlhciBkYXRldGltZQ0KZGFkb3NfbGVpdHVyYSA9IGRhZG9zX2xlaXR1cmEgJT4lIG11dGF0ZShkYXRldGltZSA9IGFzLlBPU0lYY3QocGFzdGUoREFURSwgVElNRSksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTTolT1MiLCB0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpKQ0KI0ZpbHRyYXIgcG9yIGhvcmFyaW8NCmZpbHRyYWRvc19sZWl0dXJhOCA9IGRhZG9zX2xlaXR1cmEgJT4lIGZpbHRlciggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAoZGF0ZXRpbWUgPj0gYXMuUE9TSVhjdCgiMjAyNi0wNS0xOCAwODowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCiAgICAgZGF0ZXRpbWUgPD0gYXMuUE9TSVhjdCgiMjAyNi0wNS0xOCAxMzowMDowMCIsIHR6ID0gIkFtZXJpY2EvU2FvX1BhdWxvIikpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoZmlsdHJhZG9zX2xlaXR1cmE4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCnJhbmdlKGZpbHRyYWRvc19sZWl0dXJhOCRkYXRldGltZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCg0KIyBDYXJyZWdhciBJRCBkYSBsZWl0dXJhDQpJRC5sZWl0dXJhOD1yZWFkLmNzdigiQzovVXNlcnMvU2Ftc3VuZy9PbmVEcml2ZS9Eb2N1bWVudG9zLzIgLSBNYXRlcmlhbCBkZSB0cmFiYWxoby81IC0gQXRpdmlkYWRlcyBEaWTDoXRpY2FzLzUuNSAtIE9yaWVudGHDp8Ojby9NZXN0cmFkby9Jc2FiZWxsZS9EYXRhL0xlaXR1cmEgOC9JRCBsZWl0dXJhOC5jc3YiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhcXVpDQpzdHIoSUQubGVpdHVyYTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FxdWkNCmhlYWQoSUQubGVpdHVyYTgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjYXF1aQ0KYGBgDQoNCioqKg0KKioqDQojICoqMiAtIElkZW50aWZpY2FyIGxlaXR1cmFzIGRvcyBmcmFzY29zIGUgYmFja2dyb3VuZCoqDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSAxIC0gMTUvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KbGlicmFyeShkYXRhLnRhYmxlKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBSRVBBUkFSIERBRE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGFkb3MxID0gYXMuZGF0YS50YWJsZShmaWx0cmFkb3NfbGVpdHVyYTEpDQppZCA9IGFzLmRhdGEudGFibGUoSUQubGVpdHVyYTEpDQoNCiMgQ3JpYXIgaW7DrWNpbyBlIGZpbSBkYXMgbGVpdHVyYXMNCmlkWywgc3RhcnQgOj0gYXMuUE9TSVhjdChwYXN0ZShhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBCZWdpbm5pbmcucmVhZGluZyksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTSIsdHogPSAiQW1lcmljYS9TYW9fUGF1bG8iKV0NCg0KaWRbLCBlbmQgOj0gYXMuUE9TSVhjdChwYXN0ZShhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBFbmQucmVhZGluZyksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTSIsdHogPSAiQW1lcmljYS9TYW9fUGF1bG8iKV0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QViAxIC0gTEVJVFVSQSBET1MgRlJBU0NPUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxlaXR1cmExID0gY29weShkYWRvczEpDQpsZWl0dXJhMVssIGMoDQogICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9IC4oDQogIE5BX2ludGVnZXJfLCBOQV9jaGFyYWN0ZXJfLCBOQV9pbnRlZ2VyXywgTkFfaW50ZWdlcl8sTkFfaW50ZWdlcl8sIE5BX3JlYWxfLCBOQV9yZWFsXyldDQoNCmxlaXR1cmExW01QVlBvc2l0aW9uID09IDEsYygNCiAgICAiQm90dGxlIiwgIkFicmV2aWFjYW8iLCAiQmxvY28iLCAiUmVwIiwiTGVpdHVyYSIsICJTb2xvLlNlY28iLCAiSW50ZXJuYWwudGVtcGVyYXR1cmUiKSA6PQ0KICAgIGlkWy5TRCwuKEJvdHRsZSwgQWJyZXZpYWNhbywgQmxvY28sIFJlcCxMZWl0dXJhLCBTb2xvLlNlY28sIEludGVybmFsLnRlbXBlcmF0dXJlKSwNCiAgICAgICBvbiA9IC4oc3RhcnQgPD0gZGF0ZXRpbWUsIGVuZCA+IGRhdGV0aW1lKSxtdWx0ID0gImZpcnN0Il1dDQoNCiMgTWFudGVyIGFwZW5hcyBhcyBsZWl0dXJhcyB2w6FsaWRhcyBkb3MgZnJhc2Nvcw0KbGVpdHVyYTEgPSBsZWl0dXJhMVtNUFZQb3NpdGlvbiA9PSAxICYgIWlzLm5hKEJvdHRsZSldDQpWaWV3KGxlaXR1cmExKQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqTGVpdHVyYSAyIC0gMTYvMDQvMjAyNioqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBSRVBBUkFSIERBRE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGFkb3MyID0gYXMuZGF0YS50YWJsZShmaWx0cmFkb3NfbGVpdHVyYTIpDQppZCA9IGFzLmRhdGEudGFibGUoSUQubGVpdHVyYTIpDQoNCiMgQ3JpYXIgaW7DrWNpbyBlIGZpbSBkYXMgbGVpdHVyYXMNCmlkWywgc3RhcnQgOj0gYXMuUE9TSVhjdChwYXN0ZShhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBCZWdpbm5pbmcucmVhZGluZyksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTSIsdHogPSAiQW1lcmljYS9TYW9fUGF1bG8iKV0NCg0KaWRbLCBlbmQgOj0gYXMuUE9TSVhjdChwYXN0ZShhcy5EYXRlKERhdGUsIGZvcm1hdCA9ICIlZC8lbS8lWSIpLCBFbmQucmVhZGluZyksDQogIGZvcm1hdCA9ICIlWS0lbS0lZCAlSDolTSIsdHogPSAiQW1lcmljYS9TYW9fUGF1bG8iKV0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QViAxIC0gTEVJVFVSQSBET1MgRlJBU0NPUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxlaXR1cmEyID0gY29weShkYWRvczIpDQpsZWl0dXJhMlssIGMoDQogICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9IC4oDQogIE5BX2ludGVnZXJfLCBOQV9jaGFyYWN0ZXJfLCBOQV9pbnRlZ2VyXywgTkFfaW50ZWdlcl8sTkFfaW50ZWdlcl8sIE5BX3JlYWxfLCBOQV9yZWFsXyldDQoNCmxlaXR1cmEyW01QVlBvc2l0aW9uID09IDEsYygNCiAgICAiQm90dGxlIiwgIkFicmV2aWFjYW8iLCAiQmxvY28iLCAiUmVwIiwiTGVpdHVyYSIsICJTb2xvLlNlY28iLCAiSW50ZXJuYWwudGVtcGVyYXR1cmUiKSA6PQ0KICAgIGlkWy5TRCwuKEJvdHRsZSwgQWJyZXZpYWNhbywgQmxvY28sIFJlcCxMZWl0dXJhLCBTb2xvLlNlY28sIEludGVybmFsLnRlbXBlcmF0dXJlKSwNCiAgICAgICBvbiA9IC4oc3RhcnQgPD0gZGF0ZXRpbWUsIGVuZCA+IGRhdGV0aW1lKSxtdWx0ID0gImZpcnN0Il1dDQoNCiMgTWFudGVyIGFwZW5hcyBhcyBsZWl0dXJhcyB2w6FsaWRhcyBkb3MgZnJhc2Nvcw0KbGVpdHVyYTIgPSBsZWl0dXJhMltNUFZQb3NpdGlvbiA9PSAxICYgIWlzLm5hKEJvdHRsZSldDQpWaWV3KGxlaXR1cmEyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDMgLSAxNy8wNC8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczMgPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhMykNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhMykNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTMgPSBjb3B5KGRhZG9zMykNCmxlaXR1cmEzWywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYTNbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhMyA9IGxlaXR1cmEzW01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTMpDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDQgLSAxOS8wNC8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczQgPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhNCkNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhNCkNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTQgPSBjb3B5KGRhZG9zNCkNCmxlaXR1cmE0WywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYTRbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhNCA9IGxlaXR1cmE0W01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTQpDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDUgLSAyMi8wNC8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczUgPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhNSkNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhNSkNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTUgPSBjb3B5KGRhZG9zNSkNCmxlaXR1cmE1WywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYTVbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhNSA9IGxlaXR1cmE1W01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTUpDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDYgLSAyNy8wNC8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczYgPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhNikNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhNikNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTYgPSBjb3B5KGRhZG9zNikNCmxlaXR1cmE2WywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYTZbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhNiA9IGxlaXR1cmE2W01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTYpDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDcgLSAwNS8wNS8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczcgPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhNykNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhNykNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTcgPSBjb3B5KGRhZG9zNykNCmxlaXR1cmE3WywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYTdbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhNyA9IGxlaXR1cmE3W01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTcpDQpgYGANCioqKg0KKioqDQojIyBfKipMZWl0dXJhIDggLSAxOC8wNS8yMDI2KipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvczggPSBhcy5kYXRhLnRhYmxlKGZpbHRyYWRvc19sZWl0dXJhOCkNCmlkID0gYXMuZGF0YS50YWJsZShJRC5sZWl0dXJhOCkNCg0KIyBDcmlhciBpbsOtY2lvIGUgZmltIGRhcyBsZWl0dXJhcw0KaWRbLCBzdGFydCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEJlZ2lubmluZy5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQppZFssIGVuZCA6PSBhcy5QT1NJWGN0KHBhc3RlKGFzLkRhdGUoRGF0ZSwgZm9ybWF0ID0gIiVkLyVtLyVZIiksIEVuZC5yZWFkaW5nKSwNCiAgZm9ybWF0ID0gIiVZLSVtLSVkICVIOiVNIix0eiA9ICJBbWVyaWNhL1Nhb19QYXVsbyIpXQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBWIDEgLSBMRUlUVVJBIERPUyBGUkFTQ09TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGVpdHVyYTggPSBjb3B5KGRhZG9zOCkNCmxlaXR1cmE4WywgYygNCiAgIkJvdHRsZSIsICJBYnJldmlhY2FvIiwgIkJsb2NvIiwgIlJlcCIsIkxlaXR1cmEiLCAiU29sby5TZWNvIiwgIkludGVybmFsLnRlbXBlcmF0dXJlIikgOj0gLigNCiAgTkFfaW50ZWdlcl8sIE5BX2NoYXJhY3Rlcl8sIE5BX2ludGVnZXJfLCBOQV9pbnRlZ2VyXyxOQV9pbnRlZ2VyXywgTkFfcmVhbF8sIE5BX3JlYWxfKV0NCg0KbGVpdHVyYThbTVBWUG9zaXRpb24gPT0gMSxjKA0KICAgICJCb3R0bGUiLCAiQWJyZXZpYWNhbyIsICJCbG9jbyIsICJSZXAiLCJMZWl0dXJhIiwgIlNvbG8uU2VjbyIsICJJbnRlcm5hbC50ZW1wZXJhdHVyZSIpIDo9DQogICAgaWRbLlNELC4oQm90dGxlLCBBYnJldmlhY2FvLCBCbG9jbywgUmVwLExlaXR1cmEsIFNvbG8uU2VjbywgSW50ZXJuYWwudGVtcGVyYXR1cmUpLA0KICAgICAgIG9uID0gLihzdGFydCA8PSBkYXRldGltZSwgZW5kID4gZGF0ZXRpbWUpLG11bHQgPSAiZmlyc3QiXV0NCg0KIyBNYW50ZXIgYXBlbmFzIGFzIGxlaXR1cmFzIHbDoWxpZGFzIGRvcyBmcmFzY29zDQpsZWl0dXJhOCA9IGxlaXR1cmE4W01QVlBvc2l0aW9uID09IDEgJiAhaXMubmEoQm90dGxlKV0NClZpZXcobGVpdHVyYTgpDQpgYGANCioqKg0KKioqDQojIyBfKipCYWNrZ29ydW5kcyoqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZVTsOHw4NPIFBBUkEgRVhUUkFJUiBPIEJBQ0tHUk9VTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpjcmlhcl9iYWNrZ3JvdW5kID0gZnVuY3Rpb24oZGFkb3MsIGxlaXR1cmEpIHsNCiAgIyBJZGVudGlmaWNhciBvIGluw61jaW8gcmVhbCBkYSBsZWl0dXJhIGRlIGNhZGEgZnJhc2NvDQogIG1hcGEgPSBsZWl0dXJhWywgLigNCiAgICBpbmljaW9fbGVpdHVyYSA9IG1pbihkYXRldGltZSksDQogICAgQWJyZXZpYWNhbyA9IGRhdGEudGFibGU6OmZpcnN0KEFicmV2aWFjYW8pLA0KICAgIEJsb2NvID0gZGF0YS50YWJsZTo6Zmlyc3QoQmxvY28pLA0KICAgIFJlcCA9IGRhdGEudGFibGU6OmZpcnN0KFJlcCksDQogICAgTGVpdHVyYSA9IGRhdGEudGFibGU6OmZpcnN0KExlaXR1cmEpLA0KICAgIFNvbG8uU2VjbyA9IGRhdGEudGFibGU6OmZpcnN0KFNvbG8uU2VjbyksDQogICAgSW50ZXJuYWwudGVtcGVyYXR1cmUgPSBkYXRhLnRhYmxlOjpmaXJzdChJbnRlcm5hbC50ZW1wZXJhdHVyZSkpLCBieSA9IEJvdHRsZV0NCg0KICAjIERlZmluaXIgb3MgNCBtaW51dG9zIGFudGVyaW9yZXMgw6AgbGVpdHVyYQ0KICBtYXBhWywgYmFja2dyb3VuZF9zdGFydCA6PSBpbmljaW9fbGVpdHVyYSAtIDI0MF0NCiAgIyBNYW50ZXIgYXBlbmFzIGRhZG9zIGRvIE1QVlBvc2l0aW9uIDINCiAgYmdfcmF3ID0gZGFkb3NbTVBWUG9zaXRpb24gPT0gMl0NCiAgIyBFeHRyYWlyIHNlcGFyYWRhbWVudGUgbyBiYWNrZ3JvdW5kIGRlIGNhZGEgZnJhc2NvDQogIGJhY2tncm91bmQgPSBkYXRhLnRhYmxlOjpyYmluZGxpc3QoDQogICAgbGFwcGx5KHNlcV9sZW4obnJvdyhtYXBhKSksIGZ1bmN0aW9uKGkpIHsNCiAgICAgIG0gPSBtYXBhW2ldDQogICAgICBiZyA9IGRhdGEudGFibGU6OmNvcHkoDQogICAgICAgIGJnX3Jhd1tkYXRldGltZSA+PSBtJGJhY2tncm91bmRfc3RhcnQgJiBkYXRldGltZSA8ICBtJGluaWNpb19sZWl0dXJhXSkNCiAgICAgIGlmIChucm93KGJnKSA9PSAwKSByZXR1cm4oTlVMTCkNCiAgICAgIGJnWywgYDo9YCgNCiAgICAgICAgQm90dGxlID0gbSRCb3R0bGUsDQogICAgICAgIEFicmV2aWFjYW8gPSBtJEFicmV2aWFjYW8sDQogICAgICAgIEJsb2NvID0gbSRCbG9jbywNCiAgICAgICAgUmVwID0gbSRSZXAsDQogICAgICAgIExlaXR1cmEgPSBtJExlaXR1cmEsDQogICAgICAgIFNvbG8uU2VjbyA9IG0kU29sby5TZWNvLA0KICAgICAgICBJbnRlcm5hbC50ZW1wZXJhdHVyZSA9IG0kSW50ZXJuYWwudGVtcGVyYXR1cmUsDQogICAgICAgIGluaWNpb19sZWl0dXJhID0gbSRpbmljaW9fbGVpdHVyYSwNCiAgICAgICAgIyBUZW1wbyBkZXNkZSBvIGluw61jaW8gZG9zIDQgbWluIGRlIGJhY2tncm91bmQNCiAgICAgICAgdF9iYWNrZ3JvdW5kID0gYXMubnVtZXJpYygNCiAgICAgICAgICBkaWZmdGltZShkYXRldGltZSxtJGJhY2tncm91bmRfc3RhcnQsdW5pdHMgPSAic2VjcyIpKSldDQogICAgICBiZ30pLHVzZS5uYW1lcyA9IFRSVUUsZmlsbCA9IFRSVUUpDQogIHJldHVybihiYWNrZ3JvdW5kKX0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENSSUFSIE9TIDggQkFDS0dST1VORFMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmJhY2tncm91bmQxID0gY3JpYXJfYmFja2dyb3VuZChkYWRvczEsIGxlaXR1cmExKQ0KYmFja2dyb3VuZDIgPSBjcmlhcl9iYWNrZ3JvdW5kKGRhZG9zMiwgbGVpdHVyYTIpDQpiYWNrZ3JvdW5kMyA9IGNyaWFyX2JhY2tncm91bmQoZGFkb3MzLCBsZWl0dXJhMykNCmJhY2tncm91bmQ0ID0gY3JpYXJfYmFja2dyb3VuZChkYWRvczQsIGxlaXR1cmE0KQ0KYmFja2dyb3VuZDUgPSBjcmlhcl9iYWNrZ3JvdW5kKGRhZG9zNSwgbGVpdHVyYTUpDQpiYWNrZ3JvdW5kNiA9IGNyaWFyX2JhY2tncm91bmQoZGFkb3M2LCBsZWl0dXJhNikNCmJhY2tncm91bmQ3ID0gY3JpYXJfYmFja2dyb3VuZChkYWRvczcsIGxlaXR1cmE3KQ0KYmFja2dyb3VuZDggPSBjcmlhcl9iYWNrZ3JvdW5kKGRhZG9zOCwgbGVpdHVyYTgpDQoNCmBgYA0KKioqDQoqKioNCiMjIF8qKkp1bnRhciBhcyA4IGxlaXR1cmFzIGUgYmFja2dyb3VuZHMqKl8NCioqKg0KKioqDQpgYGB7cn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBMZWl0dXJhcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkxlaXR1cmFzX2NvbXBsZXRhcyA9IGRwbHlyOjpiaW5kX3Jvd3MoDQogIGxlaXR1cmExLGxlaXR1cmEyLGxlaXR1cmEzLGxlaXR1cmE0LGxlaXR1cmE1LGxlaXR1cmE2LGxlaXR1cmE3LGxlaXR1cmE4KQ0KVmlldyhMZWl0dXJhc19jb21wbGV0YXMpDQoNCmRpbShMZWl0dXJhc19jb21wbGV0YXMpDQp0YWJsZShMZWl0dXJhc19jb21wbGV0YXMkTGVpdHVyYSkNCnN0cihMZWl0dXJhc19jb21wbGV0YXMpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBiYWNrZ3JvdW5kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmJhY2tncm91bmRfY29tcGxldG8gPSBkcGx5cjo6YmluZF9yb3dzKA0KICBiYWNrZ3JvdW5kMSxiYWNrZ3JvdW5kMixiYWNrZ3JvdW5kMyxiYWNrZ3JvdW5kNCxiYWNrZ3JvdW5kNSxiYWNrZ3JvdW5kNixiYWNrZ3JvdW5kNyxiYWNrZ3JvdW5kOCkNClZpZXcoYmFja2dyb3VuZF9jb21wbGV0bykNCg0KZGltKGJhY2tncm91bmRfY29tcGxldG8pDQp0YWJsZShiYWNrZ3JvdW5kX2NvbXBsZXRvJExlaXR1cmEpDQpzdHIoYmFja2dyb3VuZF9jb21wbGV0bykNCmBgYA0KKioqDQoqKioNCiMgKiozIC0gQ29udHJvbGUgZGUgcXVhbGlkYWRlIGUgZGVmaW5pw6fDo28gZGEgamFuZWxhIGRlIGxlaXR1cmEqKg0KKioqDQoqKioNCiMjIF8qKkxlaXR1cmFzKipfDQoqKioNCioqKg0KYGBge3J9DQpkYWRvc19wcm9jID0gTGVpdHVyYXNfY29tcGxldGFzICU+JSANCiAgZHBseXI6Om11dGF0ZShCb3R0bGVJRCA9IHBhc3RlKExlaXR1cmEsQm90dGxlLEFicmV2aWFjYW8sQmxvY28sUmVwLHNlcCA9ICJfIikpICU+JQ0KICBkcGx5cjo6Z3JvdXBfYnkoQm90dGxlSUQpICU+JQ0KICBkcGx5cjo6YXJyYW5nZShkYXRldGltZSwgLmJ5X2dyb3VwID0gVFJVRSkgJT4lDQogIGRwbHlyOjptdXRhdGUodF9zZWMgPSBhcy5udW1lcmljKGRpZmZ0aW1lKGRhdGV0aW1lLCBtaW4oZGF0ZXRpbWUpLCB1bml0cyA9ICJzZWNzIikpKSAlPiUNCiAgZHBseXI6OnVuZ3JvdXAoKQ0KaGVhZChkYWRvc19wcm9jKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUFJFUEFSQVIgREFET1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvc19kaWFnbm9zdGljbyA9IGRhZG9zX3Byb2MgJT4lIGRwbHlyOjpmaWx0ZXIodF9zZWMgPD0gMTIwKSAlPiUNCiAgZHBseXI6OnNlbGVjdChCb3R0bGVJRCwgdF9zZWMsQ08yX2RyeSwgTjJPX2RyeSwgQ0g0X2RyeSwgSDJPLCBOSDMpICU+JQ0KICB0aWR5cjo6cGl2b3RfbG9uZ2VyKGNvbHMgPSBjKENPMl9kcnksIE4yT19kcnksIENINF9kcnksIEgyTywgTkgzKSwNCiAgICBuYW1lc190byA9ICJHYXMiLHZhbHVlc190byA9ICJDb25jZW50cmFjYW8iKSAlPiUNCiAgZHBseXI6Om11dGF0ZShHYXMgPSBkcGx5cjo6cmVjb2RlKEdhcywNCiAgICAgICJDSDRfZHJ5Ij0iQ0g0IChwcG0pIiwiQ08yX2RyeSI9IkNPMiAocHBtKSIsIk4yT19kcnkiPSJOMk8gKHBwbSkiLCJIMk8iPSJIMk8gKCUpIiwiTkgzIj0gIk5IMyAocHBiKSIpKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRklHVVJBIFMyIC0gUEVSRklMIERBUyBMRUlUVVJBUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmZpZ19TMiA9IGdncGxvdChkYWRvc19kaWFnbm9zdGljbywgYWVzKHggPSB0X3NlYywgeSA9IENvbmNlbnRyYWNhbywgZ3JvdXAgPSBCb3R0bGVJRCkpICsNCiAgZ2VvbV9saW5lKGFscGhhID0gMC4zNSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKDE1LCA0NSksIGxpbmV0eXBlID0gImRhc2hlZCIpICsNCiAgZmFjZXRfd3JhcCh+IEdhcywgc2NhbGVzID0gImZyZWVfeSIsIG5jb2wgPSAzKSArDQogIGxhYnMoeCA9ICJSZWFkaW5nIHRpbWUgKHMpIix5ID0gIkNvbmNlbnRyYXRpb24iKSArIHRoZW1lX2J3KCkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDEyMCwgYnkgPSAxNSkpKw0KICB0aGVtZShzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSxwYW5lbC5zcGFjaW5nID0gdW5pdCgxLCAibGluZXMiKSkNCmZpZ19TMg0KDQpnZ3NhdmUoIkZpZ3VyZSBTMi5wbmciLGZpZ19TMiwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNiwgZHBpID0gMzAwLCBiZyA9ICJ3aGl0ZSIpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBVkFMSUFSIEpBTkVMQVMgQ0FORElEQVRBUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmdhc2VzX3FjID0gYygiQ08yX2RyeSIsICJOMk9fZHJ5IiwgIkNINF9kcnkiKQ0KamFuZWxhcyA9IGRhdGEuZnJhbWUoSmFuZWxhID0gYygiMTUtMzUiLCAiMTUtNDUiLCAiMTUtNjAiLCIyMC00MCIsICIyMC01MCIsICIyMC02MCIpLA0KICBpbmljaW8gPSBjKDE1LCAxNSwgMTUsIDIwLCAyMCwgMjApLCBmaW0gPSBjKDM1LCA0NSwgNjAsIDQwLCA1MCwgNjApKQ0KDQphdmFsaWFjYW9famFuZWxhcyA9IGRwbHlyOjpiaW5kX3Jvd3MobGFwcGx5KHNlcV9sZW4obnJvdyhqYW5lbGFzKSksIGZ1bmN0aW9uKGkpIHsNCiAgICBpbmkgPSBqYW5lbGFzJGluaWNpb1tpXQ0KICAgIGZpbSA9IGphbmVsYXMkZmltW2ldDQogICAgZHBseXI6OmJpbmRfcm93cyhsYXBwbHkoZ2FzZXNfcWMsIGZ1bmN0aW9uKGcpIHtkYWRvc19wcm9jICU+JQ0KICAgICAgICAgIGRwbHlyOjpmaWx0ZXIodF9zZWMgPj0gaW5pLCB0X3NlYyA8PSBmaW0pICU+JQ0KICAgICAgICAgIGRwbHlyOjpncm91cF9ieShCb3R0bGVJRCkgJT4lDQogICAgICAgICAgZHBseXI6OnN1bW1hcmlzZShtZWRpYSA9IG1lYW4oLmRhdGFbW2ddXSwgbmEucm0gPSBUUlVFKSxzZCA9IHNkKC5kYXRhW1tnXV0sIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBzbG9wZSA9IGNvdih0X3NlYywuZGF0YVtbZ11dLHVzZSA9ICJjb21wbGV0ZS5vYnMiKSAvIHZhcih0X3NlYywgbmEucm0gPSBUUlVFKSwuZ3JvdXBzID0gImRyb3AiKSAlPiUNCiAgICAgICAgICBkcGx5cjo6bXV0YXRlKEdhcyA9IGcsSmFuZWxhID0gamFuZWxhcyRKYW5lbGFbaV0sDQogICAgICAgICAgICAjIENvZWZpY2llbnRlIGRlIHZhcmlhw6fDo28gZGVudHJvIGRhIGphbmVsYQ0KICAgICAgICAgICAgQ1YgPSAoc2QgLyBhYnMobWVkaWEpKSAqIDEwMCwNCiAgICAgICAgICAgICMgTXVkYW7Dp2EgZXN0aW1hZGEgZGEgY29uY2VudHJhw6fDo28gYW8gbG9uZ28gZGEgamFuZWxhDQogICAgICAgICAgICBEcmlmdCA9IGFicyhzbG9wZSkgKiAoZmltIC0gaW5pKSAvIGFicyhtZWRpYSkgKiAxMDApfSkpfSkpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBFU1RBQklMSURBREUgREFTIEpBTkVMQVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQp0YWJfUzIgPSBhdmFsaWFjYW9famFuZWxhcyAlPiUgZHBseXI6Omdyb3VwX2J5KEdhcywgSmFuZWxhKSAlPiUNCiAgZHBseXI6OnN1bW1hcmlzZShDVl9tZWRpYW5vID0gbWVkaWFuKENWLCBuYS5ybSA9IFRSVUUpLCBDVl9QOTAgPSBxdWFudGlsZShDViwgMC45MCwgbmEucm0gPSBUUlVFKSwNCiAgICBEcmlmdF9tZWRpYW5vID0gbWVkaWFuKERyaWZ0LCBuYS5ybSA9IFRSVUUpLA0KICAgIERyaWZ0X1A5MCA9IHF1YW50aWxlKERyaWZ0LCAwLjkwLCBuYS5ybSA9IFRSVUUpLC5ncm91cHMgPSAiZHJvcCIpICU+JQ0KICBkcGx5cjo6bXV0YXRlKEphbmVsYSA9IGZhY3RvcihKYW5lbGEsIGxldmVscyA9IGphbmVsYXMkSmFuZWxhKSkgJT4lDQogIGRwbHlyOjphcnJhbmdlKEdhcywgSmFuZWxhKQ0KcHJpbnQodGFiX1MyKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRklHVVJBIFMzIC0gQ09NUEFSQcOHw4NPIERBUyBKQU5FTEFTICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGFkb3NfZmlnX1MzID0gdGFiX1MyICU+JQ0KICBkcGx5cjo6c2VsZWN0KEdhcywgSmFuZWxhLCBDVl9QOTAsIERyaWZ0X1A5MCkgJT4lDQogIHRpZHlyOjpwaXZvdF9sb25nZXIoY29scyA9IGMoQ1ZfUDkwLCBEcmlmdF9QOTApLG5hbWVzX3RvID0gIk1ldHJpY2EiLHZhbHVlc190byA9ICJWYWxvciIpICU+JQ0KICBkcGx5cjo6bXV0YXRlKA0KICAgIEdhcyA9IGRwbHlyOjpyZWNvZGUoR2FzLCJDSDRfZHJ5Ij0iQ0g0IChwcG0pIiwiQ08yX2RyeSI9IkNPMiAocHBtKSIsIk4yT19kcnkiPSJOMk8gKHBwbSkiKSwNCiAgICBNZXRyaWNhID0gZHBseXI6OnJlY29kZShNZXRyaWNhLCJDVl9QOTAiID0gIkNWIFA5MCAoJSkiLCJEcmlmdF9QOTAiID0gIkRyaWZ0IFA5MCAoJSkiKSkNCg0KZmlnX1MzID0gZ2dwbG90KGRhZG9zX2ZpZ19TMyxhZXMoeCA9IEphbmVsYSwgeSA9IFZhbG9yLCBncm91cCA9IEdhcykpICsNCiAgZ2VvbV9saW5lKCkgKyBnZW9tX3BvaW50KHNpemUgPSAyKSArDQogIGZhY2V0X2dyaWQoTWV0cmljYSB+IEdhcywgc2NhbGVzID0gImZyZWVfeSIpICsgDQogIGxhYnMoeCA9ICJSZWFkaW5nIHdpbmRvdyAocykiLHkgPSAiVmFsdWUgKCUpIikgKyB0aGVtZV9idygpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSxzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIGhqdXN0ID0gMC41KSkNCmZpZ19TMw0KDQpnZ3NhdmUoIkZpZ3VyZSBTMy5wbmciLGZpZ19TMywgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNiwgZHBpID0gNDAwLCBiZyA9ICJ3aGl0ZSIpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBKQU5FTEEgRklOQUw6IDE1LTQ1IHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvc19lc3RhdmVpcyA9IGRhZG9zX3Byb2MgJT4lIGRwbHlyOjpmaWx0ZXIodF9zZWMgPj0gMTUsIHRfc2VjIDw9IDQ1KQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09OQ0VOVFJBw4fDlUVTIE3DiURJQVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQptZWRpYXNfbGVpdHVyYXMgPSBkYWRvc19lc3RhdmVpcyAlPiUgZHBseXI6Omdyb3VwX2J5KA0KICAgIExlaXR1cmEsIEJvdHRsZSwgQWJyZXZpYWNhbywgQmxvY28sIFJlcCkgJT4lDQogIGRwbHlyOjpzdW1tYXJpc2UoDQogICAgVGVtcGVyYXR1cmEgPSBtZWFuKEludGVybmFsLnRlbXBlcmF0dXJlLCBuYS5ybSA9IFRSVUUpLA0KICAgIFBlc28uc29sbyA9IG1lYW4oU29sby5TZWNvLCBuYS5ybSA9IFRSVUUpLA0KICAgIE4yTyA9IG1lYW4oTjJPX2RyeSwgbmEucm0gPSBUUlVFKSwNCiAgICBDTzIgPSBtZWFuKENPMl9kcnksIG5hLnJtID0gVFJVRSksDQogICAgQ0g0ID0gbWVhbihDSDRfZHJ5LCBuYS5ybSA9IFRSVUUpLA0KICAgICMgTWFudGlkbyBhcGVuYXMgY29tbyBjb250cm9sZSBkZSBxdWFsaWRhZGUNCiAgICBIMk9fUUMgPSBtZWFuKEgyTywgbmEucm0gPSBUUlVFKSwNCiAgICBuX29icyA9IGRwbHlyOjpuKCksLmdyb3VwcyA9ICJkcm9wIikNClZpZXcobWVkaWFzX2xlaXR1cmFzKQ0KYGBgDQoqKioNCioqKg0KIyMgXyoqQmFja2dyb3VuZCoqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBSRVBBUkFSIERBRE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KYmFja2dyb3VuZF9wcm9jID0gYmFja2dyb3VuZF9jb21wbGV0byAlPiUgZHBseXI6Om11dGF0ZSgNCiAgICBCb3R0bGVJRCA9IHBhc3RlKExlaXR1cmEsIEJvdHRsZSwgQWJyZXZpYWNhbywgQmxvY28sIFJlcCxzZXAgPSAiXyIpKQ0KaGVhZChiYWNrZ3JvdW5kX3Byb2MpDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBSRVBBUkFSIERBRE9TIFBBUkEgRElBR07Dk1NUSUNPICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KYmFja2dyb3VuZF9kaWFnbm9zdGljbyA9IGJhY2tncm91bmRfcHJvYyAlPiUgZHBseXI6OmZpbHRlcigNCiAgICB0X2JhY2tncm91bmQgPj0gMCx0X2JhY2tncm91bmQgPD0gMjQwKSAlPiUNCiAgZHBseXI6OnNlbGVjdChCb3R0bGVJRCx0X2JhY2tncm91bmQsQ08yX2RyeSxOMk9fZHJ5LENINF9kcnksSDJPKSAlPiUNCiAgdGlkeXI6OnBpdm90X2xvbmdlcihjb2xzID0gYyhDTzJfZHJ5LCBOMk9fZHJ5LCBDSDRfZHJ5LCBIMk8pLG5hbWVzX3RvID0gIkdhcyIsdmFsdWVzX3RvID0gIkNvbmNlbnRyYWNhbyIpICU+JQ0KICBkcGx5cjo6bXV0YXRlKA0KICAgIEdhcyA9IGRwbHlyOjpyZWNvZGUoR2FzLCJDSDRfZHJ5Ij0iQ0g0IChwcG0pIiwiQ08yX2RyeSI9IkNPMiAocHBtKSIsIk4yT19kcnkiPSJOMk8gKHBwbSkiLCJIMk8iPSJIMk8gKCUpIikpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGSUdVUkEgUzQgLSBQRVJGSUwgRE8gQkFDS0dST1VORCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmZpZ19TNCA9IGdncGxvdChiYWNrZ3JvdW5kX2RpYWdub3N0aWNvLGFlcyh4ID0gdF9iYWNrZ3JvdW5kLHkgPSBDb25jZW50cmFjYW8sZ3JvdXAgPSBCb3R0bGVJRCkpICsNCiAgZ2VvbV9saW5lKGFscGhhID0gMC4zMCkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBjKDYwLCA5MCksbGluZXR5cGUgPSAiZGFzaGVkIikgKw0KICBmYWNldF93cmFwKH4gR2FzLHNjYWxlcyA9ICJmcmVlX3kiLG5jb2wgPSAyKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMjQwLCBieSA9IDMwKSkgKw0KICBsYWJzKHggPSAiQmFja2dyb3VuZCBtZWFzdXJlbWVudCB0aW1lIChzKSIseSA9ICJDb25jZW50cmF0aW9uIikgKw0KICB0aGVtZV9idygpK3RoZW1lKHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUsZmFjZSA9ICJib2xkIikscGFuZWwuc3BhY2luZyA9IGdyaWQ6OnVuaXQoMSwgImxpbmVzIikpDQpmaWdfUzQNCg0KZ2dzYXZlKCJGaWd1cmUgUzQucG5nIixmaWdfUzQsd2lkdGggPSA5LGhlaWdodCA9IDcsZHBpID0gMzAwLGJnID0gIndoaXRlIikNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFWQUxJQVIgSkFORUxBUyBETyBCQUNLR1JPVU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZ2FzZXNfYmcgPSBjKCJDTzJfZHJ5IiwiTjJPX2RyeSIsIkNINF9kcnkiKQ0KDQpqYW5lbGFzX2JnID0gZGF0YS5mcmFtZShKYW5lbGEgPSBjKCIyMC01MCIsIjMwLTYwIiwiMzAtOTAiLCI2MC05MCIsIjYwLTEyMCIsIjE4MC0yNDAiKSwNCiAgaW5pY2lvID0gYygyMCwzMCwzMCw2MCw2MCwxODApLGZpbSA9IGMoNTAsNjAsOTAsOTAsMTIwLDI0MCkpDQoNCmF2YWxpYWNhb19iZyA9IGRwbHlyOjpiaW5kX3Jvd3MoDQogIGxhcHBseShzZXFfbGVuKG5yb3coamFuZWxhc19iZykpLCBmdW5jdGlvbihpKSB7DQogICAgaW5pID0gamFuZWxhc19iZyRpbmljaW9baV0NCiAgICBmaW0gPSBqYW5lbGFzX2JnJGZpbVtpXQ0KICAgIGRwbHlyOjpiaW5kX3Jvd3MobGFwcGx5KGdhc2VzX2JnLCBmdW5jdGlvbihnKSB7DQogICAgICAgIGJhY2tncm91bmRfcHJvYyAlPiUNCiAgICAgICAgICBkcGx5cjo6ZmlsdGVyKHRfYmFja2dyb3VuZCA+PSBpbmksdF9iYWNrZ3JvdW5kIDw9IGZpbSkgJT4lDQogICAgICAgICAgZHBseXI6Omdyb3VwX2J5KEJvdHRsZUlEKSAlPiUNCiAgICAgICAgICBkcGx5cjo6c3VtbWFyaXNlKG1lZGlhID0gbWVhbiguZGF0YVtbZ11dLG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBzZCA9IHNkKC5kYXRhW1tnXV0sbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIHNsb3BlID0gY292KHRfYmFja2dyb3VuZCwuZGF0YVtbZ11dLA0KICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gImNvbXBsZXRlLm9icyIpIC92YXIodF9iYWNrZ3JvdW5kLG5hLnJtID0gVFJVRSksLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogICAgICAgICAgZHBseXI6Om11dGF0ZShHYXMgPSBnLA0KICAgICAgICAgICAgSmFuZWxhID0gamFuZWxhc19iZyRKYW5lbGFbaV0sDQogICAgICAgICAgICAjIENvZWZpY2llbnRlIGRlIHZhcmlhw6fDo28gZGVudHJvIGRhIGphbmVsYQ0KICAgICAgICAgICAgQ1YgPSAoc2QgLyBhYnMobWVkaWEpKSAqIDEwMCwNCiAgICAgICAgICAgICMgTXVkYW7Dp2EgcmVsYXRpdmEgZXN0aW1hZGEgYW8gbG9uZ28gZGEgamFuZWxhDQogICAgICAgICAgICBEcmlmdCA9IGFicyhzbG9wZSkgKiAoZmltIC0gaW5pKSAvIGFicyhtZWRpYSkgKiAxMDApfSkpfSkpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNVTU8gREFTIEpBTkVMQVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bW9fYmcgPSBhdmFsaWFjYW9fYmcgJT4lDQogIGRwbHlyOjpncm91cF9ieShHYXMsSmFuZWxhKSAlPiUNCiAgZHBseXI6OnN1bW1hcmlzZShDVl9tZWRpYW5vID0gbWVkaWFuKENWLG5hLnJtID0gVFJVRSksDQogICAgQ1ZfUDkwID0gcXVhbnRpbGUoQ1YsMC45MCxuYS5ybSA9IFRSVUUpLA0KICAgIERyaWZ0X21lZGlhbm8gPSBtZWRpYW4oRHJpZnQsbmEucm0gPSBUUlVFKSwNCiAgICBEcmlmdF9QOTAgPSBxdWFudGlsZShEcmlmdCwwLjkwLG5hLnJtID0gVFJVRSksLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIGRwbHlyOjptdXRhdGUoSmFuZWxhID0gZmFjdG9yKEphbmVsYSxsZXZlbHMgPSBqYW5lbGFzX2JnJEphbmVsYSkpICU+JQ0KICBkcGx5cjo6YXJyYW5nZShHYXMsSmFuZWxhKQ0KcHJpbnQocmVzdW1vX2JnKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGSUdVUkEgUzUgLSBDT01QQVJBw4fDg08gREFTIEpBTkVMQVMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvc19maWdfUzUgPSByZXN1bW9fYmcgJT4lIGRwbHlyOjpzZWxlY3QoDQogIEdhcyxKYW5lbGEsQ1ZfUDkwLERyaWZ0X1A5MCkgJT4lDQogIHRpZHlyOjpwaXZvdF9sb25nZXIoY29scyA9IGMoQ1ZfUDkwLERyaWZ0X1A5MCksDQogICAgbmFtZXNfdG8gPSAiTWV0cmljYSIsdmFsdWVzX3RvID0gIlZhbG9yIikgJT4lDQogIGRwbHlyOjptdXRhdGUoR2FzID0gZHBseXI6OnJlY29kZSgNCiAgICAgIEdhcywiQ0g0X2RyeSIgPSAiQ0g0IChwcG0pIiwiQ08yX2RyeSIgPSAiQ08yIChwcG0pIiwiTjJPX2RyeSIgPSAiTjJPIChwcG0pIiksDQogICAgTWV0cmljYSA9IGRwbHlyOjpyZWNvZGUoTWV0cmljYSwiQ1ZfUDkwIiA9ICJDViBQOTAgKCUpIiwiRHJpZnRfUDkwIiA9ICJEcmlmdCBQOTAgKCUpIikpDQoNCmZpZ19TNSA9IGdncGxvdChkYWRvc19maWdfUzUsYWVzKHggPSBKYW5lbGEseSA9IFZhbG9yLGdyb3VwID0gR2FzKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDIpICsNCiAgZmFjZXRfZ3JpZChNZXRyaWNhIH4gR2FzLHNjYWxlcyA9ICJmcmVlX3kiKSArDQogIGxhYnMoeCA9ICJCYWNrZ3JvdW5kIHdpbmRvdyAocykiLHkgPSAiVmFsdWUgKCUpIikgKw0KICB0aGVtZV9idygpICsgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdCA9IDEpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIixoanVzdCA9IDAuNSkpDQpmaWdfUzUNCg0KZ2dzYXZlKCJGaWd1cmUgUzUucG5nIixmaWdfUzUsd2lkdGggPSAxMCxoZWlnaHQgPSA2LGRwaSA9IDQwMCxiZyA9ICJ3aGl0ZSIpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBCQUNLR1JPVU5EIEZJTkFMOiA2MC05MCBzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KYmFja2dyb3VuZF9lc3RhdmVsID0gYmFja2dyb3VuZF9wcm9jICU+JQ0KICBkcGx5cjo6ZmlsdGVyKHRfYmFja2dyb3VuZCA+PSA2MCx0X2JhY2tncm91bmQgPD0gOTApDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT05DRU5UUkHDh8OVRVMgTcOJRElBUyBETyBCQUNLR1JPVU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbWVkaWFzX2JhY2tncm91bmQgPSBiYWNrZ3JvdW5kX2VzdGF2ZWwgJT4lDQogIGRwbHlyOjpncm91cF9ieShMZWl0dXJhLEJvdHRsZSkgJT4lDQogIGRwbHlyOjpzdW1tYXJpc2UoDQogICAgQ08yX2JnID0gbWVhbihDTzJfZHJ5LG5hLnJtID0gVFJVRSksDQogICAgTjJPX2JnID0gbWVhbihOMk9fZHJ5LG5hLnJtID0gVFJVRSksDQogICAgQ0g0X2JnID0gbWVhbihDSDRfZHJ5LG5hLnJtID0gVFJVRSksDQogICAgIyBNYW50aWRvIGFwZW5hcyBjb21vIGNvbnRyb2xlIGRlIHF1YWxpZGFkZQ0KICAgIEgyT19iZyA9IG1lYW4oSDJPLG5hLnJtID0gVFJVRSksDQogICAgbl9vYnNfYmcgPSBkcGx5cjo6bigpLC5ncm91cHMgPSAiZHJvcCIpDQpucm93KG1lZGlhc19iYWNrZ3JvdW5kKQ0KVmlldyhtZWRpYXNfYmFja2dyb3VuZCkNCmBgYA0KDQoqKioNCioqKg0KIyAqKjQgLSBDYWxjdWxhciBlbWlzc8OjbyBlIG5vcm1hbGl6YXIgcG9yIGcgZGUgc29sbyBzZWNvKioNCioqKg0KKioqDQpgYGB7cn0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBKVU5UQVIgTEVJVFVSQSBFIEJBQ0tHUk9VTkQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpkYWRvc19mbHV4byA9IG1lZGlhc19sZWl0dXJhcyAlPiUNCiAgZHBseXI6OmxlZnRfam9pbihtZWRpYXNfYmFja2dyb3VuZCxieSA9IGMoIkxlaXR1cmEiLCAiQm90dGxlIikpDQoNCiMgQ29uZmVyaXIgc2UgdG9kb3Mgb3MgZnJhc2NvcyByZWNlYmVyYW0gYmFja2dyb3VuZA0KbnJvdyhkYWRvc19mbHV4bykNCmNvbFN1bXMoaXMubmEoZGFkb3NfZmx1eG9bLCBjKCJDTzJfYmciLCJOMk9fYmciLCJDSDRfYmciKV0pKQ0KVmlldyhkYWRvc19mbHV4bykNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09OU1RBTlRFUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNClIgPSAwLjA4MjA1NyAgICAgICAgIyBMIGF0bSBtb2wtMSBLLTENClAgPSAwLjkyNyAgICAgICAgICAgIyBhdG0gLSBlc3RpbWFkYSBwYXJhIGFsdGl0dWRlIGRlIDYzMyBtDQpWaCA9IDAuNzAwICAgICAgICAgICMgTCAtIHZvbHVtZSBkbyBoZWFkc3BhY2UNCnRlbXBvID0gNCAgICAgICAgICAgIyBtaW4gLSBwZXLDrW9kbyBkZSBmZWNoYW1lbnRvIGRvIGZyYXNjbw0KTU0uQ0g0ID0gMTYuMDQgICAgICAjIGcgbW9sLTENCk1NLk4yTyA9IDQ0LjAxMyAgICAgIyBnIG1vbC0xDQpNTS5DTzIgPSA0NC4wMDk1ICAgICMgZyBtb2wtMQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09SUklHSVIgUEVMTyBCQUNLR1JPVU5EICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGFkb3NfZmx1eG8gPSBkYWRvc19mbHV4byAlPiUgZHBseXI6Om11dGF0ZSgNCiAgICAjIFRlbXBlcmF0dXJhIGRvIGhlYWRzcGFjZSBlbSBLZWx2aW4NCiAgICBUX0sgPSBUZW1wZXJhdHVyYSArIDI3My4xNSwNCiAgICAjIERpZmVyZW7Dp2EgZW50cmUgY29uY2VudHJhw6fDo28gZG8gZnJhc2NvIGUgYXIgYW1iaWVudGUNCiAgICBEZWx0YV9DSDQgPSBDSDQgLSBDSDRfYmcsDQogICAgRGVsdGFfTjJPID0gTjJPIC0gTjJPX2JnLA0KICAgIERlbHRhX0NPMiA9IENPMiAtIENPMl9iZykNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1BU1NBIEFDVU1VTEFEQSBFTSA0IE1JTiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmRhZG9zX2ZsdXhvID0gZGFkb3NfZmx1eG8gJT4lIGRwbHlyOjptdXRhdGUoDQogICAgIyBNYXNzYSBhY3VtdWxhZGEgbm8gaGVhZHNwYWNlIGR1cmFudGUgb3MgNCBtaW4gKMK1ZykNCiAgICBDSDRfdWdfNG1pbiA9IERlbHRhX0NINCAqIFZoICogTU0uQ0g0ICogUCAvIChSICogVF9LKSwNCiAgICBOMk9fdWdfNG1pbiA9IERlbHRhX04yTyAqIFZoICogTU0uTjJPICogUCAvIChSICogVF9LKSwNCiAgICBDTzJfdWdfNG1pbiA9IERlbHRhX0NPMiAqIFZoICogTU0uQ08yICogUCAvIChSICogVF9LKSkNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5PUk1BTElaQVIgUE9SIFNPTE8gU0VDTyBFIFRFTVBPICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGFkb3NfZmx1eG8gPSBkYWRvc19mbHV4byAlPiUgZHBseXI6Om11dGF0ZSgNCiAgICAjIMK1ZyBkZSBnw6FzIGctMSBkZSBzb2xvIHNlY28gaC0xDQogICAgRW1pc3Nhb19DSDRfdWdfZ19oID0gQ0g0X3VnXzRtaW4gKiAoNjAgLyB0ZW1wbykgLyBQZXNvLnNvbG8sDQogICAgRW1pc3Nhb19OMk9fdWdfZ19oID0gTjJPX3VnXzRtaW4gKiAoNjAgLyB0ZW1wbykgLyBQZXNvLnNvbG8sDQogICAgRW1pc3Nhb19DTzJfdWdfZ19oID0gQ08yX3VnXzRtaW4gKiAoNjAgLyB0ZW1wbykgLyBQZXNvLnNvbG8pDQpWaWV3KGRhZG9zX2ZsdXhvKQ0KYGBgDQoqKioNCioqKg0KIyAqKjUgLSBDYWxjdWxhciBlbWlzc8O1ZXMgYWN1bXVsYWRhcyoqDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSURFTlRJRklDQVIgT1MgRElBUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmRpYXNfbGVpdHVyYSA9IGMoMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCkNCmRhZG9zX2FjdW11bG8gPSBkYWRvc19mbHV4byAlPiUNCiAgZHBseXI6Om11dGF0ZShEaWEgPSBkaWFzX2xlaXR1cmFbTGVpdHVyYV0pICU+JQ0KICBkcGx5cjo6YXJyYW5nZShCb3R0bGUsRGlhKQ0KVmlldyhkYWRvc19hY3VtdWxvKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDQUxDVUxBUiBFTUlTU8OVRVMgQUNVTVVMQURBUyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVtaXNzb2VzX2FjdW11bGFkYXMgPSBkYWRvc19hY3VtdWxvICU+JQ0KICBkcGx5cjo6Z3JvdXBfYnkoQm90dGxlLEFicmV2aWFjYW8sQmxvY28sUmVwKSAlPiUNCiAgZHBseXI6OmFycmFuZ2UoRGlhLCAuYnlfZ3JvdXAgPSBUUlVFKSAlPiUNCiAgZHBseXI6OnN1bW1hcmlzZSgNCiAgICBDSDRfYWN1bXVsYWRvX3VnX2cgPXN1bSgoDQogICAgICBFbWlzc2FvX0NINF91Z19nX2grZHBseXI6OmxlYWQoRW1pc3Nhb19DSDRfdWdfZ19oKSkvMiooZHBseXI6OmxlYWQoRGlhKS1EaWEpKjI0LG5hLnJtID0gVFJVRSksDQogICAgTjJPX2FjdW11bGFkb191Z19nID1zdW0oKA0KICAgICAgRW1pc3Nhb19OMk9fdWdfZ19oK2RwbHlyOjpsZWFkKEVtaXNzYW9fTjJPX3VnX2dfaCkpLzIqKGRwbHlyOjpsZWFkKERpYSktRGlhKSoyNCxuYS5ybSA9IFRSVUUpLA0KICAgIENPMl9hY3VtdWxhZG9fdWdfZyA9c3VtKCgNCiAgICAgIEVtaXNzYW9fQ08yX3VnX2dfaCtkcGx5cjo6bGVhZChFbWlzc2FvX0NPMl91Z19nX2gpKS8yKihkcGx5cjo6bGVhZChEaWEpLURpYSkqMjQsbmEucm0gPSBUUlVFKSwuZ3JvdXBzID0gImRyb3AiKQ0KVmlldyhlbWlzc29lc19hY3VtdWxhZGFzKQ0KYGBgDQoNCioqKg0KKioqDQojICoqNSAtIEFuw6FsaXNlIGVzdGF0w61zdGljYSoqIA0KKioqDQoqKioNCiMjIF8qKjYuMSAtIERpbsOibWljYSB0ZW1wb3JhbCBkYXMgZW1pc3PDtWVzKipfDQoqKioNCioqKg0KIyMjIF8qKjYuMS4xIC0gTU9ERUxPUyBDQU5ESURBVE9TKipfDQoqKioNCioqKg0KYGBge3J9DQpkYWRvc19hY3VtdWxvJEFicmV2aWFjYW89YXMuZmFjdG9yKGRhZG9zX2FjdW11bG8kQWJyZXZpYWNhbykNCmRhZG9zX2FjdW11bG8kRGlhPWFzLmZhY3RvcihkYWRvc19hY3VtdWxvJERpYSkNCmRhZG9zX2FjdW11bG8kQmxvY289YXMuZmFjdG9yKGRhZG9zX2FjdW11bG8kQmxvY28pDQpzdHIoZGFkb3NfYWN1bXVsbykNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENPMiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkobG1lclRlc3QpDQojIFNlbSBibG9jbyBlIHNlbSBlZmVpdG8gYWxlYXTDs3Jpbw0KbW9kMSA9IGxtKEVtaXNzYW9fQ08yX3VnX2dfaCB+IEFicmV2aWFjYW8gKiBEaWEsZGF0YSA9IGRhZG9zX2FjdW11bG8pDQojIENvbSBibG9jbw0KbW9kMiA9IGxtKEVtaXNzYW9fQ08yX3VnX2dfaCB+IEFicmV2aWFjYW8gKiBEaWEgKyBCbG9jbyxkYXRhID0gZGFkb3NfYWN1bXVsbykNCiMgQ29tIEJvdHRsZSBjb21vIGVmZWl0byBhbGVhdMOzcmlvDQptb2QzID0gbG1lcihFbWlzc2FvX0NPMl91Z19nX2ggfiBBYnJldmlhY2FvICogRGlhICsgKDEgfCBCb3R0bGUpLGRhdGEgPSBkYWRvc19hY3VtdWxvLFJFTUwgPSBGQUxTRSkNCiMgQ29tIGJsb2NvICsgQm90dGxlDQptb2Q0ID0gbG1lcihFbWlzc2FvX0NPMl91Z19nX2h+QWJyZXZpYWNhbyogRGlhICsgQmxvY28gKyAoMXxCb3R0bGUpLCBkYXRhID0gZGFkb3NfYWN1bXVsbyxSRU1MID0gRkFMU0UpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01QQVJBUiBNT0RFTE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQUlDKG1vZDEsIG1vZDIsIG1vZDMsIG1vZDQpDQpCSUMobW9kMSwgbW9kMiwgbW9kMywgbW9kNCkNClZhckNvcnIobW9kMykNClZhckNvcnIobW9kNCkNCmlzU2luZ3VsYXIobW9kMykNCmlzU2luZ3VsYXIobW9kNCkNCiMgUmVzdWx0YWRvOiBtb2QxIMOpIG1haXMgc2ltcGxlcywgY29tIG1lbm9yIEFJQyBlIEJJQywgbW9kMiBlIG1vZDMgcGlvcm91IEFJQy9CSUMgZSBtb2Q0IMOpIHNpbmd1bGFyLg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTU9ERUxPIEZJTkFMIC0gQ08yICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbW9kX0NPMiA9IG1vZDENCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ0g0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBTZW0gYmxvY28gZSBzZW0gZWZlaXRvIGFsZWF0w7NyaW8NCm1vZDEgPSBsbShFbWlzc2FvX0NINF91Z19nX2ggfiBBYnJldmlhY2FvICogRGlhLGRhdGEgPSBkYWRvc19hY3VtdWxvKQ0KIyBDb20gYmxvY28NCm1vZDIgPSBsbShFbWlzc2FvX0NINF91Z19nX2ggfiBBYnJldmlhY2FvICogRGlhICsgQmxvY28sZGF0YSA9IGRhZG9zX2FjdW11bG8pDQojIENvbSBCb3R0bGUgY29tbyBlZmVpdG8gYWxlYXTDs3Jpbw0KbW9kMyA9IGxtZXIoRW1pc3Nhb19DSDRfdWdfZ19oIH4gQWJyZXZpYWNhbyAqIERpYSArICgxIHwgQm90dGxlKSxkYXRhID0gZGFkb3NfYWN1bXVsbyxSRU1MID0gRkFMU0UpDQojIENvbSBibG9jbyArIEJvdHRsZQ0KbW9kNCA9IGxtZXIoRW1pc3Nhb19DSDRfdWdfZ19ofkFicmV2aWFjYW8gKiBEaWEgKyBCbG9jbyArICgxfEJvdHRsZSksIGRhdGEgPSBkYWRvc19hY3VtdWxvLCBSRU1MID0gRkFMU0UpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01QQVJBUiBNT0RFTE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQUlDKG1vZDEsIG1vZDIsIG1vZDMsIG1vZDQpDQpCSUMobW9kMSwgbW9kMiwgbW9kMywgbW9kNCkNClZhckNvcnIobW9kMykNClZhckNvcnIobW9kNCkNCmlzU2luZ3VsYXIobW9kMykNCmlzU2luZ3VsYXIobW9kNCkNCiMgUmVzdWx0YWRvOiBNZXNtYSBjb2lzYSBwYXJhIG1ldGFubw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTU9ERUxPIEZJTkFMIC0gQ0g0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbW9kX0NINCA9IG1vZDENCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTjJPICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBTZW0gYmxvY28gZSBzZW0gZWZlaXRvIGFsZWF0w7NyaW8NCm1vZDEgPSBsbShFbWlzc2FvX04yT191Z19nX2ggfiBBYnJldmlhY2FvICogRGlhLGRhdGEgPSBkYWRvc19hY3VtdWxvKQ0KIyBDb20gYmxvY28NCm1vZDIgPSBsbShFbWlzc2FvX04yT191Z19nX2ggfiBBYnJldmlhY2FvICogRGlhICsgQmxvY28sIGRhdGEgPSBkYWRvc19hY3VtdWxvKQ0KIyBDb20gQm90dGxlIGNvbW8gZWZlaXRvIGFsZWF0w7NyaW8NCm1vZDMgPSBsbWVyKEVtaXNzYW9fTjJPX3VnX2dfaCB+IEFicmV2aWFjYW8gKiBEaWEgKyAoMSB8IEJvdHRsZSksZGF0YSA9IGRhZG9zX2FjdW11bG8sUkVNTCA9IEZBTFNFKQ0KIyBDb20gYmxvY28gKyBCb3R0bGUNCm1vZDQgPSBsbWVyKEVtaXNzYW9fTjJPX3VnX2dfaH5BYnJldmlhY2FvICogRGlhICsgQmxvY28gKyAoMXxCb3R0bGUpLCBkYXRhID0gZGFkb3NfYWN1bXVsbyxSRU1MID0gRkFMU0UpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01QQVJBUiBNT0RFTE9TICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQUlDKG1vZDEsIG1vZDIsIG1vZDMsIG1vZDQpDQpCSUMobW9kMSwgbW9kMiwgbW9kMywgbW9kNCkNClZhckNvcnIobW9kMykNClZhckNvcnIobW9kNCkNCmlzU2luZ3VsYXIobW9kMykNCmlzU2luZ3VsYXIobW9kNCkNCiMgUmVzdWx0YWRvOiBNZXNtYSBjb2lzYSBwYXJhIE4yTw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTU9ERUxPIEZJTkFMIC0gTjJPICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbW9kX04yTyA9IG1vZDENCmBgYA0KKioqDQoqKioNCiMjIyBfKio2LjEuMiAtIFByZXNzdXBvc3RvcyoqXw0KKioqDQoqKioNCmBgYHtyfQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENPMiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMgR3LDoWZpY28gZGUgcmVzw61kdW9zDQpwbG90KGZpdHRlZChtb2RfQ08yKSwgcmVzaWQobW9kX0NPMikseGxhYiA9ICJGaXR0ZWQgdmFsdWVzIix5bGFiID0gIlJlc2lkdWFscyIpDQojIE5vcm1hbGlkYWRlIGRvcyByZXPDrWR1b3MNCnFxbm9ybShyZXNpZChtb2RfQ08yKSkNCnNoYXBpcm8udGVzdChyZXNpZChtb2RfQ08yKSkNCiNSQUlaIFFVQURSQURBIA0KZGFkb3NfYWN1bXVsbyRDTzJfc3FydCA9IHNxcnQoZGFkb3NfYWN1bXVsbyRFbWlzc2FvX0NPMl91Z19nX2gpDQptb2RfQ08yX3NxcnQgPSBsbShDTzJfc3FydCB+IEFicmV2aWFjYW8gKiBEaWEsZGF0YSA9IGRhZG9zX2FjdW11bG8pDQpxcW5vcm0ocmVzaWQobW9kX0NPMl9zcXJ0KSkNCnNoYXBpcm8udGVzdChyZXNpZChtb2RfQ08yX3NxcnQpKQ0KI0xPRw0KZGFkb3NfYWN1bXVsbyRDTzJfbG9nID0gbG9nKGRhZG9zX2FjdW11bG8kRW1pc3Nhb19DTzJfdWdfZ19oKQ0KbW9kX0NPMl9sb2cgPSBsbShDTzJfbG9nIH4gQWJyZXZpYWNhbyAqIERpYSxkYXRhID0gZGFkb3NfYWN1bXVsbykNCnFxbm9ybShyZXNpZChtb2RfQ08yX2xvZykpDQpzaGFwaXJvLnRlc3QocmVzaWQobW9kX0NPMl9sb2cpKQ0KI1Jlc3VsdGFkbzogTE9HIGZ1bmNpb25vdQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ0g0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBHcsOhZmljbyBkZSByZXPDrWR1b3MNCnBsb3QoZml0dGVkKG1vZF9DSDQpLCByZXNpZChtb2RfQ0g0KSx4bGFiID0gIkZpdHRlZCB2YWx1ZXMiLHlsYWIgPSAiUmVzaWR1YWxzIikNCiMgTm9ybWFsaWRhZGUgZG9zIHJlc8OtZHVvcw0KcXFub3JtKHJlc2lkKG1vZF9DSDQpKQ0Kc2hhcGlyby50ZXN0KHJlc2lkKG1vZF9DSDQpKQ0KI1JBSVogUVVBRFJBREEgDQpkYWRvc19hY3VtdWxvJENINF9zcXJ0ID0gc3FydChkYWRvc19hY3VtdWxvJEVtaXNzYW9fQ0g0X3VnX2dfaCkNCm1vZF9DSDRfc3FydCA9IGxtKENINF9zcXJ0IH4gQWJyZXZpYWNhbyAqIERpYSxkYXRhID0gZGFkb3NfYWN1bXVsbykNCnFxbm9ybShyZXNpZChtb2RfQ0g0X3NxcnQpKQ0Kc2hhcGlyby50ZXN0KHJlc2lkKG1vZF9DSDRfc3FydCkpDQojTE9HDQpkYWRvc19hY3VtdWxvJENINF9sb2cgPSBsb2coZGFkb3NfYWN1bXVsbyRFbWlzc2FvX0NINF91Z19nX2gpDQptb2RfQ0g0X2xvZyA9IGxtKENINF9sb2cgfiBBYnJldmlhY2FvICogRGlhLGRhdGEgPSBkYWRvc19hY3VtdWxvKQ0KcXFub3JtKHJlc2lkKG1vZF9DSDRfbG9nKSkNCnNoYXBpcm8udGVzdChyZXNpZChtb2RfQ0g0X2xvZykpDQojUmVzdWx0YWRvOiBMT0cgZnVuY2lvbm91DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBOMk8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIEdyw6FmaWNvIGRlIHJlc8OtZHVvcw0KcGxvdChmaXR0ZWQobW9kX04yTyksIHJlc2lkKG1vZF9OMk8pLHhsYWIgPSAiRml0dGVkIHZhbHVlcyIseWxhYiA9ICJSZXNpZHVhbHMiKQ0KIyBOb3JtYWxpZGFkZSBkb3MgcmVzw61kdW9zDQpxcW5vcm0ocmVzaWQobW9kX04yTykpDQpzaGFwaXJvLnRlc3QocmVzaWQobW9kX04yTykpDQojUkFJWiBRVUFEUkFEQSANCmRhZG9zX2FjdW11bG8kTjJPX3NxcnQgPSBzcXJ0KGRhZG9zX2FjdW11bG8kRW1pc3Nhb19OMk9fdWdfZ19oKQ0KbW9kX04yT19zcXJ0ID0gbG0oTjJPX3NxcnQgfiBBYnJldmlhY2FvICogRGlhLGRhdGEgPSBkYWRvc19hY3VtdWxvKQ0KcXFub3JtKHJlc2lkKG1vZF9OMk9fc3FydCkpDQpzaGFwaXJvLnRlc3QocmVzaWQobW9kX04yT19zcXJ0KSkNCiNMT0cNCmRhZG9zX2FjdW11bG8kTjJPX2xvZyA9IGxvZyhkYWRvc19hY3VtdWxvJEVtaXNzYW9fTjJPX3VnX2dfaCkNCm1vZF9OMk9fbG9nID0gbG0oTjJPX2xvZyB+IEFicmV2aWFjYW8gKiBEaWEsZGF0YSA9IGRhZG9zX2FjdW11bG8pDQpxcW5vcm0ocmVzaWQobW9kX04yT19sb2cpKQ0Kc2hhcGlyby50ZXN0KHJlc2lkKG1vZF9OMk9fbG9nKSkNCiNSZXN1bHRhZG86IExPRyBmdW5jaW9ub3UNCg0KVmlldyhkYWRvc19hY3VtdWxvKQ0KYGBgDQoqKioNCioqKg0KIyMjIF8qKjYuMS4zIC0gQU5PVkEsIFRVS0VZIEUgTcOJRElBUyoqXw0KKioqDQoqKioNCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZW1tZWFucykNCmxpYnJhcnkobXVsdGNvbXApDQoNCm1hcGFfdmFycyA9IGRhdGEuZnJhbWUob3JpZ2luYWwgPSBjKCJFbWlzc2FvX0NPMl91Z19nX2giLCJFbWlzc2FvX04yT191Z19nX2giLCJFbWlzc2FvX0NINF91Z19nX2giKSwNCiAgbW9kZWxvID0gYygiQ08yX2xvZyIsIk4yT19sb2ciLCJDSDRfbG9nIikpDQoNCnJlc3VsdGFkb3MgPSBsaXN0KCkNCmZvcihpIGluIDE6bnJvdyhtYXBhX3ZhcnMpKXsNCiAgdmFyX29yaWcgPSBtYXBhX3ZhcnMkb3JpZ2luYWxbaV0NCiAgdmFyX21vZCA9IG1hcGFfdmFycyRtb2RlbG9baV0NCiAgY2F0KCJcblxuIyMjIyMjIyMjIyMjIyMjIyBWYXJpw6F2ZWw6IiwgdmFyX29yaWcsICIjIyMjIyMjIyMjIyMjIyMjXG4iKQ0KICAjIE1vZGVsbw0KICBmb3JtdWxhX21vZCA9IGFzLmZvcm11bGEocGFzdGUwKHZhcl9tb2QsICIgfiBBYnJldmlhY2FvICogRGlhIikpDQogIG1vZCA9IGxtKGZvcm11bGFfbW9kLCBkYXRhID0gZGFkb3NfYWN1bXVsbykNCiAgIyBBTk9WQQ0KICBjYXQoIlxuQU5PVkE6XG4iKQ0KICBwcmludChhbm92YShtb2QpKQ0KICAjIE3DqWRpYXMgZXN0aW1hZGFzDQogIGVtID0gZW1tZWFucyhtb2QsIH4gQWJyZXZpYWNhbyB8IERpYSkNCiAgIyBUdWtleQ0KICBjYXQoIlxuVGVzdGUgZGUgVHVrZXk6XG4iKQ0KICBwcmludChwYWlycyhlbSwgYWRqdXN0ID0gInR1a2V5IikpDQogICMgTGV0cmFzDQogIGdydXBvcyA9IG11bHRjb21wOjpjbGQoZW0sYWxwaGEgPSAwLjA1LExldHRlcnMgPSBsZXR0ZXJzLHNvcnQgPSBUUlVFLGRlY3JlYXNpbmcgPSBGQUxTRSkNCiAgbGV0cmFzID0gZGF0YS5mcmFtZShEaWEgPSBncnVwb3MkRGlhLEFicmV2aWFjYW8gPSBncnVwb3MkQWJyZXZpYWNhbyxsZXRyYSA9IHRyaW13cyhncnVwb3MkLmdyb3VwKSkNCiAgIyBNw6lkaWEgZSBTRSBkb3MgZGFkb3Mgb3JpZ2luYWlzDQogIG1lZGlhcyA9IGRhZG9zX2FjdW11bG8gJT4lDQogICAgZ3JvdXBfYnkoRGlhLCBBYnJldmlhY2FvKSAlPiUNCiAgICBzdW1tYXJpc2UobWVkaWEgPSBtZWFuKC5kYXRhW1t2YXJfb3JpZ11dLCBuYS5ybSA9IFRSVUUpLA0KICAgICAgc2UgPSBzZCguZGF0YVtbdmFyX29yaWddXSwgbmEucm0gPSBUUlVFKS9zcXJ0KHN1bSghaXMubmEoLmRhdGFbW3Zhcl9vcmlnXV0pKSksLmdyb3VwcyA9ICJkcm9wIikNCiAgIyBUYWJlbGENCiAgdGFiZWxhID0gbWVkaWFzICU+JQ0KICAgIGxlZnRfam9pbihsZXRyYXMsIGJ5ID0gYygiRGlhIiwgIkFicmV2aWFjYW8iKSkgJT4lDQogICAgZHBseXI6Om11dGF0ZSh2YXJpYXZlbCA9IHZhcl9vcmlnKSAlPiUNCiAgICBkcGx5cjo6c2VsZWN0KHZhcmlhdmVsLERpYSxUcmF0YW1lbnRvID0gQWJyZXZpYWNhbyxtZWRpYSxzZSxsZXRyYSkNCiAgcmVzdWx0YWRvc1tbdmFyX29yaWddXSA9IHRhYmVsYX0NCg0KIyBUYWJlbGEgZmluYWwNCnJlc3VsdGFkb19maW5hbCA9IGRvLmNhbGwocmJpbmQsIHJlc3VsdGFkb3MpDQpyb3duYW1lcyhyZXN1bHRhZG9fZmluYWwpID0gTlVMTA0KVmlldyhyZXN1bHRhZG9fZmluYWwpDQpgYGANCioqKg0KKioqDQojIyMgXyoqNi4xLjQgLSBHUsOBRklDT1MgVEVNUE9SQUlTKipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR1LDgUZJQ08gQ08yICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShlbW1lYW5zKQ0KDQojIERpYXMgZW0gcXVlIGhvdXZlIGRpZmVyZW7Dp2EgZW50cmUgdHJhdGFtZW50b3MgcGVsbyBUdWtleQ0KZGlhc19zaWdfQ08yID0gcGFpcnMoZW1tZWFucyhtb2RfQ08yX2xvZywgfiBBYnJldmlhY2FvIHwgRGlhKSxhZGp1c3QgPSAidHVrZXkiKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpJT4lDQogIGdyb3VwX2J5KERpYSkgJT4lDQogIHN1bW1hcmlzZShzaWduaWZpY2F0aXZvID0gYW55KHAudmFsdWUgPCAwLjA1KSwuZ3JvdXBzID0gImRyb3AiKQ0KIyBQcmVwYXJhciBkYWRvcw0KZGFkb3NfQ08yID0gcmVzdWx0YWRvX2ZpbmFsICU+JQ0KICBmaWx0ZXIodmFyaWF2ZWwgPT0gIkVtaXNzYW9fQ08yX3VnX2dfaCIpICU+JQ0KICBsZWZ0X2pvaW4oZGlhc19zaWdfQ08yLCBieSA9ICJEaWEiKSAlPiUNCiAgbXV0YXRlKERpYSA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKERpYSkpLA0KICAgIFRyYXRhbWVudG8gPSBmYWN0b3IoVHJhdGFtZW50byxsZXZlbHMgPSBjKCJDT04iLCAiQU8zIiwgIkZPRyIsICJGT0dPMyIsICJOTUlOIikpLA0KICAgICMgRGVzbG9jYW1lbnRvIGhvcml6b250YWwgZGUgY2FkYSB0cmF0YW1lbnRvDQogICAgZGVzbG9jYW1lbnRvID0gY2FzZV93aGVuKA0KICAgICAgVHJhdGFtZW50byA9PSAiQ09OIiAgIH4gLTAuNTAsDQogICAgICBUcmF0YW1lbnRvID09ICJBTzMiICAgfiAtMC4yNSwNCiAgICAgIFRyYXRhbWVudG8gPT0gIkZPRyIgICB+ICAwLjAwLA0KICAgICAgVHJhdGFtZW50byA9PSAiRk9HTzMiIH4gIDAuMjUsDQogICAgICBUcmF0YW1lbnRvID09ICJOTUlOIiAgfiAgMC41MCksDQogICAgeF9wbG90ID0gRGlhICsgZGVzbG9jYW1lbnRvLA0KICAgICMgTGV0cmFzIHNvbWVudGUgcXVhbmRvIG8gVHVrZXkgZGV0ZWN0b3UgZGlmZXJlbsOnYSBubyBkaWENCiAgICBsZXRyYV9wbG90ID0gaWZlbHNlKHNpZ25pZmljYXRpdm8sIGxldHJhLCAiIiksDQogICAgIyBNYWlvciBhZmFzdGFtZW50byB2ZXJ0aWNhbCBkYXMgbGV0cmFzDQogICAgeV9sZXRyYSA9IG1lZGlhICsgc2UgKyA1KQ0KDQphbm92YShtb2RfQ08yX2xvZykNCg0KIyBQTE9UDQpDTzI9Z2dwbG90KGRhZG9zX0NPMixhZXMoeCA9IHhfcGxvdCx5ID0gbWVkaWEsY29sb3IgPSBUcmF0YW1lbnRvLGdyb3VwID0gVHJhdGFtZW50bykpICsNCiAgZ2VvbV9saW5lKGxpbmV3aWR0aCA9IDAuOCkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVkaWEgLSBzZSx5bWF4ID0gbWVkaWEgKyBzZSksd2lkdGggPSAwLjEyLGxpbmV3aWR0aCA9IDAuNikgKw0KICBnZW9tX3BvaW50KHNpemUgPSAyLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyh5ID0geV9sZXRyYSxsYWJlbCA9IGxldHJhX3Bsb3QpLHNpemUgPSA0LGZvbnRmYWNlID0gImJvbGQiLHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgYW5ub3RhdGUoImxhYmVsIix4ID0gMjYuNSx5ID0gMjUwLGxhYmVsID0gIlRyZWF0bWVudDogUCA8IDAuMDFcbkRheTogUCA8IDAuMDFcblRyZWF0bWVudCDDlyBEYXk6IFAgPSAwLjAzIiwNCiAgICBoanVzdCA9IDAsdmp1c3QgPSAwLjgsc2l6ZSA9IDMuNSxsYWJlbC5zaXplID0gMC41LGxhYmVsLnBhZGRpbmc9dW5pdCgwLjI1LCJsaW5lcyIpLGZpbGw9ICJ3aGl0ZSIsY29sb3I9ImJsYWNrIikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiQ09OIj0icmVkNCIsIkFPMyI9IiMyNDc0QTYiLCJGT0ciPSIjRDg5QjAwIiwiRk9HTzMiPSIjOEM2NTE1IiwiTk1JTiI9ImJsYWNrIiksDQogICAgYnJlYWtzID0gYygiQ09OIiwgIkFPMyIsICJGT0ciLCAiRk9HTzMiLCAiTk1JTiIpKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQpLGxhYmVscyA9IGMoMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMjYwKSxicmVha3MgPSBzZXEoMCwgMjUwLCBieSA9IDUwKSxleHBhbmQgPSBleHBhbnNpb24obXVsdCA9IGMoMCwgMC4wMykpKSsNCiAgbGFicyh4ID0gIkRheXMgYWZ0ZXIgdHJlYXRtZW50IGFwcGxpY2F0aW9uIix5ID0gZXhwcmVzc2lvbihDT1syXX5lbWlzc2lvbn4obXUqZ35nXnstMX1+aF57LTF9KSksY29sb3IgPSAiVHJlYXRtZW50OiIpKw0KICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDEyKSArDQogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gYygwLjM0LCAwLjkwKSwNCiAgICAgICAgbGVnZW5kLmRpcmVjdGlvbiA9ICJob3Jpem9udGFsIiwNCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSAiYmxhY2siLCBsaW5ld2lkdGggPSAwLjUpLA0KICAgIGxlZ2VuZC5ib3guYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgY29sb3IgPSAiYmxhY2siLCBsaW5ld2lkdGggPSAwLjUpLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA3KSwNCiAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSA4LCBmYWNlID0gImJvbGQiKSkNCkNPMg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR1LDgUZJQ08gQ0g0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIERpYXMgZW0gcXVlIGhvdXZlIGRpZmVyZW7Dp2EgZW50cmUgdHJhdGFtZW50b3MgcGVsbyBUdWtleQ0KZGlhc19zaWdfQ0g0ID0gcGFpcnMoZW1tZWFucyhtb2RfQ0g0X2xvZywgfiBBYnJldmlhY2FvIHwgRGlhKSxhZGp1c3QgPSAidHVrZXkiKSAlPiUNCiAgYXMuZGF0YS5mcmFtZSgpJT4lDQogIGdyb3VwX2J5KERpYSkgJT4lDQogIHN1bW1hcmlzZShzaWduaWZpY2F0aXZvID0gYW55KHAudmFsdWUgPCAwLjA1KSwuZ3JvdXBzID0gImRyb3AiKQ0KIyBQcmVwYXJhciBkYWRvcw0KZGFkb3NfQ0g0ID0gcmVzdWx0YWRvX2ZpbmFsICU+JQ0KICBmaWx0ZXIodmFyaWF2ZWwgPT0gIkVtaXNzYW9fQ0g0X3VnX2dfaCIpICU+JQ0KICBsZWZ0X2pvaW4oZGlhc19zaWdfQ0g0LCBieSA9ICJEaWEiKSAlPiUNCiAgbXV0YXRlKERpYSA9IGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKERpYSkpLA0KICAgIFRyYXRhbWVudG8gPSBmYWN0b3IoVHJhdGFtZW50byxsZXZlbHMgPSBjKCJDT04iLCAiQU8zIiwgIkZPRyIsICJGT0dPMyIsICJOTUlOIikpLA0KICAgICMgRGVzbG9jYW1lbnRvIGhvcml6b250YWwgZGUgY2FkYSB0cmF0YW1lbnRvDQogICAgZGVzbG9jYW1lbnRvID0gY2FzZV93aGVuKA0KICAgICAgVHJhdGFtZW50byA9PSAiQ09OIiAgIH4gLTAuNTAsDQogICAgICBUcmF0YW1lbnRvID09ICJBTzMiICAgfiAtMC4yNSwNCiAgICAgIFRyYXRhbWVudG8gPT0gIkZPRyIgICB+ICAwLjAwLA0KICAgICAgVHJhdGFtZW50byA9PSAiRk9HTzMiIH4gIDAuMjUsDQogICAgICBUcmF0YW1lbnRvID09ICJOTUlOIiAgfiAgMC41MCksDQogICAgeF9wbG90ID0gRGlhICsgZGVzbG9jYW1lbnRvLA0KICAgICMgTGV0cmFzIHNvbWVudGUgcXVhbmRvIG8gVHVrZXkgZGV0ZWN0b3UgZGlmZXJlbsOnYSBubyBkaWENCiAgICBsZXRyYV9wbG90ID0gaWZlbHNlKHNpZ25pZmljYXRpdm8sIGxldHJhLCAiIiksDQogICAgIyBNYWlvciBhZmFzdGFtZW50byB2ZXJ0aWNhbCBkYXMgbGV0cmFzDQogICAgeV9sZXRyYSA9IG1lZGlhICsgc2UgKyAwLjAwMDUpDQoNCmFub3ZhKG1vZF9DSDRfbG9nKQ0KDQojIFBMT1QNCkNIND1nZ3Bsb3QoZGFkb3NfQ0g0LGFlcyh4ID0geF9wbG90LHkgPSBtZWRpYSxjb2xvciA9IFRyYXRhbWVudG8sZ3JvdXAgPSBUcmF0YW1lbnRvKSkgKw0KICBnZW9tX2xpbmUobGluZXdpZHRoID0gMC44KSArDQogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBtZWRpYSAtIHNlLHltYXggPSBtZWRpYSArIHNlKSx3aWR0aCA9IDAuMTIsbGluZXdpZHRoID0gMC42KSArDQogIGdlb21fcG9pbnQoc2l6ZSA9IDIuNykgKw0KICBnZW9tX3RleHQoYWVzKHkgPSB5X2xldHJhLGxhYmVsID0gbGV0cmFfcGxvdCksc2l6ZSA9IDQsZm9udGZhY2UgPSAiYm9sZCIsc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBhbm5vdGF0ZSgibGFiZWwiLHggPSAyNix5ID0gMC4wMDksbGFiZWwgPSAiVHJlYXRtZW50OiBQID0gMC4zNThcbkRheTogUCA8IDAuMDM2XG5UcmVhdG1lbnQgw5cgRGF5OiBQID0gMC45ODAiLA0KICAgIGhqdXN0ID0gMCx2anVzdCA9IDEsc2l6ZSA9IDMuNSxsYWJlbC5zaXplID0gMC41LGxhYmVsLnBhZGRpbmc9dW5pdCgwLjI1LCJsaW5lcyIpLGZpbGw9ICJ3aGl0ZSIsY29sb3I9ImJsYWNrIikgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiQ09OIj0icmVkNCIsIkFPMyI9IiMyNDc0QTYiLCJGT0ciPSIjRDg5QjAwIiwiRk9HTzMiPSIjOEM2NTE1IiwiTk1JTiI9ImJsYWNrIiksDQogICAgYnJlYWtzID0gYygiQ09OIiwgIkFPMyIsICJGT0ciLCAiRk9HTzMiLCAiTk1JTiIpKSArDQogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQpLGxhYmVscyA9IGMoMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoLTAuMDAxLCAwLjAwOSksYnJlYWtzID0gc2VxKC0wLjAwMSwgMC4wMDksIGJ5ID0gMC4wMDEpLGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAwLjAzKSkpKw0KICBsYWJzKHggPSAiRGF5cyBhZnRlciB0cmVhdG1lbnQgYXBwbGljYXRpb24iLHkgPSBleHByZXNzaW9uKENIIFs0XX5lbWlzc2lvbn4obXUqZ35nXnstMX1+aF57LTF9KSksY29sb3IgPSAiVHJlYXRtZW50OiIpKw0KICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDEyKSArDQogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDEyKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSBjKDAuMzQsIDAuOTApLA0KICAgICAgICBsZWdlbmQuZGlyZWN0aW9uID0gImhvcml6b250YWwiLA0KICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9ICJibGFjayIsIGxpbmV3aWR0aCA9IDAuNSksDQogICAgbGVnZW5kLmJveC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvciA9ICJibGFjayIsIGxpbmV3aWR0aCA9IDAuNSksDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDcpLA0KICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgsIGZhY2UgPSAiYm9sZCIpKQ0KQ0g0DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBHUsOBRklDTyBOMk8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgRGlhcyBlbSBxdWUgaG91dmUgZGlmZXJlbsOnYSBlbnRyZSB0cmF0YW1lbnRvcyBwZWxvIFR1a2V5DQpkaWFzX3NpZ19OMk8gPSBwYWlycyhlbW1lYW5zKG1vZF9OMk9fbG9nLCB+IEFicmV2aWFjYW8gfCBEaWEpLGFkanVzdCA9ICJ0dWtleSIpICU+JQ0KICBhcy5kYXRhLmZyYW1lKCklPiUNCiAgZ3JvdXBfYnkoRGlhKSAlPiUNCiAgc3VtbWFyaXNlKHNpZ25pZmljYXRpdm8gPSBhbnkocC52YWx1ZSA8IDAuMDUpLC5ncm91cHMgPSAiZHJvcCIpDQojIFByZXBhcmFyIGRhZG9zDQpkYWRvc19OMk8gPSByZXN1bHRhZG9fZmluYWwgJT4lDQogIGZpbHRlcih2YXJpYXZlbCA9PSAiRW1pc3Nhb19OMk9fdWdfZ19oIikgJT4lDQogIGxlZnRfam9pbihkaWFzX3NpZ19OMk8sIGJ5ID0gIkRpYSIpICU+JQ0KICBtdXRhdGUoRGlhID0gYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoRGlhKSksDQogICAgVHJhdGFtZW50byA9IGZhY3RvcihUcmF0YW1lbnRvLGxldmVscyA9IGMoIkNPTiIsICJBTzMiLCAiRk9HIiwgIkZPR08zIiwgIk5NSU4iKSksDQogICAgIyBEZXNsb2NhbWVudG8gaG9yaXpvbnRhbCBkZSBjYWRhIHRyYXRhbWVudG8NCiAgICBkZXNsb2NhbWVudG8gPSBjYXNlX3doZW4oDQogICAgICBUcmF0YW1lbnRvID09ICJDT04iICAgfiAtMC41MCwNCiAgICAgIFRyYXRhbWVudG8gPT0gIkFPMyIgICB+IC0wLjI1LA0KICAgICAgVHJhdGFtZW50byA9PSAiRk9HIiAgIH4gIDAuMDAsDQogICAgICBUcmF0YW1lbnRvID09ICJGT0dPMyIgfiAgMC4yNSwNCiAgICAgIFRyYXRhbWVudG8gPT0gIk5NSU4iICB+ICAwLjUwKSwNCiAgICB4X3Bsb3QgPSBEaWEgKyBkZXNsb2NhbWVudG8sDQogICAgIyBMZXRyYXMgc29tZW50ZSBxdWFuZG8gbyBUdWtleSBkZXRlY3RvdSBkaWZlcmVuw6dhIG5vIGRpYQ0KICAgIGxldHJhX3Bsb3QgPSBpZmVsc2Uoc2lnbmlmaWNhdGl2bywgbGV0cmEsICIiKSwNCiAgICAjIE1haW9yIGFmYXN0YW1lbnRvIHZlcnRpY2FsIGRhcyBsZXRyYXMNCiAgICB5X2xldHJhID0gbWVkaWEgKyBzZSArIDAuMDA3KQ0KDQphbm92YShtb2RfTjJPX2xvZykNCg0KIyBQTE9UDQpOMk89Z2dwbG90KGRhZG9zX04yTyxhZXMoeCA9IHhfcGxvdCx5ID0gbWVkaWEsY29sb3IgPSBUcmF0YW1lbnRvLGdyb3VwID0gVHJhdGFtZW50bykpICsNCiAgZ2VvbV9saW5lKGxpbmV3aWR0aCA9IDAuOCkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVkaWEgLSBzZSx5bWF4ID0gbWVkaWEgKyBzZSksd2lkdGggPSAwLjEyLGxpbmV3aWR0aCA9IDAuNikgKw0KICBnZW9tX3BvaW50KHNpemUgPSAyLjcpICsNCiAgZ2VvbV90ZXh0KGFlcyh5ID0geV9sZXRyYSxsYWJlbCA9IGxldHJhX3Bsb3QpLHNpemUgPSA0LGZvbnRmYWNlID0gImJvbGQiLHNob3cubGVnZW5kID0gRkFMU0UpICsNCiAgYW5ub3RhdGUoImxhYmVsIix4ID0gMjYuNSx5ID0gMC4xOCxsYWJlbCA9ICJUcmVhdG1lbnQ6IFAgPCAwLjAxXG5EYXk6IFAgPCAwLjAxXG5UcmVhdG1lbnQgw5cgRGF5OiBQIDwgMC4wMSIsDQogICAgaGp1c3QgPSAwLHZqdXN0ID0gMSxzaXplID0gMy41LGxhYmVsLnNpemUgPSAwLjUsbGFiZWwucGFkZGluZz11bml0KDAuMjUsImxpbmVzIiksZmlsbD0gIndoaXRlIixjb2xvcj0iYmxhY2siKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCJDT04iPSJyZWQ0IiwiQU8zIj0iIzI0NzRBNiIsIkZPRyI9IiNEODlCMDAiLCJGT0dPMyI9IiM4QzY1MTUiLCJOTUlOIj0iYmxhY2siKSwNCiAgICBicmVha3MgPSBjKCJDT04iLCAiQU8zIiwgIkZPRyIsICJGT0dPMyIsICJOTUlOIikpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IGMoMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCksbGFiZWxzID0gYygxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0KSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygtMC4wMDYsIDAuMTgpLGJyZWFrcz1zZXEoLTAuMDA2LCAwLjE4LCBieSA9IDAuMDMpLGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLCAwLjAzKSkpKw0KICBsYWJzKHggPSAiRGF5cyBhZnRlciB0cmVhdG1lbnQgYXBwbGljYXRpb24iLHkgPSBleHByZXNzaW9uKE5bMl0qT35lbWlzc2lvbn4obXUqZ35nXnstMX1+aF57LTF9KSksY29sb3IgPSAiVHJlYXRtZW50OiIpKw0KICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDEyKSArDQogIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIiksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC4zNCwgMC45MCksDQogICAgICAgIGxlZ2VuZC5kaXJlY3Rpb24gPSAiaG9yaXpvbnRhbCIsDQogICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gImJsYWNrIiwgbGluZXdpZHRoID0gMC41KSwNCiAgICBsZWdlbmQuYm94LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIGNvbG9yID0gImJsYWNrIiwgbGluZXdpZHRoID0gMC41KSwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNyksDQogIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCwgZmFjZSA9ICJib2xkIikpDQpOMk8NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEpVTlRBUiBHUsOBRklDT1MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpsaWJyYXJ5KHBhdGNod29yaykNCkZpZ3VyYV9nYXNlcyA9IChDSDQgLyBDTzIgLyBOMk8pICsgcGxvdF9hbm5vdGF0aW9uKHRhZ19sZXZlbHMgPSAiQSIpDQpGaWd1cmFfZ2FzZXMNCmdnc2F2ZSgiRmlndXJhIDEgLSBnYXNlcyBubyB0ZW1wby5wbmciLEZpZ3VyYV9nYXNlcywgd2lkdGggPSA4LCBoZWlnaHQgPSA5LCBkcGkgPSAzMDAsIGJnID0gIndoaXRlIikNCmBgYA0KDQoqKioNCioqKg0KIyMgXyoqNi4yIC0gRW1pc3PDtWVzIGFjdW11bGFkYXMqKl8NCioqKg0KKioqDQojIyMgXyoqNi4yLjEgLSBBTk9WQSwgVFVLRVkgRSBNw4lESUFTKipfDQoqKioNCioqKg0KYGBge3J9DQojIElkZW50aWZpY2FyIG9zIHZhbG9yZXMgb3V0bGllcnMNCmJveHBsb3QoZW1pc3NvZXNfYWN1bXVsYWRhcyRDTzJfYWN1bXVsYWRvX3VnX2cpDQpvdXRfQ08yID0gYm94cGxvdC5zdGF0cyhlbWlzc29lc19hY3VtdWxhZGFzJENPMl9hY3VtdWxhZG9fdWdfZykkb3V0DQojIE1vc3RyYXIgYXMgbGluaGFzIGNvcnJlc3BvbmRlbnRlcw0KZW1pc3NvZXNfYWN1bXVsYWRhcyAlPiUNCiAgZmlsdGVyKENPMl9hY3VtdWxhZG9fdWdfZyAlaW4lIG91dF9DTzIpICU+JQ0KICBkcGx5cjo6c2VsZWN0KEJvdHRsZSwgQWJyZXZpYWNhbywgQmxvY28sIFJlcCwgQ08yX2FjdW11bGFkb191Z19nKQ0KZW1pc3NvZXNfYWN1bXVsYWRhc19maWx0cmFkYSA9IGVtaXNzb2VzX2FjdW11bGFkYXMgJT4lDQogIGZpbHRlcighQm90dGxlICVpbiUgYygxLCAyLDcsIDIzKSkNCg0KIyBPcmRlbSBkb3MgdHJhdGFtZW50b3MNCmVtaXNzb2VzX2FjdW11bGFkYXNfZmlsdHJhZGEkQWJyZXZpYWNhbyA9IGZhY3RvcihlbWlzc29lc19hY3VtdWxhZGFzX2ZpbHRyYWRhJEFicmV2aWFjYW8sDQogIGxldmVscyA9IGMoIkNPTiIsICJBTzMiLCAiRk9HIiwgIkZPR08zIiwgIk5NSU4iKSkNCiMgVmFyacOhdmVpcw0KdmFyaWF2ZWlzID0gYygiQ0g0X2FjdW11bGFkb191Z19nIiwiQ08yX2FjdW11bGFkb191Z19nIiwiTjJPX2FjdW11bGFkb191Z19nIikNCg0KcmVzdWx0YWRvcyA9IGxpc3QoKQ0KZm9yKHZhciBpbiB2YXJpYXZlaXMpew0KICBjYXQoIlxuXG4jIyMjIyMjIyMjIyMjIyMjIFZhcmnDoXZlbDoiLCB2YXIsICIjIyMjIyMjIyMjIyMjIyMjXG4iKQ0KICAjIE1vZGVsbw0KICBmb3JtdWxhX21vZCA9IHJlZm9ybXVsYXRlKCJBYnJldmlhY2FvIiwgcmVzcG9uc2UgPSB2YXIpDQogIG1vZCA9IGFvdihmb3JtdWxhX21vZCwgZGF0YSA9IGVtaXNzb2VzX2FjdW11bGFkYXNfZmlsdHJhZGEpDQogICMgQU5PVkENCiAgY2F0KCJcbkFOT1ZBOlxuIikNCiAgcHJpbnQoc3VtbWFyeShtb2QpKQ0KICAjIE3DqWRpYXMNCiAgZW0gPSBlbW1lYW5zKG1vZCwgfiBBYnJldmlhY2FvKQ0KICAjIFR1a2V5DQogIGNhdCgiXG5UZXN0ZSBkZSBUdWtleTpcbiIpDQogIHR1a2V5ID0gcGFpcnMoZW0sIGFkanVzdCA9ICJ0dWtleSIpDQogIHByaW50KHR1a2V5KQ0KICAjIExldHJhcw0KICBncnVwb3MgPSBtdWx0Y29tcDo6Y2xkKGVtLGFscGhhID0gMC4wNSxMZXR0ZXJzID0gbGV0dGVycyxzb3J0ID0gRkFMU0UpDQogICMgU2UgbmVuaHVtIGNvbnRyYXN0ZSBmb3Igc2lnbmlmaWNhdGl2bywgcmV0aXJhciBsZXRyYXMNCiAgaWYoIWFueShhcy5kYXRhLmZyYW1lKHR1a2V5KSRwLnZhbHVlIDwgMC4wNSkpew0KICAgIGdydXBvcyQuZ3JvdXAgPSAiIn0NCg0KICAjIFRhYmVsYQ0KICB0YWJlbGEgPSBkYXRhLmZyYW1lKHZhcmlhdmVsID0gdmFyLFRyYXRhbWVudG8gPSBncnVwb3MkQWJyZXZpYWNhbywNCiAgICBtZWRpYSA9IGdydXBvcyRlbW1lYW4sc2UgPSBncnVwb3MkU0UsbGV0cmEgPSB0cmltd3MoZ3J1cG9zJC5ncm91cCkscm93Lm5hbWVzID0gTlVMTCkNCiAgY2F0KCJcbk3DqWRpYXMsIFNFIGUgbGV0cmFzOlxuIikNCiAgcHJpbnQodGFiZWxhKQ0KICByZXN1bHRhZG9zW1t2YXJdXSA9IHRhYmVsYX0NCg0KIyBUYWJlbGEgZmluYWwNCnJlc3VsdGFkb19hY3VtdWxhZG8gPSBkby5jYWxsKHJiaW5kLCByZXN1bHRhZG9zKQ0Kcm93bmFtZXMocmVzdWx0YWRvX2FjdW11bGFkbykgPSBOVUxMDQpWaWV3KHJlc3VsdGFkb19hY3VtdWxhZG8pDQpgYGANCioqKg0KKioqDQojIyMgXyoqNi4yLjIgLSBHUsOBRklDT1MgREFTIEVNSVNTw5VFUyBBQ1VNVUxBREFTKipfDQoqKioNCioqKg0KYGBge3J9DQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR1LDgUZJQ08gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyb3R1bG9zX2ZhY2V0ID0gYXNfbGFiZWxsZXIoYygiQ0g0X2FjdW11bGFkb191Z19nIiA9ICInKEEpJ35DSFs0XSIsIkNPMl9hY3VtdWxhZG9fdWdfZyIgPSAiJyhCKSd+Q09bMl0iLA0KICAgICJOMk9fYWN1bXVsYWRvX3VnX2ciID0gIicoQyknfk5bMl0qTyIpLGRlZmF1bHQgPSBsYWJlbF9wYXJzZWQpDQoNCnBfYW5vdmFfcGxvdCA9IGRhdGEuZnJhbWUodmFyaWF2ZWwgPSBjKCJDSDRfYWN1bXVsYWRvX3VnX2ciLCJDTzJfYWN1bXVsYWRvX3VnX2ciLCJOMk9fYWN1bXVsYWRvX3VnX2ciKSwNCiAgVHJhdGFtZW50byA9IGMoIk5NSU4iLCAiTk1JTiIsICJOTUlOIiksbGFiZWwgPSBjKCJpdGFsaWMoUCkgPT0gMC43NTUiLCJpdGFsaWMoUCkgPCAwLjAxIiwiaXRhbGljKFApID09IDAuMDE1IikpDQoNCnBfYWN1bXVsYWRvID0gZ2dwbG90KHJlc3VsdGFkb19hY3VtdWxhZG8sYWVzKHggPSBUcmF0YW1lbnRvLCB5ID0gbWVkaWEsIGZpbGwgPSBUcmF0YW1lbnRvKSkgKw0KICBnZW9tX2NvbCh3aWR0aCA9IDAuNzAsY29sb3IgPSAiYmxhY2siLGxpbmV3aWR0aCA9IDAuNSkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gbWVkaWEgLSBzZSx5bWF4ID0gbWVkaWEgKyBzZSksd2lkdGggPSAwLjE1LGxpbmV3aWR0aCA9IDAuNikgKw0KICBnZW9tX3RleHQoYWVzKHkgPSBtZWRpYSArIHNlLGxhYmVsID0gbGV0cmEpLHZqdXN0ID0gLTAuNixzaXplID0gNCxmb250ZmFjZSA9ICJib2xkIikgKw0KICBnZW9tX3RleHQoZGF0YSA9IHBfYW5vdmFfcGxvdCxhZXMoeCA9IFRyYXRhbWVudG8seSA9IEluZixsYWJlbCA9IGxhYmVsKSwNCiAgICBpbmhlcml0LmFlcyA9IEZBTFNFLHBhcnNlID0gVFJVRSxoanVzdCA9IDEsdmp1c3QgPSAyLHNpemUgPSA0KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoDQogICAgIkNPTiIgPSAicmVkNCIsIkFPMyIgPSAiIzI0NzRBNiIsIkZPRyIgPSAiI0Q4OUIwMCIsIkZPR08zIiA9ICIjOEM2NTE1IiwiTk1JTiIgPSAiYmxhY2siKSkgKw0KICBmYWNldF93cmFwKH4gdmFyaWF2ZWwsc2NhbGVzID0gImZyZWVfeSIsbGFiZWxsZXIgPSByb3R1bG9zX2ZhY2V0KSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBleHBhbnNpb24obXVsdCA9IGMoMC4wNSwgMC4xOCkpKSArDQogIGxhYnMoeCA9IE5VTEwseSA9IGV4cHJlc3Npb24oIkN1bXVsYXRpdmUgZW1pc3Npb24gIn4obXUqZ35nXnstMX0pKSkgKw0KICB0aGVtZV9jbGFzc2ljKGJhc2Vfc2l6ZSA9IDEyKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwNCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSxoanVzdCA9IDEsY29sb3IgPSAiYmxhY2siKSwNCiAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLHNpemUgPSAxMikpDQpwX2FjdW11bGFkbw0KZ2dzYXZlKCJGaWd1cmEgMiAtIGdhc2VzIGFjdW11bGFkb3MucG5nIixwX2FjdW11bGFkbywgd2lkdGggPSA4LCBoZWlnaHQgPSA1LCBkcGkgPSAzMDAsIGJnID0gIndoaXRlIikNCmBgYA0KDQoqKioNCioqKg0KIyMjIF8qKjYuMi4zIC0gQ09OVFJBU1RFIEZFWkVTIHZzIE5NSU4qKl8NCioqKg0KKioqDQpgYGB7cn0NCnZhcmlhdmVpcyA9IGMoIkNINF9hY3VtdWxhZG9fdWdfZyIsIkNPMl9hY3VtdWxhZG9fdWdfZyIsIk4yT19hY3VtdWxhZG9fdWdfZyIpDQoNCnJlc3VsdGFkb3NfY29udHJhc3RlID0gbGlzdCgpDQpmb3IodmFyIGluIHZhcmlhdmVpcyl7DQogIGNhdCgiXG5cbiMjIyMjIyMjIyMjIyMjIyMgVmFyacOhdmVsOiIsIHZhciwgIiMjIyMjIyMjIyMjIyMjIyNcbiIpDQogICMgTW9kZWxvDQogIGZvcm11bGFfbW9kID0gYXMuZm9ybXVsYShwYXN0ZSh2YXIsICJ+IEFicmV2aWFjYW8iKSkNCiAgbW9kID0gYW92KGZvcm11bGFfbW9kLGRhdGEgPSBlbWlzc29lc19hY3VtdWxhZGFzX2ZpbHRyYWRhKQ0KICAjIE3DqWRpYXMNCiAgZW0gPSBlbW1lYW5zOjplbW1lYW5zKG1vZCx+IEFicmV2aWFjYW8pDQogICMgQ29udHJhc3RlOiBtw6lkaWEgRk9HICsgRk9HTzMgdmVyc3VzIE5NSU4NCiAgY29udCA9IGVtbWVhbnM6OmNvbnRyYXN0KGVtLG1ldGhvZCA9IGxpc3QoRmV6ZXNfdnNfTk1JTiA9IGMoMCwgMCwgMC41LCAwLjUsIC0xKSkpDQogIGNhdCgiXG5GT0cgKyBGT0dPMyB2cyBOTUlOOlxuIikNCiAgcHJpbnQoc3VtbWFyeShjb250LCBpbmZlciA9IFRSVUUpKQ0KDQogIHJlc3VsdGFkb3NfY29udHJhc3RlW1t2YXJdXSA9IGFzLmRhdGEuZnJhbWUoY29udCl9DQoNCnJlc3VsdGFkb19jb250cmFzdGUgPSBkby5jYWxsKHJiaW5kLHJlc3VsdGFkb3NfY29udHJhc3RlKQ0Kcm93bmFtZXMocmVzdWx0YWRvX2NvbnRyYXN0ZSkgPSBOVUxMDQpWaWV3KHJlc3VsdGFkb19jb250cmFzdGUpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=