Total Microred

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 7,6141 ****, N = 571 No, N = 2,9131 Sí, N = 4,6441 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 2,288.0 (30.1%) 27.0 (48.2%) 1,536.0 (52.8%) 725.0 (15.6%)
    Sí 5,318.0 (69.9%) 29.0 (51.8%) 1,375.0 (47.2%) 3,914.0 (84.4%)
Por el perifoneo me enteré de la VANCAN 3,861.0 (72.5%) 15.0 (50.0%) 795.0 (57.7%) 3,051.0 (77.9%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 472.0 (8.9%) 2.0 (6.7%) 134.0 (9.7%) 336.0 (8.6%) 0.4
Por el FACEBOOK me enteré de la VANCAN 449.0 (8.4%) 5.0 (16.7%) 132.0 (9.6%) 312.0 (8.0%) 0.038
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 427.0 (8.0%) 2.0 (6.7%) 150.0 (10.9%) 275.0 (7.0%) <0.001
Por mi vecino me enteré de la VANCAN 376.0 (7.1%) 0.0 (0.0%) 131.0 (9.5%) 245.0 (6.3%) <0.001
Por la radio me enteré de la VANCAN 373.0 (7.0%) 2.0 (6.7%) 138.0 (10.0%) 233.0 (5.9%) <0.001
Por afiches pegados me enteré de la VANCAN 248.0 (4.7%) 1.0 (3.3%) 79.0 (5.7%) 168.0 (4.3%) 0.082
Por la televición me enteré de la VANCAN 241.0 (4.5%) 1.0 (3.3%) 87.0 (6.3%) 153.0 (3.9%) 0.001
Por el WHATSAPP me enteré de la VANCAN 232.0 (4.4%) 1.0 (3.3%) 61.0 (4.4%) 170.0 (4.3%) >0.9
Por comunicados de la posta me enteré de la VANCAN 113.0 (2.1%) 1.0 (3.3%) 23.0 (1.7%) 89.0 (2.3%) 0.3
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: Socabaya

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2091 ****, N = 51 No, N = 781 Sí, N = 1261 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 66.0 (31.6%) 3.0 (60.0%) 43.0 (55.1%) 20.0 (15.9%)
    Sí 143.0 (68.4%) 2.0 (40.0%) 35.0 (44.9%) 106.0 (84.1%)
Por el perifoneo me enteré de la VANCAN 112.0 (78.3%) 0.0 (0.0%) 23.0 (65.7%) 89.0 (84.0%) 0.003
Por comunicación de la Municipalidad me enteré de la VANCAN 7.0 (4.9%) 0.0 (0.0%) 2.0 (5.7%) 5.0 (4.7%) >0.9
Por el FACEBOOK me enteré de la VANCAN 14.0 (9.8%) 1.0 (50.0%) 6.0 (17.1%) 7.0 (6.6%) 0.030
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 15.0 (10.5%) 1.0 (50.0%) 4.0 (11.4%) 10.0 (9.4%) 0.2
Por mi vecino me enteré de la VANCAN 7.0 (4.9%) 0.0 (0.0%) 2.0 (5.7%) 5.0 (4.7%) >0.9
Por la radio me enteré de la VANCAN 12.0 (8.4%) 0.0 (0.0%) 4.0 (11.4%) 8.0 (7.5%) 0.6
Por afiches pegados me enteré de la VANCAN 11.0 (7.7%) 0.0 (0.0%) 5.0 (14.3%) 6.0 (5.7%) 0.3
Por la televición me enteré de la VANCAN 2.0 (1.4%) 0.0 (0.0%) 2.0 (5.7%) 0.0 (0.0%) 0.086
Por el WHATSAPP me enteré de la VANCAN 2.0 (1.4%) 0.0 (0.0%) 1.0 (2.9%) 1.0 (0.9%) 0.5
Por comunicados de la posta me enteré de la VANCAN 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%)
1 n (%)
2 Fisher’s exact test

Microred: 15 de Agosto

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2141 No, N = 821 Sí, N = 1321 p-value2
Este año escuchó sobre la VANCAN


<0.001
    No 61.0 (28.5%) 49.0 (59.8%) 12.0 (9.1%)
    Sí 153.0 (71.5%) 33.0 (40.2%) 120.0 (90.9%)
Por el perifoneo me enteré de la VANCAN 130.0 (85.0%) 26.0 (78.8%) 104.0 (86.7%) 0.3
Por comunicación de la Municipalidad me enteré de la VANCAN 2.0 (1.3%) 2.0 (6.1%) 0.0 (0.0%) 0.045
Por el FACEBOOK me enteré de la VANCAN 4.0 (2.6%) 0.0 (0.0%) 4.0 (3.3%) 0.6
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 17.0 (11.1%) 4.0 (12.1%) 13.0 (10.8%) 0.8
Por mi vecino me enteré de la VANCAN 12.0 (7.8%) 4.0 (12.1%) 8.0 (6.7%) 0.3
Por la radio me enteré de la VANCAN 11.0 (7.2%) 3.0 (9.1%) 8.0 (6.7%) 0.7
Por afiches pegados me enteré de la VANCAN 8.0 (5.2%) 1.0 (3.0%) 7.0 (5.8%) >0.9
Por la televición me enteré de la VANCAN 1.0 (0.7%) 1.0 (3.0%) 0.0 (0.0%) 0.2
Por el WHATSAPP me enteré de la VANCAN 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%)
Por comunicados de la posta me enteré de la VANCAN 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%)
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: ASA

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 8491 ****, N = 41 No, N = 3071 Sí, N = 5381 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 264.0 (31.1%) 2.0 (50.0%) 171.0 (55.9%) 91.0 (16.9%)
    Sí 584.0 (68.9%) 2.0 (50.0%) 135.0 (44.1%) 447.0 (83.1%)
Por el perifoneo me enteré de la VANCAN 463.0 (79.1%) 1.0 (50.0%) 100.0 (73.5%) 362.0 (81.0%) 0.085
Por comunicación de la Municipalidad me enteré de la VANCAN 46.0 (7.9%) 0.0 (0.0%) 10.0 (7.4%) 36.0 (8.1%) 0.9
Por el FACEBOOK me enteré de la VANCAN 30.0 (5.1%) 1.0 (50.0%) 8.0 (5.9%) 21.0 (4.7%) 0.089
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 75.0 (12.8%) 0.0 (0.0%) 18.0 (13.2%) 57.0 (12.8%) >0.9
Por mi vecino me enteré de la VANCAN 37.0 (6.3%) 0.0 (0.0%) 11.0 (8.1%) 26.0 (5.8%) 0.4
Por la radio me enteré de la VANCAN 23.0 (3.9%) 0.0 (0.0%) 6.0 (4.4%) 17.0 (3.8%) 0.8
Por afiches pegados me enteré de la VANCAN 20.0 (3.4%) 0.0 (0.0%) 7.0 (5.1%) 13.0 (2.9%) 0.3
Por la televición me enteré de la VANCAN 10.0 (1.7%) 0.0 (0.0%) 2.0 (1.5%) 8.0 (1.8%) >0.9
Por el WHATSAPP me enteré de la VANCAN 18.0 (3.1%) 0.0 (0.0%) 5.0 (3.7%) 13.0 (2.9%) 0.6
Por comunicados de la posta me enteré de la VANCAN 2.0 (0.3%) 0.0 (0.0%) 0.0 (0.0%) 2.0 (0.4%) >0.9
1 n (%)
2 Fisher’s exact test

Microred: B Aires

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2181 ****, N = 21 No, N = 791 Sí, N = 1371 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 60.0 (27.5%) 1.0 (50.0%) 39.0 (49.4%) 20.0 (14.6%)
    Sí 158.0 (72.5%) 1.0 (50.0%) 40.0 (50.6%) 117.0 (85.4%)
Por el perifoneo me enteré de la VANCAN 123.0 (77.8%) 1.0 (100.0%) 30.0 (75.0%) 92.0 (78.6%) 0.7
Por comunicación de la Municipalidad me enteré de la VANCAN 14.0 (8.9%) 0.0 (0.0%) 5.0 (12.5%) 9.0 (7.7%) 0.4
Por el FACEBOOK me enteré de la VANCAN 18.0 (11.4%) 0.0 (0.0%) 3.0 (7.5%) 15.0 (12.8%) 0.6
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 14.0 (8.9%) 0.0 (0.0%) 4.0 (10.0%) 10.0 (8.5%) 0.8
Por mi vecino me enteré de la VANCAN 3.0 (1.9%) 0.0 (0.0%) 0.0 (0.0%) 3.0 (2.6%) 0.6
Por la radio me enteré de la VANCAN 10.0 (6.3%) 0.0 (0.0%) 3.0 (7.5%) 7.0 (6.0%) 0.7
Por afiches pegados me enteré de la VANCAN 3.0 (1.9%) 0.0 (0.0%) 0.0 (0.0%) 3.0 (2.6%) 0.6
Por la televición me enteré de la VANCAN 5.0 (3.2%) 0.0 (0.0%) 1.0 (2.5%) 4.0 (3.4%) >0.9
Por el WHATSAPP me enteré de la VANCAN 5.0 (3.2%) 0.0 (0.0%) 1.0 (2.5%) 4.0 (3.4%) >0.9
Por comunicados de la posta me enteré de la VANCAN 7.0 (4.4%) 0.0 (0.0%) 1.0 (2.5%) 6.0 (5.1%) 0.7
1 n (%)
2 Fisher’s exact test

Microred: C Blanca

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2061 ****, N = 21 No, N = 821 Sí, N = 1221 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 57.0 (27.7%) 1.0 (50.0%) 39.0 (47.6%) 17.0 (13.9%)
    Sí 149.0 (72.3%) 1.0 (50.0%) 43.0 (52.4%) 105.0 (86.1%)
Por el perifoneo me enteré de la VANCAN 108.0 (72.5%) 1.0 (100.0%) 19.0 (44.2%) 88.0 (83.8%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 2.0 (1.3%) 0.0 (0.0%) 1.0 (2.3%) 1.0 (1.0%) 0.5
Por el FACEBOOK me enteré de la VANCAN 16.0 (10.7%) 0.0 (0.0%) 5.0 (11.6%) 11.0 (10.5%) 0.8
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 12.0 (8.1%) 0.0 (0.0%) 8.0 (18.6%) 4.0 (3.8%) 0.012
Por mi vecino me enteré de la VANCAN 9.0 (6.0%) 0.0 (0.0%) 6.0 (14.0%) 3.0 (2.9%) 0.044
Por la radio me enteré de la VANCAN 15.0 (10.1%) 0.0 (0.0%) 5.0 (11.6%) 10.0 (9.5%) 0.8
Por afiches pegados me enteré de la VANCAN 12.0 (8.1%) 0.0 (0.0%) 4.0 (9.3%) 8.0 (7.6%) 0.8
Por la televición me enteré de la VANCAN 5.0 (3.4%) 0.0 (0.0%) 2.0 (4.7%) 3.0 (2.9%) 0.6
Por el WHATSAPP me enteré de la VANCAN 3.0 (2.0%) 0.0 (0.0%) 1.0 (2.3%) 2.0 (1.9%) >0.9
Por comunicados de la posta me enteré de la VANCAN 7.0 (4.7%) 0.0 (0.0%) 1.0 (2.3%) 6.0 (5.7%) 0.7
1 n (%)
2 Fisher’s exact test

Microred: C Colorado

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2111 No, N = 621 Sí, N = 1491 p-value2
Este año escuchó sobre la VANCAN


<0.001
    No 52.0 (24.6%) 31.0 (50.0%) 21.0 (14.1%)
    Sí 159.0 (75.4%) 31.0 (50.0%) 128.0 (85.9%)
Por el perifoneo me enteré de la VANCAN 110.0 (69.2%) 18.0 (58.1%) 92.0 (71.9%) 0.14
Por comunicación de la Municipalidad me enteré de la VANCAN 17.0 (10.7%) 1.0 (3.2%) 16.0 (12.5%) 0.2
Por el FACEBOOK me enteré de la VANCAN 11.0 (6.9%) 5.0 (16.1%) 6.0 (4.7%) 0.040
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 10.0 (6.3%) 3.0 (9.7%) 7.0 (5.5%) 0.4
Por mi vecino me enteré de la VANCAN 10.0 (6.3%) 2.0 (6.5%) 8.0 (6.3%) >0.9
Por la radio me enteré de la VANCAN 14.0 (8.8%) 3.0 (9.7%) 11.0 (8.6%) 0.7
Por afiches pegados me enteré de la VANCAN 24.0 (15.1%) 7.0 (22.6%) 17.0 (13.3%) 0.3
Por la televición me enteré de la VANCAN 12.0 (7.5%) 3.0 (9.7%) 9.0 (7.0%) 0.7
Por el WHATSAPP me enteré de la VANCAN 6.0 (3.8%) 0.0 (0.0%) 6.0 (4.7%) 0.6
Por comunicados de la posta me enteré de la VANCAN 5.0 (3.1%) 0.0 (0.0%) 5.0 (3.9%) 0.6
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: C de Dios

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 6361 ****, N = 51 No, N = 2661 Sí, N = 3651 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 218.0 (34.3%) 2.0 (50.0%) 176.0 (66.2%) 40.0 (11.0%)
    Sí 417.0 (65.7%) 2.0 (50.0%) 90.0 (33.8%) 325.0 (89.0%)
Por el perifoneo me enteré de la VANCAN 288.0 (68.9%) 0.0 (0.0%) 47.0 (52.2%) 241.0 (74.2%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 73.0 (17.5%) 0.0 (0.0%) 20.0 (22.2%) 53.0 (16.3%) 0.3
Por el FACEBOOK me enteré de la VANCAN 44.0 (10.5%) 0.0 (0.0%) 10.0 (11.1%) 34.0 (10.5%) 0.9
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 27.0 (6.5%) 0.0 (0.0%) 8.0 (8.9%) 19.0 (5.8%) 0.5
Por mi vecino me enteré de la VANCAN 48.0 (11.5%) 0.0 (0.0%) 15.0 (16.7%) 33.0 (10.2%) 0.2
Por la radio me enteré de la VANCAN 17.0 (4.1%) 0.0 (0.0%) 7.0 (7.8%) 10.0 (3.1%) 0.2
Por afiches pegados me enteré de la VANCAN 11.0 (2.6%) 0.0 (0.0%) 3.0 (3.3%) 8.0 (2.5%) 0.7
Por la televición me enteré de la VANCAN 2.0 (0.5%) 0.0 (0.0%) 1.0 (1.1%) 1.0 (0.3%) 0.4
Por el WHATSAPP me enteré de la VANCAN 34.0 (8.1%) 1.0 (33.3%) 10.0 (11.1%) 23.0 (7.1%) 0.095
Por comunicados de la posta me enteré de la VANCAN 7.0 (1.7%) 0.0 (0.0%) 1.0 (1.1%) 6.0 (1.8%) >0.9
1 n (%)
2 Fisher’s exact test

Microred: Characato

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 4241 ****, N = 51 No, N = 1461 Sí, N = 2731 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 95.0 (22.4%) 3.0 (60.0%) 61.0 (41.8%) 31.0 (11.4%)
    Sí 329.0 (77.6%) 2.0 (40.0%) 85.0 (58.2%) 242.0 (88.6%)
Por el perifoneo me enteré de la VANCAN 224.0 (68.1%) 1.0 (50.0%) 45.0 (52.9%) 178.0 (73.6%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 39.0 (11.9%) 1.0 (50.0%) 9.0 (10.6%) 29.0 (12.0%) 0.3
Por el FACEBOOK me enteré de la VANCAN 34.0 (10.3%) 0.0 (0.0%) 9.0 (10.6%) 25.0 (10.3%) >0.9
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 21.0 (6.4%) 1.0 (50.0%) 9.0 (10.6%) 11.0 (4.5%) 0.014
Por mi vecino me enteré de la VANCAN 22.0 (6.7%) 0.0 (0.0%) 11.0 (12.9%) 11.0 (4.5%) 0.029
Por la radio me enteré de la VANCAN 11.0 (3.3%) 0.0 (0.0%) 4.0 (4.7%) 7.0 (2.9%) 0.5
Por afiches pegados me enteré de la VANCAN 21.0 (6.4%) 1.0 (50.0%) 4.0 (4.7%) 16.0 (6.6%) 0.11
Por la televición me enteré de la VANCAN 11.0 (3.3%) 0.0 (0.0%) 4.0 (4.7%) 7.0 (2.9%) 0.5
Por el WHATSAPP me enteré de la VANCAN 18.0 (5.5%) 0.0 (0.0%) 4.0 (4.7%) 14.0 (5.8%) >0.9
Por comunicados de la posta me enteré de la VANCAN 10.0 (3.0%) 1.0 (50.0%) 2.0 (2.4%) 7.0 (2.9%) 0.081
1 n (%)
2 Fisher’s exact test

Microred: E Misti

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 4271 ****, N = 51 No, N = 1811 Sí, N = 2411 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 146.0 (34.3%) 2.0 (40.0%) 97.0 (53.6%) 47.0 (19.6%)
    Sí 280.0 (65.7%) 3.0 (60.0%) 84.0 (46.4%) 193.0 (80.4%)
Por el perifoneo me enteré de la VANCAN 200.0 (71.2%) 2.0 (66.7%) 52.0 (61.9%) 146.0 (75.3%) 0.063
Por comunicación de la Municipalidad me enteré de la VANCAN 8.0 (2.8%) 0.0 (0.0%) 1.0 (1.2%) 7.0 (3.6%) 0.5
Por el FACEBOOK me enteré de la VANCAN 16.0 (5.7%) 0.0 (0.0%) 3.0 (3.6%) 13.0 (6.7%) 0.5
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 33.0 (11.7%) 0.0 (0.0%) 14.0 (16.7%) 19.0 (9.8%) 0.2
Por mi vecino me enteré de la VANCAN 27.0 (9.6%) 0.0 (0.0%) 8.0 (9.5%) 19.0 (9.8%) >0.9
Por la radio me enteré de la VANCAN 19.0 (6.8%) 1.0 (33.3%) 8.0 (9.5%) 10.0 (5.2%) 0.060
Por afiches pegados me enteré de la VANCAN 9.0 (3.2%) 0.0 (0.0%) 2.0 (2.4%) 7.0 (3.6%) 0.8
Por la televición me enteré de la VANCAN 8.0 (2.8%) 1.0 (33.3%) 4.0 (4.8%) 3.0 (1.5%) 0.020
Por el WHATSAPP me enteré de la VANCAN 8.0 (2.8%) 0.0 (0.0%) 1.0 (1.2%) 7.0 (3.6%) 0.5
Por comunicados de la posta me enteré de la VANCAN 2.0 (0.7%) 0.0 (0.0%) 1.0 (1.2%) 1.0 (0.5%) 0.5
1 n (%)
2 Fisher’s exact test

Microred: F Bolognesi

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2161 ****, N = 11 No, N = 651 Sí, N = 1501 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 54.0 (25.0%) 0.0 (0.0%) 30.0 (46.2%) 24.0 (16.0%)
    Sí 162.0 (75.0%) 1.0 (100.0%) 35.0 (53.8%) 126.0 (84.0%)
Por el perifoneo me enteré de la VANCAN 114.0 (70.4%) 1.0 (100.0%) 17.0 (48.6%) 96.0 (76.2%) 0.004
Por comunicación de la Municipalidad me enteré de la VANCAN 8.0 (4.9%) 0.0 (0.0%) 1.0 (2.9%) 7.0 (5.6%) >0.9
Por el FACEBOOK me enteré de la VANCAN 11.0 (6.8%) 0.0 (0.0%) 4.0 (11.4%) 7.0 (5.6%) 0.3
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 12.0 (7.4%) 0.0 (0.0%) 4.0 (11.4%) 8.0 (6.3%) 0.3
Por mi vecino me enteré de la VANCAN 13.0 (8.0%) 0.0 (0.0%) 2.0 (5.7%) 11.0 (8.7%) 0.8
Por la radio me enteré de la VANCAN 9.0 (5.6%) 0.0 (0.0%) 2.0 (5.7%) 7.0 (5.6%) >0.9
Por afiches pegados me enteré de la VANCAN 12.0 (7.4%) 0.0 (0.0%) 0.0 (0.0%) 12.0 (9.5%) 0.14
Por la televición me enteré de la VANCAN 5.0 (3.1%) 0.0 (0.0%) 0.0 (0.0%) 5.0 (4.0%) 0.6
Por el WHATSAPP me enteré de la VANCAN 13.0 (8.0%) 0.0 (0.0%) 5.0 (14.3%) 8.0 (6.3%) 0.2
Por comunicados de la posta me enteré de la VANCAN 6.0 (3.7%) 0.0 (0.0%) 3.0 (8.6%) 3.0 (2.4%) 0.2
1 n (%)
2 Fisher’s exact test

Microred: G San Martin

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2121 ****, N = 11 No, N = 1011 Sí, N = 1101 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 67.0 (31.6%) 0.0 (0.0%) 54.0 (53.5%) 13.0 (11.8%)
    Sí 145.0 (68.4%) 1.0 (100.0%) 47.0 (46.5%) 97.0 (88.2%)
Por el perifoneo me enteré de la VANCAN 115.0 (79.3%) 1.0 (100.0%) 28.0 (59.6%) 86.0 (88.7%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 5.0 (3.4%) 0.0 (0.0%) 2.0 (4.3%) 3.0 (3.1%) 0.7
Por el FACEBOOK me enteré de la VANCAN 6.0 (4.1%) 0.0 (0.0%) 2.0 (4.3%) 4.0 (4.1%) >0.9
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 6.0 (4.1%) 0.0 (0.0%) 3.0 (6.4%) 3.0 (3.1%) 0.4
Por mi vecino me enteré de la VANCAN 14.0 (9.7%) 0.0 (0.0%) 8.0 (17.0%) 6.0 (6.2%) 0.2
Por la radio me enteré de la VANCAN 9.0 (6.2%) 0.0 (0.0%) 5.0 (10.6%) 4.0 (4.1%) 0.2
Por afiches pegados me enteré de la VANCAN 8.0 (5.5%) 0.0 (0.0%) 2.0 (4.3%) 6.0 (6.2%) >0.9
Por la televición me enteré de la VANCAN 2.0 (1.4%) 0.0 (0.0%) 2.0 (4.3%) 0.0 (0.0%) 0.12
Por el WHATSAPP me enteré de la VANCAN 7.0 (4.8%) 0.0 (0.0%) 2.0 (4.3%) 5.0 (5.2%) >0.9
Por comunicados de la posta me enteré de la VANCAN 2.0 (1.4%) 0.0 (0.0%) 1.0 (2.1%) 1.0 (1.0%) 0.6
1 n (%)
2 Fisher’s exact test

Microred: Hunter

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2121 ****, N = 11 No, N = 811 Sí, N = 1301 p-value2
Este año escuchó sobre la VANCAN



0.001
    No 45.0 (21.2%) 0.0 (0.0%) 27.0 (33.3%) 18.0 (13.8%)
    Sí 167.0 (78.8%) 1.0 (100.0%) 54.0 (66.7%) 112.0 (86.2%)
Por el perifoneo me enteré de la VANCAN 123.0 (73.7%) 1.0 (100.0%) 33.0 (61.1%) 89.0 (79.5%) 0.021
Por comunicación de la Municipalidad me enteré de la VANCAN 9.0 (5.4%) 0.0 (0.0%) 2.0 (3.7%) 7.0 (6.3%) 0.7
Por el FACEBOOK me enteré de la VANCAN 14.0 (8.4%) 0.0 (0.0%) 3.0 (5.6%) 11.0 (9.8%) 0.6
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 23.0 (13.8%) 0.0 (0.0%) 9.0 (16.7%) 14.0 (12.5%) 0.6
Por mi vecino me enteré de la VANCAN 10.0 (6.0%) 0.0 (0.0%) 3.0 (5.6%) 7.0 (6.3%) >0.9
Por la radio me enteré de la VANCAN 13.0 (7.8%) 0.0 (0.0%) 5.0 (9.3%) 8.0 (7.1%) 0.8
Por afiches pegados me enteré de la VANCAN 12.0 (7.2%) 0.0 (0.0%) 4.0 (7.4%) 8.0 (7.1%) >0.9
Por la televición me enteré de la VANCAN 2.0 (1.2%) 0.0 (0.0%) 1.0 (1.9%) 1.0 (0.9%) 0.6
Por el WHATSAPP me enteré de la VANCAN 3.0 (1.8%) 0.0 (0.0%) 2.0 (3.7%) 1.0 (0.9%) 0.3
Por comunicados de la posta me enteré de la VANCAN 2.0 (1.2%) 0.0 (0.0%) 1.0 (1.9%) 1.0 (0.9%) 0.6
1 n (%)
2 Fisher’s exact test

Microred: M Castilla

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2091 No, N = 401 Sí, N = 1691 p-value2
Este año escuchó sobre la VANCAN


<0.001
    No 28.0 (13.4%) 15.0 (37.5%) 13.0 (7.7%)
    Sí 181.0 (86.6%) 25.0 (62.5%) 156.0 (92.3%)
Por el perifoneo me enteré de la VANCAN 155.0 (85.6%) 18.0 (72.0%) 137.0 (87.8%) 0.059
Por comunicación de la Municipalidad me enteré de la VANCAN 4.0 (2.2%) 0.0 (0.0%) 4.0 (2.6%) >0.9
Por el FACEBOOK me enteré de la VANCAN 9.0 (5.0%) 0.0 (0.0%) 9.0 (5.8%) 0.6
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 6.0 (3.3%) 1.0 (4.0%) 5.0 (3.2%) 0.6
Por mi vecino me enteré de la VANCAN 6.0 (3.3%) 2.0 (8.0%) 4.0 (2.6%) 0.2
Por la radio me enteré de la VANCAN 14.0 (7.7%) 2.0 (8.0%) 12.0 (7.7%) >0.9
Por afiches pegados me enteré de la VANCAN 9.0 (5.0%) 2.0 (8.0%) 7.0 (4.5%) 0.4
Por la televición me enteré de la VANCAN 9.0 (5.0%) 1.0 (4.0%) 8.0 (5.1%) >0.9
Por el WHATSAPP me enteré de la VANCAN 4.0 (2.2%) 1.0 (4.0%) 3.0 (1.9%) 0.5
Por comunicados de la posta me enteré de la VANCAN 7.0 (3.9%) 1.0 (4.0%) 6.0 (3.8%) >0.9
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: M Melgar

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2101 No, N = 751 Sí, N = 1351 p-value2
Este año escuchó sobre la VANCAN


<0.001
    No 69.0 (32.9%) 42.0 (56.0%) 27.0 (20.0%)
    Sí 141.0 (67.1%) 33.0 (44.0%) 108.0 (80.0%)
Por el perifoneo me enteré de la VANCAN 116.0 (82.3%) 26.0 (78.8%) 90.0 (83.3%) 0.5
Por comunicación de la Municipalidad me enteré de la VANCAN 2.0 (1.4%) 1.0 (3.0%) 1.0 (0.9%) 0.4
Por el FACEBOOK me enteré de la VANCAN 3.0 (2.1%) 1.0 (3.0%) 2.0 (1.9%) 0.6
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 10.0 (7.1%) 3.0 (9.1%) 7.0 (6.5%) 0.7
Por mi vecino me enteré de la VANCAN 8.0 (5.7%) 2.0 (6.1%) 6.0 (5.6%) >0.9
Por la radio me enteré de la VANCAN 7.0 (5.0%) 2.0 (6.1%) 5.0 (4.6%) 0.7
Por afiches pegados me enteré de la VANCAN 1.0 (0.7%) 0.0 (0.0%) 1.0 (0.9%) >0.9
Por la televición me enteré de la VANCAN 3.0 (2.1%) 1.0 (3.0%) 2.0 (1.9%) 0.6
Por el WHATSAPP me enteré de la VANCAN 6.0 (4.3%) 0.0 (0.0%) 6.0 (5.6%) 0.3
Por comunicados de la posta me enteré de la VANCAN 2.0 (1.4%) 0.0 (0.0%) 2.0 (1.9%) >0.9
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: Paucarpata

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2101 No, N = 541 Sí, N = 1561 p-value2
Este año escuchó sobre la VANCAN


0.003
    No 38.0 (18.1%) 17.0 (31.5%) 21.0 (13.5%)
    Sí 172.0 (81.9%) 37.0 (68.5%) 135.0 (86.5%)
Por el perifoneo me enteré de la VANCAN 127.0 (73.8%) 21.0 (56.8%) 106.0 (78.5%) 0.008
Por comunicación de la Municipalidad me enteré de la VANCAN 11.0 (6.4%) 2.0 (5.4%) 9.0 (6.7%) >0.9
Por el FACEBOOK me enteré de la VANCAN 13.0 (7.6%) 4.0 (10.8%) 9.0 (6.7%) 0.5
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 8.0 (4.7%) 6.0 (16.2%) 2.0 (1.5%) 0.001
Por mi vecino me enteré de la VANCAN 10.0 (5.8%) 2.0 (5.4%) 8.0 (5.9%) >0.9
Por la radio me enteré de la VANCAN 22.0 (12.8%) 6.0 (16.2%) 16.0 (11.9%) 0.6
Por afiches pegados me enteré de la VANCAN 4.0 (2.3%) 2.0 (5.4%) 2.0 (1.5%) 0.2
Por la televición me enteré de la VANCAN 15.0 (8.7%) 3.0 (8.1%) 12.0 (8.9%) >0.9
Por el WHATSAPP me enteré de la VANCAN 1.0 (0.6%) 0.0 (0.0%) 1.0 (0.7%) >0.9
Por comunicados de la posta me enteré de la VANCAN 8.0 (4.7%) 1.0 (2.7%) 7.0 (5.2%) >0.9
1 n (%)
2 Pearson’s Chi-squared test; Fisher’s exact test

Microred: Pedregal

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 8501 ****, N = 31 No, N = 4551 Sí, N = 3921 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 313.0 (36.9%) 3.0 (100.0%) 258.0 (56.7%) 52.0 (13.3%)
    Sí 536.0 (63.1%) 0.0 (0.0%) 197.0 (43.3%) 339.0 (86.7%)
Por el perifoneo me enteré de la VANCAN 272.0 (50.7%) 0.0 (NA%) 63.0 (32.0%) 209.0 (61.5%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 124.0 (23.1%) 0.0 (NA%) 46.0 (23.4%) 78.0 (22.9%) >0.9
Por el FACEBOOK me enteré de la VANCAN 83.0 (15.5%) 0.0 (NA%) 37.0 (18.8%) 46.0 (13.5%) 0.11
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 37.0 (6.9%) 0.0 (NA%) 17.0 (8.6%) 20.0 (5.9%) 0.3
Por mi vecino me enteré de la VANCAN 45.0 (8.4%) 0.0 (NA%) 22.0 (11.2%) 23.0 (6.8%) 0.11
Por la radio me enteré de la VANCAN 76.0 (14.2%) 0.0 (NA%) 39.0 (19.8%) 37.0 (10.9%) 0.007
Por afiches pegados me enteré de la VANCAN 14.0 (2.6%) 0.0 (NA%) 6.0 (3.0%) 8.0 (2.4%) 0.8
Por la televición me enteré de la VANCAN 119.0 (22.2%) 0.0 (NA%) 49.0 (24.9%) 70.0 (20.6%) 0.3
Por el WHATSAPP me enteré de la VANCAN 28.0 (5.2%) 0.0 (NA%) 8.0 (4.1%) 20.0 (5.9%) 0.4
Por comunicados de la posta me enteré de la VANCAN 19.0 (3.5%) 0.0 (NA%) 2.0 (1.0%) 17.0 (5.0%) 0.015
1 n (%)
2 Fisher’s exact test

Microred: Tiabaya

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2141 ****, N = 11 No, N = 991 Sí, N = 1141 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 56.0 (26.3%) 0.0 (0.0%) 44.0 (44.4%) 12.0 (10.6%)
    Sí 157.0 (73.7%) 1.0 (100.0%) 55.0 (55.6%) 101.0 (89.4%)
Por el perifoneo me enteré de la VANCAN 103.0 (65.2%) 0.0 (0.0%) 34.0 (61.8%) 69.0 (67.6%) 0.3
Por comunicación de la Municipalidad me enteré de la VANCAN 21.0 (13.3%) 1.0 (100.0%) 9.0 (16.4%) 11.0 (10.8%) 0.068
Por el FACEBOOK me enteré de la VANCAN 30.0 (19.0%) 1.0 (100.0%) 9.0 (16.4%) 20.0 (19.6%) 0.2
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 8.0 (5.1%) 0.0 (0.0%) 2.0 (3.6%) 6.0 (5.9%) 0.7
Por mi vecino me enteré de la VANCAN 15.0 (9.5%) 0.0 (0.0%) 6.0 (10.9%) 9.0 (8.8%) 0.8
Por la radio me enteré de la VANCAN 5.0 (3.2%) 0.0 (0.0%) 2.0 (3.6%) 3.0 (2.9%) >0.9
Por afiches pegados me enteré de la VANCAN 22.0 (13.9%) 0.0 (0.0%) 9.0 (16.4%) 13.0 (12.7%) 0.7
Por la televición me enteré de la VANCAN 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%)
Por el WHATSAPP me enteré de la VANCAN 5.0 (3.2%) 0.0 (0.0%) 0.0 (0.0%) 5.0 (4.9%) 0.2
Por comunicados de la posta me enteré de la VANCAN 7.0 (4.4%) 0.0 (0.0%) 2.0 (3.6%) 5.0 (4.9%) >0.9
1 n (%)
2 Fisher’s exact test

Microred: V R Hinojosa

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 2061 ****, N = 11 No, N = 761 Sí, N = 1291 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 87.0 (42.4%) 1.0 (100.0%) 47.0 (61.8%) 39.0 (30.5%)
    Sí 118.0 (57.6%) 0.0 (0.0%) 29.0 (38.2%) 89.0 (69.5%)
Por el perifoneo me enteré de la VANCAN 85.0 (71.4%) 0.0 (NA%) 20.0 (69.0%) 65.0 (72.2%) 0.8
Por comunicación de la Municipalidad me enteré de la VANCAN 10.0 (8.4%) 0.0 (NA%) 3.0 (10.3%) 7.0 (7.8%) 0.7
Por el FACEBOOK me enteré de la VANCAN 9.0 (7.6%) 0.0 (NA%) 2.0 (6.9%) 7.0 (7.8%) >0.9
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 11.0 (9.2%) 0.0 (NA%) 3.0 (10.3%) 8.0 (8.9%) 0.7
Por mi vecino me enteré de la VANCAN 5.0 (4.2%) 0.0 (NA%) 1.0 (3.4%) 4.0 (4.4%) >0.9
Por la radio me enteré de la VANCAN 10.0 (8.4%) 0.0 (NA%) 3.0 (10.3%) 7.0 (7.8%) 0.7
Por afiches pegados me enteré de la VANCAN 4.0 (3.4%) 0.0 (NA%) 1.0 (3.4%) 3.0 (3.3%) >0.9
Por la televición me enteré de la VANCAN 6.0 (5.0%) 0.0 (NA%) 1.0 (3.4%) 5.0 (5.6%) >0.9
Por el WHATSAPP me enteré de la VANCAN 1.0 (0.8%) 0.0 (NA%) 0.0 (0.0%) 1.0 (1.1%) >0.9
Por comunicados de la posta me enteré de la VANCAN 1.0 (0.8%) 0.0 (NA%) 0.0 (0.0%) 1.0 (1.1%) >0.9
1 n (%)
2 Fisher’s exact test

Microred: Yanahuara

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 4231 ****, N = 31 No, N = 1661 Sí, N = 2541 p-value2
Este año escuchó sobre la VANCAN



0.002
    No 165.0 (39.1%) 1.0 (33.3%) 81.0 (48.8%) 83.0 (32.8%)
    Sí 257.0 (60.9%) 2.0 (66.7%) 85.0 (51.2%) 170.0 (67.2%)
Por el perifoneo me enteré de la VANCAN 174.0 (67.4%) 0.0 (0.0%) 47.0 (55.3%) 127.0 (74.3%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 28.0 (10.9%) 0.0 (0.0%) 7.0 (8.2%) 21.0 (12.3%) 0.5
Por el FACEBOOK me enteré de la VANCAN 26.0 (10.1%) 1.0 (50.0%) 10.0 (11.8%) 15.0 (8.8%) 0.2
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 19.0 (7.4%) 0.0 (0.0%) 9.0 (10.6%) 10.0 (5.8%) 0.3
Por mi vecino me enteré de la VANCAN 18.0 (7.0%) 0.0 (0.0%) 9.0 (10.6%) 9.0 (5.3%) 0.2
Por la radio me enteré de la VANCAN 13.0 (5.0%) 1.0 (50.0%) 7.0 (8.2%) 5.0 (2.9%) 0.018
Por afiches pegados me enteré de la VANCAN 9.0 (3.5%) 0.0 (0.0%) 5.0 (5.9%) 4.0 (2.3%) 0.2
Por la televición me enteré de la VANCAN 8.0 (3.1%) 0.0 (0.0%) 4.0 (4.7%) 4.0 (2.3%) 0.5
Por el WHATSAPP me enteré de la VANCAN 19.0 (7.4%) 0.0 (0.0%) 7.0 (8.2%) 12.0 (7.0%) 0.8
Por comunicados de la posta me enteré de la VANCAN 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%) 0.0 (0.0%)
1 n (%)
2 Fisher’s exact test

Microred: Zamacola

Razones comunes por las cuales la población no vacuna a su perro en la VANCAN

Cómo se entera la población de la VANCAN

Participación en la VANCAN (No/Sí) si la población se enteró de la VANCAN

Characteristic Overall, N = 1,2581 ****, N = 181 No, N = 4181 Sí, N = 8221 p-value2
Este año escuchó sobre la VANCAN



<0.001
    No 347.0 (27.6%) 8.0 (44.4%) 215.0 (51.6%) 124.0 (15.1%)
    Sí 910.0 (72.4%) 10.0 (55.6%) 202.0 (48.4%) 698.0 (84.9%)
Por el perifoneo me enteré de la VANCAN 719.0 (78.9%) 6.0 (60.0%) 128.0 (63.1%) 585.0 (83.8%) <0.001
Por comunicación de la Municipalidad me enteré de la VANCAN 42.0 (4.6%) 0.0 (0.0%) 10.0 (4.9%) 32.0 (4.6%) >0.9
Por el FACEBOOK me enteré de la VANCAN 58.0 (6.4%) 1.0 (10.0%) 11.0 (5.4%) 46.0 (6.6%) 0.5
Me enteré de la VANCAN por que lo ví mientras pasaba por ahí 63.0 (6.9%) 0.0 (0.0%) 21.0 (10.3%) 42.0 (6.0%) 0.086
Por mi vecino me enteré de la VANCAN 57.0 (6.3%) 0.0 (0.0%) 15.0 (7.4%) 42.0 (6.0%) 0.7
Por la radio me enteré de la VANCAN 63.0 (6.9%) 0.0 (0.0%) 22.0 (10.8%) 41.0 (5.9%) 0.052
Por afiches pegados me enteré de la VANCAN 34.0 (3.7%) 0.0 (0.0%) 15.0 (7.4%) 19.0 (2.7%) 0.015
Por la televición me enteré de la VANCAN 16.0 (1.8%) 0.0 (0.0%) 5.0 (2.5%) 11.0 (1.6%) 0.5
Por el WHATSAPP me enteré de la VANCAN 51.0 (5.6%) 0.0 (0.0%) 13.0 (6.4%) 38.0 (5.4%) 0.8
Por comunicados de la posta me enteré de la VANCAN 19.0 (2.1%) 0.0 (0.0%) 6.0 (3.0%) 13.0 (1.9%) 0.5
1 n (%)
2 Fisher’s exact test
LS0tDQp0aXRsZTogIlJlc3VsdGFkb3MgZGUgZW5jdWVzdGFzIFBvc3QtVkFOQ0FOIGEgbml2ZWwgZGUgTWljcm9yZWRlcyINCmF1dGhvcjogIkVxdWlwbyBFbmN1ZXN0YXMiDQpkYXRlOiAiMjAyNC0wNC0xMiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHVuaXRlZA0KLS0tDQoNCiMgKipUb3RhbCBNaWNyb3JlZCoqDQoNCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCnJtKGxpc3Q9bHMoKSkNCg0KI3JtKGxpc3QgPSBzZXRkaWZmKGxzKCksIGMoImRhdGFfYW5hbGlzaXMiLCAiZGF0YV9lbmN1ZXN0YXNfMSIpKSkNCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KI2xpYnJhcnkocmdkYWwpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShzcCkNCmxpYnJhcnkobGVhZmxldCkNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkob3Blbnhsc3gpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShndCkgICMjIFBhcmEgbGEgY3JlYWNpw7NuIGRlIHRyYWJsYXMNCmxpYnJhcnkoZ3RzdW1tYXJ5KSAgICMjIFBhcmEgbGEgY3JlYWNpw7NuIGRlIHRyYWJsYXMNCmxpYnJhcnkocmlvKSAgIyMgaW1wb3J0YXIgeSBleHBvcnRhciAgDQpsaWJyYXJ5KEhtaXNjKQ0KDQoNCg0KIyBMZWUgbG9zIGFyY2hpdm9zIENTVg0KZGF0YV9lbmN1ZXN0YXNfMSA8LSByZWFkLmNzdigiZGF0YV9hbmFsaXNpc19saXN0by5jc3YiKQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0NCiMgMC4gREFUQSBDTEVBTklORyBBRElDSU9OQUwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLQ0KDQpkYXRhX2VuY3Vlc3Rhc18xJGVzY3VjaG9fdmFuY2FuIDwtIGZhY3RvcihkYXRhX2VuY3Vlc3Rhc18xJGVzY3VjaG9fdmFuY2FuLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoMSwgMiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiTm8iLCAiU8OtIikpDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJGVzY3VjaG9fdmFuY2FuKSA8LSAiRXN0ZSBhw7FvIGVzY3VjaMOzIHNvYnJlIGxhIFZBTkNBTiINCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciA8LSBkYXRhX2VuY3Vlc3Rhc18xDQoNCg0KYGBgDQoNCg0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9hbmFsaXNpcyA8LSBzdWJzZXQoZGF0YV9lbmN1ZXN0YXNfMSwgcGVycm9fY2FzYT09MSkNCg0KZGF0YV9hbmFsaXNpcyAlPiUNCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfYW5hbGlzaXMgPC0gc3Vic2V0KGRhdGFfZW5jdWVzdGFzXzEsIHBlcnJvX2Nhc2E9PTEpDQoNCmRhdGFfYW5hbGlzaXMgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJHZpX3Blcmlmb25lbykgPC0gIlBvciBlbCBwZXJpZm9uZW8gbWUgZW50ZXLDqSBkZSBsYSBWQU5DQU4iDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJHZpX211bmkpIDwtICJQb3IgY29tdW5pY2FjacOzbiBkZSBsYSBNdW5pY2lwYWxpZGFkIG1lIGVudGVyw6kgZGUgbGEgVkFOQ0FOIg0KbGFiZWwoZGF0YV9lbmN1ZXN0YXNfMSR2aV9mYWNlYm9vaykgPC0gIlBvciBlbCBGQUNFQk9PSyAgbWUgZW50ZXLDqSBkZSBsYSBWQU5DQU4iDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJHZpX3ZpX2RlX3Bhc2FkYSkgPC0gIk1lIGVudGVyw6kgZGUgbGEgVkFOQ0FOIHBvciBxdWUgbG8gdsOtIG1pZW50cmFzIHBhc2FiYSBwb3IgYWjDrSINCmxhYmVsKGRhdGFfZW5jdWVzdGFzXzEkdmlfdmVjaW5vKSA8LSAiUG9yIG1pIHZlY2lubyBtZSBlbnRlcsOpIGRlIGxhIFZBTkNBTiINCmxhYmVsKGRhdGFfZW5jdWVzdGFzXzEkdmlfcmFkaW8pIDwtICJQb3IgbGEgcmFkaW8gIG1lIGVudGVyw6kgZGUgbGEgVkFOQ0FOIg0KbGFiZWwoZGF0YV9lbmN1ZXN0YXNfMSR2aV9hZmljaGUpIDwtICJQb3IgYWZpY2hlcyBwZWdhZG9zIG1lIGVudGVyw6kgZGUgbGEgVkFOQ0FOIg0KbGFiZWwoZGF0YV9lbmN1ZXN0YXNfMSR2aV90dikgPC0gIlBvciBsYSB0ZWxldmljacOzbiAgbWUgZW50ZXLDqSBkZSBsYSBWQU5DQU4iDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJHZpX3doYXRzYXBwKSA8LSAiUG9yIGVsIFdIQVRTQVBQICBtZSBlbnRlcsOpIGRlIGxhIFZBTkNBTiINCmxhYmVsKGRhdGFfZW5jdWVzdGFzXzEkdmlfcG9zdGEpIDwtICJQb3IgY29tdW5pY2Fkb3MgZGUgbGEgcG9zdGEgbWUgZW50ZXLDqSBkZSBsYSBWQU5DQU4iDQoNCg0KbGFiZWwoZGF0YV9lbmN1ZXN0YXNfMSRudl9ub19zYWJpYSkgPC0gIk5vIHZhY3Vuw6kgZW4gbGEgVkFOQ0FOIGEgdG9kb3MgbWlzIHBlcnJvcyBwb3JxdWUgbm8gc2Fiw61hIGRlIGxhIFZBTkNBTiINCmxhYmVsKGRhdGFfZW5jdWVzdGFzXzEkbnZfc2luX3RpZW1wbykgPC0gIk5vIHZhY3Vuw6kgZW4gbGEgVkFOQ0FOIGEgdG9kb3MgbWlzIHBlcnJvcyBwb3JxdWUgbm8gdGVuw61hIHRpZW1wbyIJDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X2NhY2hvcnJvKSA8LSAiTm8gdmFjdW7DqSBlbiBsYSBWQU5DQU4gYSB0b2RvcyBtaXMgcGVycm9zIHBvcnF1ZSBlcmFuIGNhY2hvcnJvcyIJDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X25vX2hhYmlhX25hZGllKSA8LSAiTm8gdmFjdW7DqSBlbiBsYSBWQU5DQU4gYSB0b2RvcyBtaXMgcGVycm9zIHBvcnF1ZSBubyBoYWLDrWEgbmFkaWUgZW4gY2FzYSIgDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X3lhX3ZhY3VuYWRvKSA8LSAiTm8gdmFjdW7DqSBlbiBsYSBWQU5DQU4gYSB0b2RvcyBtaXMgcGVycm9zIHBvcnF1ZQl5YSBlc3RhYmEgdmFjdW5hZG8iDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X3NlX2VudGVyb190YXJkZSkgPC0gIk5vIHZhY3Vuw6kgZW4gbGEgVkFOQ0FOIGEgdG9kb3MgbWlzIHBlcnJvcyBwb3JxdWUgbWUgZW50ZXLDqSB0YXJkZSIJDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X2Nhbl9hZ3Jlc2l2bykgPC0gIk5vIHZhY3Vuw6kgZW4gbGEgVkFOQ0FOIGEgdG9kb3MgbWlzIHBlcnJvcyBwb3JxdWUgc29uIGFncmVzaXZvcyIJDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X3ZhbmNhbl9sZWpvcykgPC0gIk5vIHZhY3Vuw6kgZW4gbGEgVkFOQ0FOIGEgdG9kb3MgbWlzIHBlcnJvcyBwb3JxdWUgbGEgVkFOQ0FOIGVzdGFiYSBsZWpvcyIJDQpsYWJlbChkYXRhX2VuY3Vlc3Rhc18xJG52X29jdXBhZG8pIDwtICJObyB2YWN1bsOpIGVuIGxhIFZBTkNBTiBhIHRvZG9zIG1pcyBwZXJyb3MgcG9ycXVlCWVzdGFiYSBvY3VwYWRvIg0KbGFiZWwoZGF0YV9lbmN1ZXN0YXNfMSRudl9jYW5fY2FsbGUpIDwtICJObyB2YWN1bsOpIGVuIGxhIFZBTkNBTiBhIHRvZG9zIG1pcyBwZXJyb3MgcG9ycXVlIG1pcyBwZXJyb3MgZXN0YWJhbiBlbiBsYSBjYWxsZSINCg0KDQpgYGANCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfYW5hbGlzaXMgPC0gc3Vic2V0KGRhdGFfZW5jdWVzdGFzXzEsIHBlcnJvX2Nhc2E9PTEpDQoNCmRhdGFfdGFibGVfMSAgPC0gZGF0YV9hbmFsaXNpcyAlPiUgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMSA8LSBkYXRhX3RhYmxlXzFbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzEgPC0gZGF0YV90YWJsZV8xICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMQ0KDQpgYGANCg0KDQoNCiMgKipNaWNyb3JlZDogU29jYWJheWEqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlNvY2FiYXlhIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJTb2NhYmF5YSIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX1NvY2FiYXlhICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iU29jYWJheWEiKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfU29jYWJheWEgPC0gZGF0YV90YWJsZV8xX1NvY2FiYXlhWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX1NvY2FiYXlhIDwtIGRhdGFfdGFibGVfMV9Tb2NhYmF5YSAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfU29jYWJheWENCg0KYGBgDQoNCg0KDQojICoqTWljcm9yZWQ6IDE1IGRlIEFnb3N0byoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iMTUgZGUgQWdvc3RvIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSIxNSBkZSBBZ29zdG8iKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV8xNV9hZ29zdG8gIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSIxNSBkZSBBZ29zdG8iKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfMTVfYWdvc3RvIDwtIGRhdGFfdGFibGVfMV8xNV9hZ29zdG9bLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfMTVfYWdvc3RvIDwtIGRhdGFfdGFibGVfMV8xNV9hZ29zdG8gJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xXzE1X2Fnb3N0bw0KDQpgYGANCg0KDQoNCiMgKipNaWNyb3JlZDogQVNBKioNCiAgDQoNCiMjIyBSYXpvbmVzIGNvbXVuZXMgcG9yIGxhcyBjdWFsZXMgbGEgcG9ibGFjacOzbiBubyB2YWN1bmEgYSBzdSBwZXJybyBlbiBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJBU0EiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkFTQSIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX0FTQSAgPC0gZGF0YV9lbmN1ZXN0YXNfMSAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkFTQSIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9BU0EgPC0gZGF0YV90YWJsZV8xX0FTQVssIGNvbHVtbl9vcmRlcl0NCg0KdGFibGFfMV9BU0EgPC0gZGF0YV90YWJsZV8xX0FTQSAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfQVNBDQoNCmBgYA0KDQoNCg0KIyAqKk1pY3JvcmVkOiBCIEFpcmVzKioNCiAgDQoNCiMjIyBSYXpvbmVzIGNvbXVuZXMgcG9yIGxhcyBjdWFsZXMgbGEgcG9ibGFjacOzbiBubyB2YWN1bmEgYSBzdSBwZXJybyBlbiBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJCIEFpcmVzIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJCIEFpcmVzIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfQl9BaXJlcyAgPC0gZGF0YV9lbmN1ZXN0YXNfMSAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkIgQWlyZXMiKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfQl9BaXJlcyA8LSBkYXRhX3RhYmxlXzFfQl9BaXJlc1ssIGNvbHVtbl9vcmRlcl0NCg0KdGFibGFfMV9CX0FpcmVzIDwtIGRhdGFfdGFibGVfMV9CX0FpcmVzICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9CX0FpcmVzDQoNCmBgYA0KDQoNCg0KIyAqKk1pY3JvcmVkOiBDIEJsYW5jYSoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iQyBCbGFuY2EiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkMgQmxhbmNhIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfQ19CbGFuY2EgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJDIEJsYW5jYSIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9DX0JsYW5jYSA8LSBkYXRhX3RhYmxlXzFfQ19CbGFuY2FbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfQ19CbGFuY2EgPC0gZGF0YV90YWJsZV8xX0NfQmxhbmNhICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9DX0JsYW5jYQ0KDQpgYGANCg0KDQoNCiMgKipNaWNyb3JlZDogQyBDb2xvcmFkbyoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iQyBDb2xvcmFkbyIpICU+JSANCiAgICBwaXZvdF9sb25nZXIoY29scyA9IGMobnZfbm9fc2FiaWEgLCAgbnZfc2luX3RpZW1wbyAsIG52X2NhY2hvcnJvICwgIG52X25vX2hhYmlhX25hZGllICwgIG52X3lhX3ZhY3VuYWRvICwgIG52X3NlX2VudGVyb190YXJkZSAsIG52X2Nhbl9hZ3Jlc2l2byAsICBudl92YW5jYW5fbGVqb3MgLCAgbnZfb2N1cGFkbyAsICBudl9jYW5fY2FsbGUpLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv1BvciBxdcOpIHJhesOzbiBsYXMgcGVyc29uYXMgbm8gdmFjdW5hbiBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgQ8OzbW8gc2UgZW50ZXJhIGxhIHBvYmxhY2nDs24gZGUgbGEgVkFOQ0FODQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iQyBDb2xvcmFkbyIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX0NfQ29sb3JhZG8gIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJDIENvbG9yYWRvIikgJT4lDQogICAgc2VsZWN0KHZhbmNhbl9vdXRjb21lICwJZXNjdWNob192YW5jYW4sIHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEpDQoNCmNvbHVtbl9vcmRlciA8LSBjKCJ2YW5jYW5fb3V0Y29tZSIsCSJlc2N1Y2hvX3ZhbmNhbiIsICJ2aV9wZXJpZm9uZW8iLCAgInZpX211bmkiLCAgInZpX2ZhY2Vib29rIiwgICJ2aV92aV9kZV9wYXNhZGEiLCAgInZpX3ZlY2lubyIsICAidmlfcmFkaW8iLCAgICJ2aV9hZmljaGUiLCAgInZpX3R2IiwgICJ2aV93aGF0c2FwcCIsICAidmlfcG9zdGEiKQ0KZGF0YV90YWJsZV8xX0NfQ29sb3JhZG8gPC0gZGF0YV90YWJsZV8xX0NfQ29sb3JhZG9bLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfQ19Db2xvcmFkbyA8LSBkYXRhX3RhYmxlXzFfQ19Db2xvcmFkbyAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfQ19Db2xvcmFkbw0KDQpgYGANCg0KDQoNCg0KIyAqKk1pY3JvcmVkOiBDIGRlIERpb3MqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkMgZGUgRGlvcyIpICU+JSANCiAgICBwaXZvdF9sb25nZXIoY29scyA9IGMobnZfbm9fc2FiaWEgLCAgbnZfc2luX3RpZW1wbyAsIG52X2NhY2hvcnJvICwgIG52X25vX2hhYmlhX25hZGllICwgIG52X3lhX3ZhY3VuYWRvICwgIG52X3NlX2VudGVyb190YXJkZSAsIG52X2Nhbl9hZ3Jlc2l2byAsICBudl92YW5jYW5fbGVqb3MgLCAgbnZfb2N1cGFkbyAsICBudl9jYW5fY2FsbGUpLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv1BvciBxdcOpIHJhesOzbiBsYXMgcGVyc29uYXMgbm8gdmFjdW5hbiBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgQ8OzbW8gc2UgZW50ZXJhIGxhIHBvYmxhY2nDs24gZGUgbGEgVkFOQ0FODQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iQyBkZSBEaW9zIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfQ19kZV9EaW9zICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iQyBkZSBEaW9zIikgJT4lDQogICAgc2VsZWN0KHZhbmNhbl9vdXRjb21lICwJZXNjdWNob192YW5jYW4sIHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEpDQoNCmNvbHVtbl9vcmRlciA8LSBjKCJ2YW5jYW5fb3V0Y29tZSIsCSJlc2N1Y2hvX3ZhbmNhbiIsICJ2aV9wZXJpZm9uZW8iLCAgInZpX211bmkiLCAgInZpX2ZhY2Vib29rIiwgICJ2aV92aV9kZV9wYXNhZGEiLCAgInZpX3ZlY2lubyIsICAidmlfcmFkaW8iLCAgICJ2aV9hZmljaGUiLCAgInZpX3R2IiwgICJ2aV93aGF0c2FwcCIsICAidmlfcG9zdGEiKQ0KZGF0YV90YWJsZV8xX0NfZGVfRGlvcyA8LSBkYXRhX3RhYmxlXzFfQ19kZV9EaW9zWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX0NfZGVfRGlvcyA8LSBkYXRhX3RhYmxlXzFfQ19kZV9EaW9zICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9DX2RlX0Rpb3MNCg0KYGBgDQoNCg0KDQoNCiMgKipNaWNyb3JlZDogQ2hhcmFjYXRvKioNCiAgDQoNCiMjIyBSYXpvbmVzIGNvbXVuZXMgcG9yIGxhcyBjdWFsZXMgbGEgcG9ibGFjacOzbiBubyB2YWN1bmEgYSBzdSBwZXJybyBlbiBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJDaGFyYWNhdG8iKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkNoYXJhY2F0byIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX0NoYXJhY2F0byAgPC0gZGF0YV9lbmN1ZXN0YXNfMSAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkNoYXJhY2F0byIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9DaGFyYWNhdG8gPC0gZGF0YV90YWJsZV8xX0NoYXJhY2F0b1ssIGNvbHVtbl9vcmRlcl0NCg0KdGFibGFfMV9DaGFyYWNhdG8gPC0gZGF0YV90YWJsZV8xX0NoYXJhY2F0byAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfQ2hhcmFjYXRvDQoNCmBgYA0KDQoNCg0KDQoNCiMgKipNaWNyb3JlZDogRSBNaXN0aSoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iRSBNaXN0aSIpICU+JSANCiAgICBwaXZvdF9sb25nZXIoY29scyA9IGMobnZfbm9fc2FiaWEgLCAgbnZfc2luX3RpZW1wbyAsIG52X2NhY2hvcnJvICwgIG52X25vX2hhYmlhX25hZGllICwgIG52X3lhX3ZhY3VuYWRvICwgIG52X3NlX2VudGVyb190YXJkZSAsIG52X2Nhbl9hZ3Jlc2l2byAsICBudl92YW5jYW5fbGVqb3MgLCAgbnZfb2N1cGFkbyAsICBudl9jYW5fY2FsbGUpLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv1BvciBxdcOpIHJhesOzbiBsYXMgcGVyc29uYXMgbm8gdmFjdW5hbiBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgQ8OzbW8gc2UgZW50ZXJhIGxhIHBvYmxhY2nDs24gZGUgbGEgVkFOQ0FODQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iRSBNaXN0aSIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX0VfTWlzdGkgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJFIE1pc3RpIikgJT4lDQogICAgc2VsZWN0KHZhbmNhbl9vdXRjb21lICwJZXNjdWNob192YW5jYW4sIHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEpDQoNCmNvbHVtbl9vcmRlciA8LSBjKCJ2YW5jYW5fb3V0Y29tZSIsCSJlc2N1Y2hvX3ZhbmNhbiIsICJ2aV9wZXJpZm9uZW8iLCAgInZpX211bmkiLCAgInZpX2ZhY2Vib29rIiwgICJ2aV92aV9kZV9wYXNhZGEiLCAgInZpX3ZlY2lubyIsICAidmlfcmFkaW8iLCAgICJ2aV9hZmljaGUiLCAgInZpX3R2IiwgICJ2aV93aGF0c2FwcCIsICAidmlfcG9zdGEiKQ0KZGF0YV90YWJsZV8xX0VfTWlzdGkgPC0gZGF0YV90YWJsZV8xX0VfTWlzdGlbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfRV9NaXN0aSA8LSBkYXRhX3RhYmxlXzFfRV9NaXN0aSAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfRV9NaXN0aQ0KDQpgYGANCg0KDQoNCiMgKipNaWNyb3JlZDogRiBCb2xvZ25lc2kqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IkYgQm9sb2duZXNpIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJGIEJvbG9nbmVzaSIpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEgKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Dw7NtbyB0ZSBlbnRlcmFzdGUgZGUgbGEgVkFOQ0FOPyIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQoNCg0KYGBgDQoNCg0KDQojIyBQYXJ0aWNpcGFjacOzbiBlbiBsYSBWQU5DQU4gKE5vL1PDrSkgc2kgbGEgcG9ibGFjacOzbiBzZSBlbnRlcsOzIGRlIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV90YWJsZV8xX0ZfQm9sb2duZXNpICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iRiBCb2xvZ25lc2kiKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfRl9Cb2xvZ25lc2kgPC0gZGF0YV90YWJsZV8xX0ZfQm9sb2duZXNpWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX0ZfQm9sb2duZXNpIDwtIGRhdGFfdGFibGVfMV9GX0JvbG9nbmVzaSAlPiUNCiAgdGJsX3N1bW1hcnkoYnkgPSB2YW5jYW5fb3V0Y29tZSwNCiAgICAgICAgICAgICAgbWlzc2luZyA9ICJubyIsDQogICAgICAgICAgICAgIGRpZ2l0cyA9IGFsbF9jYXRlZ29yaWNhbCgpIH4gMSkgJT4lDQogIGFkZF9vdmVyYWxsKCkgJT4lDQogIGFkZF9wKCkNCnRhYmxhXzFfRl9Cb2xvZ25lc2kNCg0KYGBgDQoNCg0KDQojICoqTWljcm9yZWQ6IEcgU2FuIE1hcnRpbioqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iRyBTYW4gTWFydGluIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJHIFNhbiBNYXJ0aW4iKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9HX1Nhbl9NYXJ0aW4gIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJHIFNhbiBNYXJ0aW4iKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfR19TYW5fTWFydGluIDwtIGRhdGFfdGFibGVfMV9HX1Nhbl9NYXJ0aW5bLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfR19TYW5fTWFydGluIDwtIGRhdGFfdGFibGVfMV9HX1Nhbl9NYXJ0aW4gJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX0dfU2FuX01hcnRpbg0KDQpgYGANCg0KDQojICoqTWljcm9yZWQ6IEh1bnRlcioqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iSHVudGVyIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJIdW50ZXIiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9IdW50ZXIgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJIdW50ZXIiKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfSHVudGVyIDwtIGRhdGFfdGFibGVfMV9IdW50ZXJbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfSHVudGVyIDwtIGRhdGFfdGFibGVfMV9IdW50ZXIgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX0h1bnRlcg0KDQpgYGANCg0KDQojICoqTWljcm9yZWQ6IE0gQ2FzdGlsbGEqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09Ik0gQ2FzdGlsbGEiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09Ik0gQ2FzdGlsbGEiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9NX0Nhc3RpbGxhICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iTSBDYXN0aWxsYSIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9NX0Nhc3RpbGxhIDwtIGRhdGFfdGFibGVfMV9NX0Nhc3RpbGxhWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX01fQ2FzdGlsbGEgPC0gZGF0YV90YWJsZV8xX01fQ2FzdGlsbGEgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX01fQ2FzdGlsbGENCg0KYGBgDQoNCg0KIyAqKk1pY3JvcmVkOiBNIE1lbGdhcioqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iTSBNZWxnYXIiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09Ik0gTWVsZ2FyIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfTV9NZWxnYXIgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJNIE1lbGdhciIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9NX01lbGdhciA8LSBkYXRhX3RhYmxlXzFfTV9NZWxnYXJbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfTV9NZWxnYXIgPC0gZGF0YV90YWJsZV8xX01fTWVsZ2FyICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9NX01lbGdhcg0KDQpgYGANCg0KDQojICoqTWljcm9yZWQ6IFBhdWNhcnBhdGEqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlBhdWNhcnBhdGEiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlBhdWNhcnBhdGEiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9QYXVjYXJwYXRhICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iUGF1Y2FycGF0YSIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9QYXVjYXJwYXRhIDwtIGRhdGFfdGFibGVfMV9QYXVjYXJwYXRhWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX1BhdWNhcnBhdGEgPC0gZGF0YV90YWJsZV8xX1BhdWNhcnBhdGEgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX1BhdWNhcnBhdGENCg0KYGBgDQoNCg0KIyAqKk1pY3JvcmVkOiBQZWRyZWdhbCoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iUGVkcmVnYWwiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlBlZHJlZ2FsIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfUGVkcmVnYWwgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJQZWRyZWdhbCIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9QZWRyZWdhbCA8LSBkYXRhX3RhYmxlXzFfUGVkcmVnYWxbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfUGVkcmVnYWwgPC0gZGF0YV90YWJsZV8xX1BlZHJlZ2FsICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9QZWRyZWdhbA0KDQpgYGANCg0KDQojICoqTWljcm9yZWQ6IFRpYWJheWEqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlRpYWJheWEiKSAlPiUgDQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKG52X25vX3NhYmlhICwgIG52X3Npbl90aWVtcG8gLCBudl9jYWNob3JybyAsICBudl9ub19oYWJpYV9uYWRpZSAsICBudl95YV92YWN1bmFkbyAsICBudl9zZV9lbnRlcm9fdGFyZGUgLCBudl9jYW5fYWdyZXNpdm8gLCAgbnZfdmFuY2FuX2xlam9zICwgIG52X29jdXBhZG8gLCAgbnZfY2FuX2NhbGxlKSwgbmFtZXNfdG8gPSAidmFyaWFibGUiLCB2YWx1ZXNfdG8gPSAidmFsdWUiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWx1ZSkpICU+JQ0KICBmaWx0ZXIodmFsdWUgPT0gMSkgJT4lDQogIGNvdW50KHZhcmlhYmxlKSAlPiUNCiAgbXV0YXRlKHBjdCA9IG4gLyBzdW0obikgKiAxMDAsDQogICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChwY3QsIDIpLCAiJSAoIiwgbiwgIikiKSkgJT4lDQogIGFycmFuZ2UobikgJT4lDQogIG11dGF0ZSh2YXJpYWJsZSA9IGZhY3Rvcih2YXJpYWJsZSwgbGV2ZWxzID0gdmFyaWFibGUpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gdmFyaWFibGUsIHggPSBwY3QsIGZpbGwgPSB2YXJpYWJsZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiaWRlbnRpdHkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCksIGhqdXN0ID0gLTAuMSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxMDApKSArDQogIGxhYnModGl0bGUgPSAiwr9Qb3IgcXXDqSByYXrDs24gbGFzIHBlcnNvbmFzIG5vIHZhY3VuYW4gZW4gbGEgVkFOQ0FOIiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCmBgYA0KDQoNCiMjIEPDs21vIHNlIGVudGVyYSBsYSBwb2JsYWNpw7NuIGRlIGxhIFZBTkNBTg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlRpYWJheWEiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9UaWFiYXlhICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iVGlhYmF5YSIpICU+JQ0KICAgIHNlbGVjdCh2YW5jYW5fb3V0Y29tZSAsCWVzY3VjaG9fdmFuY2FuLCB2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhKQ0KDQpjb2x1bW5fb3JkZXIgPC0gYygidmFuY2FuX291dGNvbWUiLAkiZXNjdWNob192YW5jYW4iLCAidmlfcGVyaWZvbmVvIiwgICJ2aV9tdW5pIiwgICJ2aV9mYWNlYm9vayIsICAidmlfdmlfZGVfcGFzYWRhIiwgICJ2aV92ZWNpbm8iLCAgInZpX3JhZGlvIiwgICAidmlfYWZpY2hlIiwgICJ2aV90diIsICAidmlfd2hhdHNhcHAiLCAgInZpX3Bvc3RhIikNCmRhdGFfdGFibGVfMV9UaWFiYXlhIDwtIGRhdGFfdGFibGVfMV9UaWFiYXlhWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX1RpYWJheWEgPC0gZGF0YV90YWJsZV8xX1RpYWJheWEgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX1RpYWJheWENCg0KYGBgDQoNCg0KIyAqKk1pY3JvcmVkOiBWIFIgSGlub2pvc2EqKg0KICANCg0KIyMjIFJhem9uZXMgY29tdW5lcyBwb3IgbGFzIGN1YWxlcyBsYSBwb2JsYWNpw7NuIG5vIHZhY3VuYSBhIHN1IHBlcnJvIGVuIGxhIFZBTkNBTg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCg0KZGF0YV9lbmN1ZXN0YXNfMV9tciAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlYgUiBIaW5vam9zYSIpICU+JSANCiAgICBwaXZvdF9sb25nZXIoY29scyA9IGMobnZfbm9fc2FiaWEgLCAgbnZfc2luX3RpZW1wbyAsIG52X2NhY2hvcnJvICwgIG52X25vX2hhYmlhX25hZGllICwgIG52X3lhX3ZhY3VuYWRvICwgIG52X3NlX2VudGVyb190YXJkZSAsIG52X2Nhbl9hZ3Jlc2l2byAsICBudl92YW5jYW5fbGVqb3MgLCAgbnZfb2N1cGFkbyAsICBudl9jYW5fY2FsbGUpLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv1BvciBxdcOpIHJhesOzbiBsYXMgcGVyc29uYXMgbm8gdmFjdW5hbiBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgQ8OzbW8gc2UgZW50ZXJhIGxhIHBvYmxhY2nDs24gZGUgbGEgVkFOQ0FODQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iViBSIEhpbm9qb3NhIikgJT4lIA0KICBwaXZvdF9sb25nZXIoY29scyA9IGModmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSApLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv0PDs21vIHRlIGVudGVyYXN0ZSBkZSBsYSBWQU5DQU4/IiwNCiAgICAgICB5ID0gIlZhcmlhYmxlIiwNCiAgICAgICB4ID0gIlBvcmNlbnRhamUiKSArDQogIHRoZW1lX2J3KCkNCg0KDQpgYGANCg0KDQoNCiMjIFBhcnRpY2lwYWNpw7NuIGVuIGxhIFZBTkNBTiAoTm8vU8OtKSBzaSBsYSBwb2JsYWNpw7NuIHNlIGVudGVyw7MgZGUgbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX3RhYmxlXzFfVl9SX0hpbm9qb3NhICA8LSBkYXRhX2VuY3Vlc3Rhc18xICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iViBSIEhpbm9qb3NhIikgJT4lDQogICAgc2VsZWN0KHZhbmNhbl9vdXRjb21lICwJZXNjdWNob192YW5jYW4sIHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEpDQoNCmNvbHVtbl9vcmRlciA8LSBjKCJ2YW5jYW5fb3V0Y29tZSIsCSJlc2N1Y2hvX3ZhbmNhbiIsICJ2aV9wZXJpZm9uZW8iLCAgInZpX211bmkiLCAgInZpX2ZhY2Vib29rIiwgICJ2aV92aV9kZV9wYXNhZGEiLCAgInZpX3ZlY2lubyIsICAidmlfcmFkaW8iLCAgICJ2aV9hZmljaGUiLCAgInZpX3R2IiwgICJ2aV93aGF0c2FwcCIsICAidmlfcG9zdGEiKQ0KZGF0YV90YWJsZV8xX1ZfUl9IaW5vam9zYSA8LSBkYXRhX3RhYmxlXzFfVl9SX0hpbm9qb3NhWywgY29sdW1uX29yZGVyXQ0KDQp0YWJsYV8xX1ZfUl9IaW5vam9zYSA8LSBkYXRhX3RhYmxlXzFfVl9SX0hpbm9qb3NhICU+JQ0KICB0Ymxfc3VtbWFyeShieSA9IHZhbmNhbl9vdXRjb21lLA0KICAgICAgICAgICAgICBtaXNzaW5nID0gIm5vIiwNCiAgICAgICAgICAgICAgZGlnaXRzID0gYWxsX2NhdGVnb3JpY2FsKCkgfiAxKSAlPiUNCiAgYWRkX292ZXJhbGwoKSAlPiUNCiAgYWRkX3AoKQ0KdGFibGFfMV9WX1JfSGlub2pvc2ENCg0KYGBgDQoNCg0KDQojICoqTWljcm9yZWQ6IFlhbmFodWFyYSoqDQogIA0KDQojIyMgUmF6b25lcyBjb211bmVzIHBvciBsYXMgY3VhbGVzIGxhIHBvYmxhY2nDs24gbm8gdmFjdW5hIGEgc3UgcGVycm8gZW4gbGEgVkFOQ0FODQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KDQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iWWFuYWh1YXJhIikgJT4lIA0KICAgIHBpdm90X2xvbmdlcihjb2xzID0gYyhudl9ub19zYWJpYSAsICBudl9zaW5fdGllbXBvICwgbnZfY2FjaG9ycm8gLCAgbnZfbm9faGFiaWFfbmFkaWUgLCAgbnZfeWFfdmFjdW5hZG8gLCAgbnZfc2VfZW50ZXJvX3RhcmRlICwgbnZfY2FuX2FncmVzaXZvICwgIG52X3ZhbmNhbl9sZWpvcyAsICBudl9vY3VwYWRvICwgIG52X2Nhbl9jYWxsZSksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/UG9yIHF1w6kgcmF6w7NuIGxhcyBwZXJzb25hcyBubyB2YWN1bmFuIGVuIGxhIFZBTkNBTiIsDQogICAgICAgeSA9ICJWYXJpYWJsZSIsDQogICAgICAgeCA9ICJQb3JjZW50YWplIikgKw0KICB0aGVtZV9idygpDQpgYGANCg0KDQojIyBDw7NtbyBzZSBlbnRlcmEgbGEgcG9ibGFjacOzbiBkZSBsYSBWQU5DQU4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRX0NCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJZYW5haHVhcmEiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9ZYW5haHVhcmEgIDwtIGRhdGFfZW5jdWVzdGFzXzEgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJZYW5haHVhcmEiKSAlPiUNCiAgICBzZWxlY3QodmFuY2FuX291dGNvbWUgLAllc2N1Y2hvX3ZhbmNhbiwgdmlfcGVyaWZvbmVvICx2aV9tdW5pICwgdmlfZmFjZWJvb2sgLCB2aV92aV9kZV9wYXNhZGEgLCB2aV92ZWNpbm8gLCB2aV9yYWRpbyAsIHZpX2FmaWNoZSAsIHZpX3R2ICwgdmlfd2hhdHNhcHAgLCB2aV9wb3N0YSkNCg0KY29sdW1uX29yZGVyIDwtIGMoInZhbmNhbl9vdXRjb21lIiwJImVzY3VjaG9fdmFuY2FuIiwgInZpX3Blcmlmb25lbyIsICAidmlfbXVuaSIsICAidmlfZmFjZWJvb2siLCAgInZpX3ZpX2RlX3Bhc2FkYSIsICAidmlfdmVjaW5vIiwgICJ2aV9yYWRpbyIsICAgInZpX2FmaWNoZSIsICAidmlfdHYiLCAgInZpX3doYXRzYXBwIiwgICJ2aV9wb3N0YSIpDQpkYXRhX3RhYmxlXzFfWWFuYWh1YXJhIDwtIGRhdGFfdGFibGVfMV9ZYW5haHVhcmFbLCBjb2x1bW5fb3JkZXJdDQoNCnRhYmxhXzFfWWFuYWh1YXJhIDwtIGRhdGFfdGFibGVfMV9ZYW5haHVhcmEgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX1lhbmFodWFyYQ0KDQpgYGANCg0KDQojICoqTWljcm9yZWQ6IFphbWFjb2xhKioNCiAgDQoNCiMjIyBSYXpvbmVzIGNvbXVuZXMgcG9yIGxhcyBjdWFsZXMgbGEgcG9ibGFjacOzbiBubyB2YWN1bmEgYSBzdSBwZXJybyBlbiBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfZW5jdWVzdGFzXzFfbXIgJT4lDQogIGZpbHRlciAocGVycm9fY2FzYT09MSwgbWljcm9yZWQ9PSJaYW1hY29sYSIpICU+JSANCiAgICBwaXZvdF9sb25nZXIoY29scyA9IGMobnZfbm9fc2FiaWEgLCAgbnZfc2luX3RpZW1wbyAsIG52X2NhY2hvcnJvICwgIG52X25vX2hhYmlhX25hZGllICwgIG52X3lhX3ZhY3VuYWRvICwgIG52X3NlX2VudGVyb190YXJkZSAsIG52X2Nhbl9hZ3Jlc2l2byAsICBudl92YW5jYW5fbGVqb3MgLCAgbnZfb2N1cGFkbyAsICBudl9jYW5fY2FsbGUpLCBuYW1lc190byA9ICJ2YXJpYWJsZSIsIHZhbHVlc190byA9ICJ2YWx1ZSIpICU+JQ0KICBmaWx0ZXIoIWlzLm5hKHZhbHVlKSkgJT4lDQogIGZpbHRlcih2YWx1ZSA9PSAxKSAlPiUNCiAgY291bnQodmFyaWFibGUpICU+JQ0KICBtdXRhdGUocGN0ID0gbiAvIHN1bShuKSAqIDEwMCwNCiAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKHBjdCwgMiksICIlICgiLCBuLCAiKSIpKSAlPiUNCiAgYXJyYW5nZShuKSAlPiUNCiAgbXV0YXRlKHZhcmlhYmxlID0gZmFjdG9yKHZhcmlhYmxlLCBsZXZlbHMgPSB2YXJpYWJsZSkpICU+JQ0KICBnZ3Bsb3QoYWVzKHkgPSB2YXJpYWJsZSwgeCA9IHBjdCwgZmlsbCA9IHZhcmlhYmxlKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJpZGVudGl0eSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGxhYmVsKSwgaGp1c3QgPSAtMC4xKSArDQogIHNjYWxlX3hfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEwMCkpICsNCiAgbGFicyh0aXRsZSA9ICLCv1BvciBxdcOpIHJhesOzbiBsYXMgcGVyc29uYXMgbm8gdmFjdW5hbiBlbiBsYSBWQU5DQU4iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KYGBgDQoNCg0KIyMgQ8OzbW8gc2UgZW50ZXJhIGxhIHBvYmxhY2nDs24gZGUgbGEgVkFOQ0FODQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQpkYXRhX2VuY3Vlc3Rhc18xX21yICU+JQ0KICBmaWx0ZXIgKHBlcnJvX2Nhc2E9PTEsIG1pY3JvcmVkPT0iWmFtYWNvbGEiKSAlPiUgDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyh2aV9wZXJpZm9uZW8gLHZpX211bmkgLCB2aV9mYWNlYm9vayAsIHZpX3ZpX2RlX3Bhc2FkYSAsIHZpX3ZlY2lubyAsIHZpX3JhZGlvICwgdmlfYWZpY2hlICwgdmlfdHYgLCB2aV93aGF0c2FwcCAsIHZpX3Bvc3RhICksIG5hbWVzX3RvID0gInZhcmlhYmxlIiwgdmFsdWVzX3RvID0gInZhbHVlIikgJT4lDQogIGZpbHRlcighaXMubmEodmFsdWUpKSAlPiUNCiAgZmlsdGVyKHZhbHVlID09IDEpICU+JQ0KICBjb3VudCh2YXJpYWJsZSkgJT4lDQogIG11dGF0ZShwY3QgPSBuIC8gc3VtKG4pICogMTAwLA0KICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQocGN0LCAyKSwgIiUgKCIsIG4sICIpIikpICU+JQ0KICBhcnJhbmdlKG4pICU+JQ0KICBtdXRhdGUodmFyaWFibGUgPSBmYWN0b3IodmFyaWFibGUsIGxldmVscyA9IHZhcmlhYmxlKSkgJT4lDQogIGdncGxvdChhZXMoeSA9IHZhcmlhYmxlLCB4ID0gcGN0LCBmaWxsID0gdmFyaWFibGUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImlkZW50aXR5IikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gbGFiZWwpLCBoanVzdCA9IC0wLjEpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMTAwKSkgKw0KICBsYWJzKHRpdGxlID0gIsK/Q8OzbW8gdGUgZW50ZXJhc3RlIGRlIGxhIFZBTkNBTj8iLA0KICAgICAgIHkgPSAiVmFyaWFibGUiLA0KICAgICAgIHggPSAiUG9yY2VudGFqZSIpICsNCiAgdGhlbWVfYncoKQ0KDQoNCmBgYA0KDQoNCg0KIyMgUGFydGljaXBhY2nDs24gZW4gbGEgVkFOQ0FOIChOby9Tw60pIHNpIGxhIHBvYmxhY2nDs24gc2UgZW50ZXLDsyBkZSBsYSBWQU5DQU4NCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIGVjaG89RkFMU0V9DQoNCmRhdGFfdGFibGVfMV9aYW1hY29sYSAgPC0gZGF0YV9lbmN1ZXN0YXNfMSAlPiUNCiAgZmlsdGVyIChwZXJyb19jYXNhPT0xLCBtaWNyb3JlZD09IlphbWFjb2xhIikgJT4lDQogICAgc2VsZWN0KHZhbmNhbl9vdXRjb21lICwJZXNjdWNob192YW5jYW4sIHZpX3Blcmlmb25lbyAsdmlfbXVuaSAsIHZpX2ZhY2Vib29rICwgdmlfdmlfZGVfcGFzYWRhICwgdmlfdmVjaW5vICwgdmlfcmFkaW8gLCB2aV9hZmljaGUgLCB2aV90diAsIHZpX3doYXRzYXBwICwgdmlfcG9zdGEpDQoNCmNvbHVtbl9vcmRlciA8LSBjKCJ2YW5jYW5fb3V0Y29tZSIsCSJlc2N1Y2hvX3ZhbmNhbiIsICJ2aV9wZXJpZm9uZW8iLCAgInZpX211bmkiLCAgInZpX2ZhY2Vib29rIiwgICJ2aV92aV9kZV9wYXNhZGEiLCAgInZpX3ZlY2lubyIsICAidmlfcmFkaW8iLCAgICJ2aV9hZmljaGUiLCAgInZpX3R2IiwgICJ2aV93aGF0c2FwcCIsICAidmlfcG9zdGEiKQ0KZGF0YV90YWJsZV8xX1phbWFjb2xhIDwtIGRhdGFfdGFibGVfMV9aYW1hY29sYVssIGNvbHVtbl9vcmRlcl0NCg0KdGFibGFfMV9aYW1hY29sYSA8LSBkYXRhX3RhYmxlXzFfWmFtYWNvbGEgJT4lDQogIHRibF9zdW1tYXJ5KGJ5ID0gdmFuY2FuX291dGNvbWUsDQogICAgICAgICAgICAgIG1pc3NpbmcgPSAibm8iLA0KICAgICAgICAgICAgICBkaWdpdHMgPSBhbGxfY2F0ZWdvcmljYWwoKSB+IDEpICU+JQ0KICBhZGRfb3ZlcmFsbCgpICU+JQ0KICBhZGRfcCgpDQp0YWJsYV8xX1phbWFjb2xhDQoNCmBgYA0K