panda.tests.safety package

Submodules

panda.tests.safety.common module

class panda.tests.safety.common.AngleSteeringSafetyTest(methodName='runTest')[source]

Bases: PandaSafetyTestBase

ANGLE_RATE_BP: list[float]
ANGLE_RATE_DOWN: list[float]
ANGLE_RATE_UP: list[float]
DEG_TO_CAN: float
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_angle_cmd_when_disabled()[source]
test_angle_cmd_when_enabled(max_angle=300)[source]
test_steering_angle_measurements(max_angle=300)[source]
test_vehicle_speed_measurements()[source]
class panda.tests.safety.common.CANPackerPanda[source]

Bases: CANPacker

make_can_msg_panda(name_or_addr, bus, values, fix_checksum=None)[source]
class panda.tests.safety.common.DriverTorqueSteeringSafetyTest(methodName='runTest')[source]

Bases: TorqueSteeringSafetyTestBase, ABC

DRIVER_TORQUE_ALLOWANCE = 0
DRIVER_TORQUE_FACTOR = 0
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_against_torque_driver()[source]
test_non_realtime_limit_up()[source]
test_realtime_limits()[source]
test_reset_driver_torque_measurements()[source]
class panda.tests.safety.common.LongitudinalAccelSafetyTest(methodName='runTest')[source]

Bases: PandaSafetyTestBase, ABC

INACTIVE_ACCEL: float = 0.0
MAX_ACCEL: float = 2.0
MIN_ACCEL: float = -3.5
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_accel_actuation_limits(stock_longitudinal=False)[source]
test_accel_limits_correct()[source]
class panda.tests.safety.common.LongitudinalGasBrakeSafetyTest(methodName='runTest')[source]

Bases: PandaSafetyTestBase, ABC

INACTIVE_GAS = 0
MAX_BRAKE: int | None = None
MAX_GAS: int | None = None
MAX_POSSIBLE_BRAKE: int | None = None
MAX_POSSIBLE_GAS: int | None = None
MIN_BRAKE: int = 0
MIN_GAS: int = 0
test_brake_safety_check()[source]
test_gas_brake_limits_correct()[source]
test_gas_safety_check()[source]
class panda.tests.safety.common.MotorTorqueSteeringSafetyTest(methodName='runTest')[source]

Bases: TorqueSteeringSafetyTestBase, ABC

MAX_TORQUE_ERROR = 0
TORQUE_MEAS_TOLERANCE = 0
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_exceed_torque_sensor()[source]
test_non_realtime_limit_down()[source]
test_realtime_limit_up()[source]
test_reset_torque_measurements()[source]
test_torque_absolute_limits()[source]
test_torque_measurements()[source]
class panda.tests.safety.common.PandaCarSafetyTest(methodName='runTest')[source]

Bases: PandaSafetyTest

GAS_PRESSED_THRESHOLD = 0
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = None
STANDSTILL_THRESHOLD: float | None = None
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_allow_engage_with_gas_pressed()[source]
test_allow_user_brake_at_zero_speed(_user_brake_msg=None, get_brake_pressed_prev=None)[source]
test_allow_user_regen_at_zero_speed()
test_alternative_experience_no_disengage_on_gas()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_disengage_on_gas()[source]
test_enable_control_allowed_from_cruise()[source]
test_not_allow_user_brake_when_moving(_user_brake_msg=None, get_brake_pressed_prev=None)[source]
test_not_allow_user_regen_when_moving()
test_prev_gas()[source]
test_prev_user_brake(_user_brake_msg=None, get_brake_pressed_prev=None)[source]
test_prev_user_regen()
test_relay_malfunction()[source]
test_safety_tick()[source]
test_vehicle_moving()[source]
class panda.tests.safety.common.PandaSafetyTest(methodName='runTest')[source]

Bases: PandaSafetyTestBase

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {}
FWD_BUS_LOOKUP: dict[int, int] = {}
SCANNED_ADDRS = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1887, 1888, 1889, 1890, 1891, 1892, 1893, 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1931, 1932, 1933, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1941, 1942, 1943, 1944, 1945, 1946, 1947, 1948, 1949, 1950, 1951, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 416940273, 416940529, 416940785, 416941041, 416941297, 416941553, 416941809, 416942065, 416942321, 416942577, 416942833, 416943089, 416943345, 416943601, 416943857, 416944113, 416944369, 416944625, 416944881, 416945137, 416945393, 416945649, 416945905, 416946161, 416946417, 416946673, 416946929, 416947185, 416947441, 416947697, 416947953, 416948209, 416948465, 416948721, 416948977, 416949233, 416949489, 416949745, 416950001, 416950257, 416950513, 416950769, 416951025, 416951281, 416951537, 416951793, 416952049, 416952305, 416952561, 416952817, 416953073, 416953329, 416953585, 416953841, 416954097, 416954353, 416954609, 416954865, 416955121, 416955377, 416955633, 416955889, 416956145, 416956401, 416956657, 416956913, 416957169, 416957425, 416957681, 416957937, 416958193, 416958449, 416958705, 416958961, 416959217, 416959473, 416959729, 416959985, 416960241, 416960497, 416960753, 416961009, 416961265, 416961521, 416961777, 416962033, 416962289, 416962545, 416962801, 416963057, 416963313, 416963569, 416963825, 416964081, 416964337, 416964593, 416964849, 416965105, 416965361, 416965617, 416965873, 416966129, 416966385, 416966641, 416966897, 416967153, 416967409, 416967665, 416967921, 416968177, 416968433, 416968689, 416968945, 416969201, 416969457, 416969713, 416969969, 416970225, 416970481, 416970737, 416970993, 416971249, 416971505, 416971761, 416972017, 416972273, 416972529, 416972785, 416973041, 416973297, 416973553, 416973809, 416974065, 416974321, 416974577, 416974833, 416975089, 416975345, 416975601, 416975857, 416976113, 416976369, 416976625, 416976881, 416977137, 416977393, 416977649, 416977905, 416978161, 416978417, 416978673, 416978929, 416979185, 416979441, 416979697, 416979953, 416980209, 416980465, 416980721, 416980977, 416981233, 416981489, 416981745, 416982001, 416982257, 416982513, 416982769, 416983025, 416983281, 416983537, 416983793, 416984049, 416984305, 416984561, 416984817, 416985073, 416985329, 416985585, 416985841, 416986097, 416986353, 416986609, 416986865, 416987121, 416987377, 416987633, 416987889, 416988145, 416988401, 416988657, 416988913, 416989169, 416989425, 416989681, 416989937, 416990193, 416990449, 416990705, 416990961, 416991217, 416991473, 416991729, 416991985, 416992241, 416992497, 416992753, 416993009, 416993265, 416993521, 416993777, 416994033, 416994289, 416994545, 416994801, 416995057, 416995313, 416995569, 416995825, 416996081, 416996337, 416996593, 416996849, 416997105, 416997361, 416997617, 416997873, 416998129, 416998385, 416998641, 416998897, 416999153, 416999409, 416999665, 416999921, 417000177, 417000433, 417000689, 417000945, 417001201, 417001457, 417001713, 417001969, 417002225, 417002481, 417002737, 417002993, 417003249, 417003505, 417003761, 417004017, 417004273, 417004529, 417004785, 417005041, 417005297, 417005553, 417005809, 417006065, 417006321, 417006577, 417006833, 417007089, 417007345, 417007601, 417007857, 417008113, 417008369, 417008625, 417008881, 417009137, 417009393, 417009649, 417009905, 417010161, 417010417, 417010673, 417010929, 417011185, 417011441, 417011697, 417011953, 417012209, 417012465, 417012721, 417012977, 417013233, 417013489, 417013745, 417014001, 417014257, 417014513, 417014769, 417015025, 417015281, 417015537, 417015793, 417016049, 417016305, 417016561, 417016817, 417017073, 417017329, 417017585, 417017841, 417018097, 417018353, 417018609, 417018865, 417019121, 417019377, 417019633, 417019889, 417020145, 417020401, 417020657, 417020913, 417021169, 417021425, 417021681, 417021937, 417022193, 417022449, 417022705, 417022961, 417023217, 417023473, 417023729, 417023985, 417024241, 417024497, 417024753, 417025009, 417025265, 417025521, 417025777, 417026033, 417026289, 417026545, 417026801, 417027057, 417027313, 417027569, 417027825, 417028081, 417028337, 417028593, 417028849, 417029105, 417029361, 417029617, 417029873, 417030129, 417030385, 417030641, 417030897, 417031153, 417031409, 417031665, 417031921, 417032177, 417032433, 417032689, 417032945, 417033201, 417033457, 417033713, 417033969, 417034225, 417034481, 417034737, 417034993, 417035249, 417035505, 417035761, 417036017, 417036273, 417036529, 417036785, 417037041, 417037297, 417037553, 417037809, 417038065, 417038321, 417038577, 417038833, 417039089, 417039345, 417039601, 417039857, 417040113, 417040369, 417040625, 417040881, 417041137, 417041393, 417041649, 417041905, 417042161, 417042417, 417042673, 417042929, 417043185, 417043441, 417043697, 417043953, 417044209, 417044465, 417044721, 417044977, 417045233, 417045489, 417045745, 417046001, 417046257, 417046513, 417046769, 417047025, 417047281, 417047537, 417047793, 417048049, 417048305, 417048561, 417048817, 417049073, 417049329, 417049585, 417049841, 417050097, 417050353, 417050609, 417050865, 417051121, 417051377, 417051633, 417051889, 417052145, 417052401, 417052657, 417052913, 417053169, 417053425, 417053681, 417053937, 417054193, 417054449, 417054705, 417054961, 417055217, 417055473, 417055729, 417055985, 417056241, 417056497, 417056753, 417057009, 417057265, 417057521, 417057777, 417058033, 417058289, 417058545, 417058801, 417059057, 417059313, 417059569, 417059825, 417060081, 417060337, 417060593, 417060849, 417061105, 417061361, 417061617, 417061873, 417062129, 417062385, 417062641, 417062897, 417063153, 417063409, 417063665, 417063921, 417064177, 417064433, 417064689, 417064945, 417065201, 417065457, 417065713, 417065969, 417066225, 417066481, 417066737, 417066993, 417067249, 417067505, 417067761, 417068017, 417068273, 417068529, 417068785, 417069041, 417069297, 417069553, 417069809, 417070065, 417070321, 417070577, 417070833, 417071089, 13056, 13057, 13058, 13059, 13060, 13061, 13062, 13063, 13064, 13065, 13066, 13067, 13068, 13069, 13070, 13071, 13072, 13073, 13074, 13075, 13076, 13077, 13078, 13079, 13080, 13081, 13082, 13083, 13084, 13085, 13086, 13087, 13088, 13089, 13090, 13091, 13092, 13093, 13094, 13095, 13096, 13097, 13098, 13099, 13100, 13101, 13102, 13103, 13104, 13105, 13106, 13107, 13108, 13109, 13110, 13111, 13112, 13113, 13114, 13115, 13116, 13117, 13118, 13119, 13120, 13121, 13122, 13123, 13124, 13125, 13126, 13127, 13128, 13129, 13130, 13131, 13132, 13133, 13134, 13135, 13136, 13137, 13138, 13139, 13140, 13141, 13142, 13143, 13144, 13145, 13146, 13147, 13148, 13149, 13150, 13151, 13152, 13153, 13154, 13155, 13156, 13157, 13158, 13159, 13160, 13161, 13162, 13163, 13164, 13165, 13166, 13167, 13168, 13169, 13170, 13171, 13172, 13173, 13174, 13175, 13176, 13177, 13178, 13179, 13180, 13181, 13182, 13183, 13184, 13185, 13186, 13187, 13188, 13189, 13190, 13191, 13192, 13193, 13194, 13195, 13196, 13197, 13198, 13199, 13200, 13201, 13202, 13203, 13204, 13205, 13206, 13207, 13208, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13219, 13220, 13221, 13222, 13223, 13224, 13225, 13226, 13227, 13228, 13229, 13230, 13231, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13242, 13243, 13244, 13245, 13246, 13247, 13248, 13249, 13250, 13251, 13252, 13253, 13254, 13255, 13256, 13257, 13258, 13259, 13260, 13261, 13262, 13263, 13264, 13265, 13266, 13267, 13268, 13269, 13270, 13271, 13272, 13273, 13274, 13275, 13276, 13277, 13278, 13279, 13280, 13281, 13282, 13283, 13284, 13285, 13286, 13287, 13288, 13289, 13290, 13291, 13292, 13293, 13294, 13295, 13296, 13297, 13298, 13299, 13300, 13301, 13302, 13303, 13304, 13305, 13306, 13307, 13308, 13309, 13310, 13311]
TX_MSGS: list[list[int]] | None = None
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_default_controls_not_allowed()[source]
test_fwd_hook()[source]
test_manually_enable_controls_allowed()[source]
test_spam_can_buses()[source]
test_tx_hook_on_wrong_safety_mode()[source]
test_tx_msg_in_scanned_range()[source]
class panda.tests.safety.common.PandaSafetyTestBase(methodName='runTest')[source]

Bases: TestCase

safety: Panda
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

class panda.tests.safety.common.SteerRequestCutSafetyTest(methodName='runTest')[source]

Bases: TorqueSteeringSafetyTestBase, ABC

MAX_INVALID_STEERING_FRAMES: int
MIN_VALID_STEERING_FRAMES: int
MIN_VALID_STEERING_RT_INTERVAL: int
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_steer_req_bit_frames()[source]

Certain safety modes implement some tolerance on their steer request bits matching the requested torque to avoid a steering fault or lockout and maintain torque. This tests:

  • We can’t cut torque for more than one frame

  • We can’t cut torque until at least the minimum number of matching steer_req messages

  • We can always recover from violations if steer_req=1

test_steer_req_bit_multi_invalid()[source]

For safety modes allowing multiple consecutive invalid frames, this ensures that once a valid frame is sent after an invalid frame (even without sending the max number of allowed invalid frames), all counters are reset.

test_steer_req_bit_realtime()[source]
Realtime safety for cutting steer request bit. This tests:
  • That we allow messages with mismatching steer request bit if time from last is >= MIN_VALID_STEERING_RT_INTERVAL

  • That frame mismatch safety does not interfere with this test

class panda.tests.safety.common.TorqueSteeringSafetyTestBase(methodName='runTest')[source]

Bases: PandaSafetyTestBase, ABC

MAX_RATE_DOWN = 0
MAX_RATE_UP = 0
MAX_RT_DELTA = 0
MAX_TORQUE = 0
NO_STEER_REQ_BIT = False
RT_INTERVAL = 0
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_non_realtime_limit_up()[source]
test_steer_req_bit()[source]

Asserts all torque safety modes check the steering request bit

test_steer_safety_check()[source]
panda.tests.safety.common.add_regen_tests(cls)[source]

Dynamically adds regen tests for all user brake tests.

panda.tests.safety.common.make_msg(bus, addr, length=8, dat=None)[source]
panda.tests.safety.common.sign_of(a)[source]

panda.tests.safety.hyundai_common module

class panda.tests.safety.hyundai_common.Buttons[source]

Bases: object

CANCEL = 4
NONE = 0
RESUME = 1
SET = 2
class panda.tests.safety.hyundai_common.HyundaiButtonBase[source]

Bases: object

BUTTONS_TX_BUS = 0
SCC_BUS = 0
test_button_sends()[source]

Only RES and CANCEL buttons are allowed - RES allowed while controls allowed - CANCEL allowed while cruise is enabled

test_enable_control_allowed_from_cruise()[source]

Hyundai non-longitudinal only enables on PCM rising edge and recent button press. Tests PCM enabling with: - disallowed: No buttons - disallowed: Buttons that don’t enable cruise - allowed: Buttons that do enable cruise - allowed: Main button with all above combinations

test_sampling_cruise_buttons()[source]

Test that we allow controls on recent button press, but not as button leaves sliding window

class panda.tests.safety.hyundai_common.HyundaiLongitudinalBase(methodName='runTest')[source]

Bases: LongitudinalAccelSafetyTest

DISABLED_ECU_ACTUATION_MSG: tuple[int, int]
DISABLED_ECU_UDS_MSG: tuple[int, int]
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_button_sends()[source]
test_cancel_button()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_disabled_ecu_alive()[source]

If the ECU knockout failed, make sure the relay malfunction is shown

test_enable_control_allowed_from_cruise()[source]
test_sampling_cruise_buttons()[source]
test_set_resume_buttons()[source]

SET and RESUME enter controls allowed on their falling edge.

test_tester_present_allowed()[source]

Ensure tester present diagnostic message is allowed to keep ECU knocked out for longitudinal control.

panda.tests.safety.test_body module

class panda.tests.safety.test_body.TestBody(methodName='runTest')[source]

Bases: PandaSafetyTest

TX_MSGS: list[list[int]] | None = [[592, 0], [593, 0], [848, 0], [849, 0], [1, 0], [1, 1], [1, 2], [1, 3]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_can_flasher()[source]
test_rx_hook()[source]
test_tx_hook()[source]

panda.tests.safety.test_chrysler module

class panda.tests.safety.test_chrysler.TestChryslerRamDTSafety(methodName='runTest')[source]

Bases: TestChryslerSafety

DAS_BUS = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [166, 250]}
LKAS_ACTIVE_VALUE = 2
MAX_RATE_DOWN = 6
MAX_RATE_UP = 6
MAX_TORQUE = 350
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (166,)}
TX_MSGS: list[list[int]] | None = [[177, 2], [166, 0], [250, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_chrysler.TestChryslerRamHDSafety(methodName='runTest')[source]

Bases: TestChryslerSafety

DAS_BUS = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [629, 630]}
LKAS_ACTIVE_VALUE = 2
MAX_RATE_DOWN = 14
MAX_RATE_UP = 14
MAX_RT_DELTA = 182
MAX_TORQUE = 361
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (630,)}
TX_MSGS: list[list[int]] | None = [[629, 0], [630, 0], [570, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_chrysler.TestChryslerSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, MotorTorqueSteeringSafetyTest

DAS_BUS = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [658, 678]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
LKAS_ACTIVE_VALUE = 1
MAX_RATE_DOWN = 3
MAX_RATE_UP = 3
MAX_RT_DELTA = 112
MAX_TORQUE = 261
MAX_TORQUE_ERROR = 80
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (658,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0
TX_MSGS: list[list[int]] | None = [[571, 0], [658, 0], [678, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_buttons()[source]

panda.tests.safety.test_defaults module

class panda.tests.safety.test_defaults.TestAllOutput(methodName='runTest')[source]

Bases: TestDefaultRxHookBase

TX_MSGS: list[list[int]] | None = [[0, 0], [0, 1], [0, 2], [0, 3], [1, 0], [1, 1], [1, 2], [1, 3], [2, 0], [2, 1], [2, 2], [2, 3], [3, 0], [3, 1], [3, 2], [3, 3], [4, 0], [4, 1], [4, 2], [4, 3], [5, 0], [5, 1], [5, 2], [5, 3], [6, 0], [6, 1], [6, 2], [6, 3], [7, 0], [7, 1], [7, 2], [7, 3], [8, 0], [8, 1], [8, 2], [8, 3], [9, 0], [9, 1], [9, 2], [9, 3], [10, 0], [10, 1], [10, 2], [10, 3], [11, 0], [11, 1], [11, 2], [11, 3], [12, 0], [12, 1], [12, 2], [12, 3], [13, 0], [13, 1], [13, 2], [13, 3], [14, 0], [14, 1], [14, 2], [14, 3], [15, 0], [15, 1], [15, 2], [15, 3], [16, 0], [16, 1], [16, 2], [16, 3], [17, 0], [17, 1], [17, 2], [17, 3], [18, 0], [18, 1], [18, 2], [18, 3], [19, 0], [19, 1], [19, 2], [19, 3], [20, 0], [20, 1], [20, 2], [20, 3], [21, 0], [21, 1], [21, 2], [21, 3], [22, 0], [22, 1], [22, 2], [22, 3], [23, 0], [23, 1], [23, 2], [23, 3], [24, 0], [24, 1], [24, 2], [24, 3], [25, 0], [25, 1], [25, 2], [25, 3], [26, 0], [26, 1], [26, 2], [26, 3], [27, 0], [27, 1], [27, 2], [27, 3], [28, 0], [28, 1], [28, 2], [28, 3], [29, 0], [29, 1], [29, 2], [29, 3], [30, 0], [30, 1], [30, 2], [30, 3], [31, 0], [31, 1], [31, 2], [31, 3], [32, 0], [32, 1], [32, 2], [32, 3], [33, 0], [33, 1], [33, 2], [33, 3], [34, 0], [34, 1], [34, 2], [34, 3], [35, 0], [35, 1], [35, 2], [35, 3], [36, 0], [36, 1], [36, 2], [36, 3], [37, 0], [37, 1], [37, 2], [37, 3], [38, 0], [38, 1], [38, 2], [38, 3], [39, 0], [39, 1], [39, 2], [39, 3], [40, 0], [40, 1], [40, 2], [40, 3], [41, 0], [41, 1], [41, 2], [41, 3], [42, 0], [42, 1], [42, 2], [42, 3], [43, 0], [43, 1], [43, 2], [43, 3], [44, 0], [44, 1], [44, 2], [44, 3], [45, 0], [45, 1], [45, 2], [45, 3], [46, 0], [46, 1], [46, 2], [46, 3], [47, 0], [47, 1], [47, 2], [47, 3], [48, 0], [48, 1], [48, 2], [48, 3], [49, 0], [49, 1], [49, 2], [49, 3], [50, 0], [50, 1], [50, 2], [50, 3], [51, 0], [51, 1], [51, 2], [51, 3], [52, 0], [52, 1], [52, 2], [52, 3], [53, 0], [53, 1], [53, 2], [53, 3], [54, 0], [54, 1], [54, 2], [54, 3], [55, 0], [55, 1], [55, 2], [55, 3], [56, 0], [56, 1], [56, 2], [56, 3], [57, 0], [57, 1], [57, 2], [57, 3], [58, 0], [58, 1], [58, 2], [58, 3], [59, 0], [59, 1], [59, 2], [59, 3], [60, 0], [60, 1], [60, 2], [60, 3], [61, 0], [61, 1], [61, 2], [61, 3], [62, 0], [62, 1], [62, 2], [62, 3], [63, 0], [63, 1], [63, 2], [63, 3], [64, 0], [64, 1], [64, 2], [64, 3], [65, 0], [65, 1], [65, 2], [65, 3], [66, 0], [66, 1], [66, 2], [66, 3], [67, 0], [67, 1], [67, 2], [67, 3], [68, 0], [68, 1], [68, 2], [68, 3], [69, 0], [69, 1], [69, 2], [69, 3], [70, 0], [70, 1], [70, 2], [70, 3], [71, 0], [71, 1], [71, 2], [71, 3], [72, 0], [72, 1], [72, 2], [72, 3], [73, 0], [73, 1], [73, 2], [73, 3], [74, 0], [74, 1], [74, 2], [74, 3], [75, 0], [75, 1], [75, 2], [75, 3], [76, 0], [76, 1], [76, 2], [76, 3], [77, 0], [77, 1], [77, 2], [77, 3], [78, 0], [78, 1], [78, 2], [78, 3], [79, 0], [79, 1], [79, 2], [79, 3], [80, 0], [80, 1], [80, 2], [80, 3], [81, 0], [81, 1], [81, 2], [81, 3], [82, 0], [82, 1], [82, 2], [82, 3], [83, 0], [83, 1], [83, 2], [83, 3], [84, 0], [84, 1], [84, 2], [84, 3], [85, 0], [85, 1], [85, 2], [85, 3], [86, 0], [86, 1], [86, 2], [86, 3], [87, 0], [87, 1], [87, 2], [87, 3], [88, 0], [88, 1], [88, 2], [88, 3], [89, 0], [89, 1], [89, 2], [89, 3], [90, 0], [90, 1], [90, 2], [90, 3], [91, 0], [91, 1], [91, 2], [91, 3], [92, 0], [92, 1], [92, 2], [92, 3], [93, 0], [93, 1], [93, 2], [93, 3], [94, 0], [94, 1], [94, 2], [94, 3], [95, 0], [95, 1], [95, 2], [95, 3], [96, 0], [96, 1], [96, 2], [96, 3], [97, 0], [97, 1], [97, 2], [97, 3], [98, 0], [98, 1], [98, 2], [98, 3], [99, 0], [99, 1], [99, 2], [99, 3], [100, 0], [100, 1], [100, 2], [100, 3], [101, 0], [101, 1], [101, 2], [101, 3], [102, 0], [102, 1], [102, 2], [102, 3], [103, 0], [103, 1], [103, 2], [103, 3], [104, 0], [104, 1], [104, 2], [104, 3], [105, 0], [105, 1], [105, 2], [105, 3], [106, 0], [106, 1], [106, 2], [106, 3], [107, 0], [107, 1], [107, 2], [107, 3], [108, 0], [108, 1], [108, 2], [108, 3], [109, 0], [109, 1], [109, 2], [109, 3], [110, 0], [110, 1], [110, 2], [110, 3], [111, 0], [111, 1], [111, 2], [111, 3], [112, 0], [112, 1], [112, 2], [112, 3], [113, 0], [113, 1], [113, 2], [113, 3], [114, 0], [114, 1], [114, 2], [114, 3], [115, 0], [115, 1], [115, 2], [115, 3], [116, 0], [116, 1], [116, 2], [116, 3], [117, 0], [117, 1], [117, 2], [117, 3], [118, 0], [118, 1], [118, 2], [118, 3], [119, 0], [119, 1], [119, 2], [119, 3], [120, 0], [120, 1], [120, 2], [120, 3], [121, 0], [121, 1], [121, 2], [121, 3], [122, 0], [122, 1], [122, 2], [122, 3], [123, 0], [123, 1], [123, 2], [123, 3], [124, 0], [124, 1], [124, 2], [124, 3], [125, 0], [125, 1], [125, 2], [125, 3], [126, 0], [126, 1], [126, 2], [126, 3], [127, 0], [127, 1], [127, 2], [127, 3], [128, 0], [128, 1], [128, 2], [128, 3], [129, 0], [129, 1], [129, 2], [129, 3], [130, 0], [130, 1], [130, 2], [130, 3], [131, 0], [131, 1], [131, 2], [131, 3], [132, 0], [132, 1], [132, 2], [132, 3], [133, 0], [133, 1], [133, 2], [133, 3], [134, 0], [134, 1], [134, 2], [134, 3], [135, 0], [135, 1], [135, 2], [135, 3], [136, 0], [136, 1], [136, 2], [136, 3], [137, 0], [137, 1], [137, 2], [137, 3], [138, 0], [138, 1], [138, 2], [138, 3], [139, 0], [139, 1], [139, 2], [139, 3], [140, 0], [140, 1], [140, 2], [140, 3], [141, 0], [141, 1], [141, 2], [141, 3], [142, 0], [142, 1], [142, 2], [142, 3], [143, 0], [143, 1], [143, 2], [143, 3], [144, 0], [144, 1], [144, 2], [144, 3], [145, 0], [145, 1], [145, 2], [145, 3], [146, 0], [146, 1], [146, 2], [146, 3], [147, 0], [147, 1], [147, 2], [147, 3], [148, 0], [148, 1], [148, 2], [148, 3], [149, 0], [149, 1], [149, 2], [149, 3], [150, 0], [150, 1], [150, 2], [150, 3], [151, 0], [151, 1], [151, 2], [151, 3], [152, 0], [152, 1], [152, 2], [152, 3], [153, 0], [153, 1], [153, 2], [153, 3], [154, 0], [154, 1], [154, 2], [154, 3], [155, 0], [155, 1], [155, 2], [155, 3], [156, 0], [156, 1], [156, 2], [156, 3], [157, 0], [157, 1], [157, 2], [157, 3], [158, 0], [158, 1], [158, 2], [158, 3], [159, 0], [159, 1], [159, 2], [159, 3], [160, 0], [160, 1], [160, 2], [160, 3], [161, 0], [161, 1], [161, 2], [161, 3], [162, 0], [162, 1], [162, 2], [162, 3], [163, 0], [163, 1], [163, 2], [163, 3], [164, 0], [164, 1], [164, 2], [164, 3], [165, 0], [165, 1], [165, 2], [165, 3], [166, 0], [166, 1], [166, 2], [166, 3], [167, 0], [167, 1], [167, 2], [167, 3], [168, 0], [168, 1], [168, 2], [168, 3], [169, 0], [169, 1], [169, 2], [169, 3], [170, 0], [170, 1], [170, 2], [170, 3], [171, 0], [171, 1], [171, 2], [171, 3], [172, 0], [172, 1], [172, 2], [172, 3], [173, 0], [173, 1], [173, 2], [173, 3], [174, 0], [174, 1], [174, 2], [174, 3], [175, 0], [175, 1], [175, 2], [175, 3], [176, 0], [176, 1], [176, 2], [176, 3], [177, 0], [177, 1], [177, 2], [177, 3], [178, 0], [178, 1], [178, 2], [178, 3], [179, 0], [179, 1], [179, 2], [179, 3], [180, 0], [180, 1], [180, 2], [180, 3], [181, 0], [181, 1], [181, 2], [181, 3], [182, 0], [182, 1], [182, 2], [182, 3], [183, 0], [183, 1], [183, 2], [183, 3], [184, 0], [184, 1], [184, 2], [184, 3], [185, 0], [185, 1], [185, 2], [185, 3], [186, 0], [186, 1], [186, 2], [186, 3], [187, 0], [187, 1], [187, 2], [187, 3], [188, 0], [188, 1], [188, 2], [188, 3], [189, 0], [189, 1], [189, 2], [189, 3], [190, 0], [190, 1], [190, 2], [190, 3], [191, 0], [191, 1], [191, 2], [191, 3], [192, 0], [192, 1], [192, 2], [192, 3], [193, 0], [193, 1], [193, 2], [193, 3], [194, 0], [194, 1], [194, 2], [194, 3], [195, 0], [195, 1], [195, 2], [195, 3], [196, 0], [196, 1], [196, 2], [196, 3], [197, 0], [197, 1], [197, 2], [197, 3], [198, 0], [198, 1], [198, 2], [198, 3], [199, 0], [199, 1], [199, 2], [199, 3], [200, 0], [200, 1], [200, 2], [200, 3], [201, 0], [201, 1], [201, 2], [201, 3], [202, 0], [202, 1], [202, 2], [202, 3], [203, 0], [203, 1], [203, 2], [203, 3], [204, 0], [204, 1], [204, 2], [204, 3], [205, 0], [205, 1], [205, 2], [205, 3], [206, 0], [206, 1], [206, 2], [206, 3], [207, 0], [207, 1], [207, 2], [207, 3], [208, 0], [208, 1], [208, 2], [208, 3], [209, 0], [209, 1], [209, 2], [209, 3], [210, 0], [210, 1], [210, 2], [210, 3], [211, 0], [211, 1], [211, 2], [211, 3], [212, 0], [212, 1], [212, 2], [212, 3], [213, 0], [213, 1], [213, 2], [213, 3], [214, 0], [214, 1], [214, 2], [214, 3], [215, 0], [215, 1], [215, 2], [215, 3], [216, 0], [216, 1], [216, 2], [216, 3], [217, 0], [217, 1], [217, 2], [217, 3], [218, 0], [218, 1], [218, 2], [218, 3], [219, 0], [219, 1], [219, 2], [219, 3], [220, 0], [220, 1], [220, 2], [220, 3], [221, 0], [221, 1], [221, 2], [221, 3], [222, 0], [222, 1], [222, 2], [222, 3], [223, 0], [223, 1], [223, 2], [223, 3], [224, 0], [224, 1], [224, 2], [224, 3], [225, 0], [225, 1], [225, 2], [225, 3], [226, 0], [226, 1], [226, 2], [226, 3], [227, 0], [227, 1], [227, 2], [227, 3], [228, 0], [228, 1], [228, 2], [228, 3], [229, 0], [229, 1], [229, 2], [229, 3], [230, 0], [230, 1], [230, 2], [230, 3], [231, 0], [231, 1], [231, 2], [231, 3], [232, 0], [232, 1], [232, 2], [232, 3], [233, 0], [233, 1], [233, 2], [233, 3], [234, 0], [234, 1], [234, 2], [234, 3], [235, 0], [235, 1], [235, 2], [235, 3], [236, 0], [236, 1], [236, 2], [236, 3], [237, 0], [237, 1], [237, 2], [237, 3], [238, 0], [238, 1], [238, 2], [238, 3], [239, 0], [239, 1], [239, 2], [239, 3], [240, 0], [240, 1], [240, 2], [240, 3], [241, 0], [241, 1], [241, 2], [241, 3], [242, 0], [242, 1], [242, 2], [242, 3], [243, 0], [243, 1], [243, 2], [243, 3], [244, 0], [244, 1], [244, 2], [244, 3], [245, 0], [245, 1], [245, 2], [245, 3], [246, 0], [246, 1], [246, 2], [246, 3], [247, 0], [247, 1], [247, 2], [247, 3], [248, 0], [248, 1], [248, 2], [248, 3], [249, 0], [249, 1], [249, 2], [249, 3], [250, 0], [250, 1], [250, 2], [250, 3], [251, 0], [251, 1], [251, 2], [251, 3], [252, 0], [252, 1], [252, 2], [252, 3], [253, 0], [253, 1], [253, 2], [253, 3], [254, 0], [254, 1], [254, 2], [254, 3], [255, 0], [255, 1], [255, 2], [255, 3], [256, 0], [256, 1], [256, 2], [256, 3], [257, 0], [257, 1], [257, 2], [257, 3], [258, 0], [258, 1], [258, 2], [258, 3], [259, 0], [259, 1], [259, 2], [259, 3], [260, 0], [260, 1], [260, 2], [260, 3], [261, 0], [261, 1], [261, 2], [261, 3], [262, 0], [262, 1], [262, 2], [262, 3], [263, 0], [263, 1], [263, 2], [263, 3], [264, 0], [264, 1], [264, 2], [264, 3], [265, 0], [265, 1], [265, 2], [265, 3], [266, 0], [266, 1], [266, 2], [266, 3], [267, 0], [267, 1], [267, 2], [267, 3], [268, 0], [268, 1], [268, 2], [268, 3], [269, 0], [269, 1], [269, 2], [269, 3], [270, 0], [270, 1], [270, 2], [270, 3], [271, 0], [271, 1], [271, 2], [271, 3], [272, 0], [272, 1], [272, 2], [272, 3], [273, 0], [273, 1], [273, 2], [273, 3], [274, 0], [274, 1], [274, 2], [274, 3], [275, 0], [275, 1], [275, 2], [275, 3], [276, 0], [276, 1], [276, 2], [276, 3], [277, 0], [277, 1], [277, 2], [277, 3], [278, 0], [278, 1], [278, 2], [278, 3], [279, 0], [279, 1], [279, 2], [279, 3], [280, 0], [280, 1], [280, 2], [280, 3], [281, 0], [281, 1], [281, 2], [281, 3], [282, 0], [282, 1], [282, 2], [282, 3], [283, 0], [283, 1], [283, 2], [283, 3], [284, 0], [284, 1], [284, 2], [284, 3], [285, 0], [285, 1], [285, 2], [285, 3], [286, 0], [286, 1], [286, 2], [286, 3], [287, 0], [287, 1], [287, 2], [287, 3], [288, 0], [288, 1], [288, 2], [288, 3], [289, 0], [289, 1], [289, 2], [289, 3], [290, 0], [290, 1], [290, 2], [290, 3], [291, 0], [291, 1], [291, 2], [291, 3], [292, 0], [292, 1], [292, 2], [292, 3], [293, 0], [293, 1], [293, 2], [293, 3], [294, 0], [294, 1], [294, 2], [294, 3], [295, 0], [295, 1], [295, 2], [295, 3], [296, 0], [296, 1], [296, 2], [296, 3], [297, 0], [297, 1], [297, 2], [297, 3], [298, 0], [298, 1], [298, 2], [298, 3], [299, 0], [299, 1], [299, 2], [299, 3], [300, 0], [300, 1], [300, 2], [300, 3], [301, 0], [301, 1], [301, 2], [301, 3], [302, 0], [302, 1], [302, 2], [302, 3], [303, 0], [303, 1], [303, 2], [303, 3], [304, 0], [304, 1], [304, 2], [304, 3], [305, 0], [305, 1], [305, 2], [305, 3], [306, 0], [306, 1], [306, 2], [306, 3], [307, 0], [307, 1], [307, 2], [307, 3], [308, 0], [308, 1], [308, 2], [308, 3], [309, 0], [309, 1], [309, 2], [309, 3], [310, 0], [310, 1], [310, 2], [310, 3], [311, 0], [311, 1], [311, 2], [311, 3], [312, 0], [312, 1], [312, 2], [312, 3], [313, 0], [313, 1], [313, 2], [313, 3], [314, 0], [314, 1], [314, 2], [314, 3], [315, 0], [315, 1], [315, 2], [315, 3], [316, 0], [316, 1], [316, 2], [316, 3], [317, 0], [317, 1], [317, 2], [317, 3], [318, 0], [318, 1], [318, 2], [318, 3], [319, 0], [319, 1], [319, 2], [319, 3], [320, 0], [320, 1], [320, 2], [320, 3], [321, 0], [321, 1], [321, 2], [321, 3], [322, 0], [322, 1], [322, 2], [322, 3], [323, 0], [323, 1], [323, 2], [323, 3], [324, 0], [324, 1], [324, 2], [324, 3], [325, 0], [325, 1], [325, 2], [325, 3], [326, 0], [326, 1], [326, 2], [326, 3], [327, 0], [327, 1], [327, 2], [327, 3], [328, 0], [328, 1], [328, 2], [328, 3], [329, 0], [329, 1], [329, 2], [329, 3], [330, 0], [330, 1], [330, 2], [330, 3], [331, 0], [331, 1], [331, 2], [331, 3], [332, 0], [332, 1], [332, 2], [332, 3], [333, 0], [333, 1], [333, 2], [333, 3], [334, 0], [334, 1], [334, 2], [334, 3], [335, 0], [335, 1], [335, 2], [335, 3], [336, 0], [336, 1], [336, 2], [336, 3], [337, 0], [337, 1], [337, 2], [337, 3], [338, 0], [338, 1], [338, 2], [338, 3], [339, 0], [339, 1], [339, 2], [339, 3], [340, 0], [340, 1], [340, 2], [340, 3], [341, 0], [341, 1], [341, 2], [341, 3], [342, 0], [342, 1], [342, 2], [342, 3], [343, 0], [343, 1], [343, 2], [343, 3], [344, 0], [344, 1], [344, 2], [344, 3], [345, 0], [345, 1], [345, 2], [345, 3], [346, 0], [346, 1], [346, 2], [346, 3], [347, 0], [347, 1], [347, 2], [347, 3], [348, 0], [348, 1], [348, 2], [348, 3], [349, 0], [349, 1], [349, 2], [349, 3], [350, 0], [350, 1], [350, 2], [350, 3], [351, 0], [351, 1], [351, 2], [351, 3], [352, 0], [352, 1], [352, 2], [352, 3], [353, 0], [353, 1], [353, 2], [353, 3], [354, 0], [354, 1], [354, 2], [354, 3], [355, 0], [355, 1], [355, 2], [355, 3], [356, 0], [356, 1], [356, 2], [356, 3], [357, 0], [357, 1], [357, 2], [357, 3], [358, 0], [358, 1], [358, 2], [358, 3], [359, 0], [359, 1], [359, 2], [359, 3], [360, 0], [360, 1], [360, 2], [360, 3], [361, 0], [361, 1], [361, 2], [361, 3], [362, 0], [362, 1], [362, 2], [362, 3], [363, 0], [363, 1], [363, 2], [363, 3], [364, 0], [364, 1], [364, 2], [364, 3], [365, 0], [365, 1], [365, 2], [365, 3], [366, 0], [366, 1], [366, 2], [366, 3], [367, 0], [367, 1], [367, 2], [367, 3], [368, 0], [368, 1], [368, 2], [368, 3], [369, 0], [369, 1], [369, 2], [369, 3], [370, 0], [370, 1], [370, 2], [370, 3], [371, 0], [371, 1], [371, 2], [371, 3], [372, 0], [372, 1], [372, 2], [372, 3], [373, 0], [373, 1], [373, 2], [373, 3], [374, 0], [374, 1], [374, 2], [374, 3], [375, 0], [375, 1], [375, 2], [375, 3], [376, 0], [376, 1], [376, 2], [376, 3], [377, 0], [377, 1], [377, 2], [377, 3], [378, 0], [378, 1], [378, 2], [378, 3], [379, 0], [379, 1], [379, 2], [379, 3], [380, 0], [380, 1], [380, 2], [380, 3], [381, 0], [381, 1], [381, 2], [381, 3], [382, 0], [382, 1], [382, 2], [382, 3], [383, 0], [383, 1], [383, 2], [383, 3], [384, 0], [384, 1], [384, 2], [384, 3], [385, 0], [385, 1], [385, 2], [385, 3], [386, 0], [386, 1], [386, 2], [386, 3], [387, 0], [387, 1], [387, 2], [387, 3], [388, 0], [388, 1], [388, 2], [388, 3], [389, 0], [389, 1], [389, 2], [389, 3], [390, 0], [390, 1], [390, 2], [390, 3], [391, 0], [391, 1], [391, 2], [391, 3], [392, 0], [392, 1], [392, 2], [392, 3], [393, 0], [393, 1], [393, 2], [393, 3], [394, 0], [394, 1], [394, 2], [394, 3], [395, 0], [395, 1], [395, 2], [395, 3], [396, 0], [396, 1], [396, 2], [396, 3], [397, 0], [397, 1], [397, 2], [397, 3], [398, 0], [398, 1], [398, 2], [398, 3], [399, 0], [399, 1], [399, 2], [399, 3], [400, 0], [400, 1], [400, 2], [400, 3], [401, 0], [401, 1], [401, 2], [401, 3], [402, 0], [402, 1], [402, 2], [402, 3], [403, 0], [403, 1], [403, 2], [403, 3], [404, 0], [404, 1], [404, 2], [404, 3], [405, 0], [405, 1], [405, 2], [405, 3], [406, 0], [406, 1], [406, 2], [406, 3], [407, 0], [407, 1], [407, 2], [407, 3], [408, 0], [408, 1], [408, 2], [408, 3], [409, 0], [409, 1], [409, 2], [409, 3], [410, 0], [410, 1], [410, 2], [410, 3], [411, 0], [411, 1], [411, 2], [411, 3], [412, 0], [412, 1], [412, 2], [412, 3], [413, 0], [413, 1], [413, 2], [413, 3], [414, 0], [414, 1], [414, 2], [414, 3], [415, 0], [415, 1], [415, 2], [415, 3], [416, 0], [416, 1], [416, 2], [416, 3], [417, 0], [417, 1], [417, 2], [417, 3], [418, 0], [418, 1], [418, 2], [418, 3], [419, 0], [419, 1], [419, 2], [419, 3], [420, 0], [420, 1], [420, 2], [420, 3], [421, 0], [421, 1], [421, 2], [421, 3], [422, 0], [422, 1], [422, 2], [422, 3], [423, 0], [423, 1], [423, 2], [423, 3], [424, 0], [424, 1], [424, 2], [424, 3], [425, 0], [425, 1], [425, 2], [425, 3], [426, 0], [426, 1], [426, 2], [426, 3], [427, 0], [427, 1], [427, 2], [427, 3], [428, 0], [428, 1], [428, 2], [428, 3], [429, 0], [429, 1], [429, 2], [429, 3], [430, 0], [430, 1], [430, 2], [430, 3], [431, 0], [431, 1], [431, 2], [431, 3], [432, 0], [432, 1], [432, 2], [432, 3], [433, 0], [433, 1], [433, 2], [433, 3], [434, 0], [434, 1], [434, 2], [434, 3], [435, 0], [435, 1], [435, 2], [435, 3], [436, 0], [436, 1], [436, 2], [436, 3], [437, 0], [437, 1], [437, 2], [437, 3], [438, 0], [438, 1], [438, 2], [438, 3], [439, 0], [439, 1], [439, 2], [439, 3], [440, 0], [440, 1], [440, 2], [440, 3], [441, 0], [441, 1], [441, 2], [441, 3], [442, 0], [442, 1], [442, 2], [442, 3], [443, 0], [443, 1], [443, 2], [443, 3], [444, 0], [444, 1], [444, 2], [444, 3], [445, 0], [445, 1], [445, 2], [445, 3], [446, 0], [446, 1], [446, 2], [446, 3], [447, 0], [447, 1], [447, 2], [447, 3], [448, 0], [448, 1], [448, 2], [448, 3], [449, 0], [449, 1], [449, 2], [449, 3], [450, 0], [450, 1], [450, 2], [450, 3], [451, 0], [451, 1], [451, 2], [451, 3], [452, 0], [452, 1], [452, 2], [452, 3], [453, 0], [453, 1], [453, 2], [453, 3], [454, 0], [454, 1], [454, 2], [454, 3], [455, 0], [455, 1], [455, 2], [455, 3], [456, 0], [456, 1], [456, 2], [456, 3], [457, 0], [457, 1], [457, 2], [457, 3], [458, 0], [458, 1], [458, 2], [458, 3], [459, 0], [459, 1], [459, 2], [459, 3], [460, 0], [460, 1], [460, 2], [460, 3], [461, 0], [461, 1], [461, 2], [461, 3], [462, 0], [462, 1], [462, 2], [462, 3], [463, 0], [463, 1], [463, 2], [463, 3], [464, 0], [464, 1], [464, 2], [464, 3], [465, 0], [465, 1], [465, 2], [465, 3], [466, 0], [466, 1], [466, 2], [466, 3], [467, 0], [467, 1], [467, 2], [467, 3], [468, 0], [468, 1], [468, 2], [468, 3], [469, 0], [469, 1], [469, 2], [469, 3], [470, 0], [470, 1], [470, 2], [470, 3], [471, 0], [471, 1], [471, 2], [471, 3], [472, 0], [472, 1], [472, 2], [472, 3], [473, 0], [473, 1], [473, 2], [473, 3], [474, 0], [474, 1], [474, 2], [474, 3], [475, 0], [475, 1], [475, 2], [475, 3], [476, 0], [476, 1], [476, 2], [476, 3], [477, 0], [477, 1], [477, 2], [477, 3], [478, 0], [478, 1], [478, 2], [478, 3], [479, 0], [479, 1], [479, 2], [479, 3], [480, 0], [480, 1], [480, 2], [480, 3], [481, 0], [481, 1], [481, 2], [481, 3], [482, 0], [482, 1], [482, 2], [482, 3], [483, 0], [483, 1], [483, 2], [483, 3], [484, 0], [484, 1], [484, 2], [484, 3], [485, 0], [485, 1], [485, 2], [485, 3], [486, 0], [486, 1], [486, 2], [486, 3], [487, 0], [487, 1], [487, 2], [487, 3], [488, 0], [488, 1], [488, 2], [488, 3], [489, 0], [489, 1], [489, 2], [489, 3], [490, 0], [490, 1], [490, 2], [490, 3], [491, 0], [491, 1], [491, 2], [491, 3], [492, 0], [492, 1], [492, 2], [492, 3], [493, 0], [493, 1], [493, 2], [493, 3], [494, 0], [494, 1], [494, 2], [494, 3], [495, 0], [495, 1], [495, 2], [495, 3], [496, 0], [496, 1], [496, 2], [496, 3], [497, 0], [497, 1], [497, 2], [497, 3], [498, 0], [498, 1], [498, 2], [498, 3], [499, 0], [499, 1], [499, 2], [499, 3], [500, 0], [500, 1], [500, 2], [500, 3], [501, 0], [501, 1], [501, 2], [501, 3], [502, 0], [502, 1], [502, 2], [502, 3], [503, 0], [503, 1], [503, 2], [503, 3], [504, 0], [504, 1], [504, 2], [504, 3], [505, 0], [505, 1], [505, 2], [505, 3], [506, 0], [506, 1], [506, 2], [506, 3], [507, 0], [507, 1], [507, 2], [507, 3], [508, 0], [508, 1], [508, 2], [508, 3], [509, 0], [509, 1], [509, 2], [509, 3], [510, 0], [510, 1], [510, 2], [510, 3], [511, 0], [511, 1], [511, 2], [511, 3], [512, 0], [512, 1], [512, 2], [512, 3], [513, 0], [513, 1], [513, 2], [513, 3], [514, 0], [514, 1], [514, 2], [514, 3], [515, 0], [515, 1], [515, 2], [515, 3], [516, 0], [516, 1], [516, 2], [516, 3], [517, 0], [517, 1], [517, 2], [517, 3], [518, 0], [518, 1], [518, 2], [518, 3], [519, 0], [519, 1], [519, 2], [519, 3], [520, 0], [520, 1], [520, 2], [520, 3], [521, 0], [521, 1], [521, 2], [521, 3], [522, 0], [522, 1], [522, 2], [522, 3], [523, 0], [523, 1], [523, 2], [523, 3], [524, 0], [524, 1], [524, 2], [524, 3], [525, 0], [525, 1], [525, 2], [525, 3], [526, 0], [526, 1], [526, 2], [526, 3], [527, 0], [527, 1], [527, 2], [527, 3], [528, 0], [528, 1], [528, 2], [528, 3], [529, 0], [529, 1], [529, 2], [529, 3], [530, 0], [530, 1], [530, 2], [530, 3], [531, 0], [531, 1], [531, 2], [531, 3], [532, 0], [532, 1], [532, 2], [532, 3], [533, 0], [533, 1], [533, 2], [533, 3], [534, 0], [534, 1], [534, 2], [534, 3], [535, 0], [535, 1], [535, 2], [535, 3], [536, 0], [536, 1], [536, 2], [536, 3], [537, 0], [537, 1], [537, 2], [537, 3], [538, 0], [538, 1], [538, 2], [538, 3], [539, 0], [539, 1], [539, 2], [539, 3], [540, 0], [540, 1], [540, 2], [540, 3], [541, 0], [541, 1], [541, 2], [541, 3], [542, 0], [542, 1], [542, 2], [542, 3], [543, 0], [543, 1], [543, 2], [543, 3], [544, 0], [544, 1], [544, 2], [544, 3], [545, 0], [545, 1], [545, 2], [545, 3], [546, 0], [546, 1], [546, 2], [546, 3], [547, 0], [547, 1], [547, 2], [547, 3], [548, 0], [548, 1], [548, 2], [548, 3], [549, 0], [549, 1], [549, 2], [549, 3], [550, 0], [550, 1], [550, 2], [550, 3], [551, 0], [551, 1], [551, 2], [551, 3], [552, 0], [552, 1], [552, 2], [552, 3], [553, 0], [553, 1], [553, 2], [553, 3], [554, 0], [554, 1], [554, 2], [554, 3], [555, 0], [555, 1], [555, 2], [555, 3], [556, 0], [556, 1], [556, 2], [556, 3], [557, 0], [557, 1], [557, 2], [557, 3], [558, 0], [558, 1], [558, 2], [558, 3], [559, 0], [559, 1], [559, 2], [559, 3], [560, 0], [560, 1], [560, 2], [560, 3], [561, 0], [561, 1], [561, 2], [561, 3], [562, 0], [562, 1], [562, 2], [562, 3], [563, 0], [563, 1], [563, 2], [563, 3], [564, 0], [564, 1], [564, 2], [564, 3], [565, 0], [565, 1], [565, 2], [565, 3], [566, 0], [566, 1], [566, 2], [566, 3], [567, 0], [567, 1], [567, 2], [567, 3], [568, 0], [568, 1], [568, 2], [568, 3], [569, 0], [569, 1], [569, 2], [569, 3], [570, 0], [570, 1], [570, 2], [570, 3], [571, 0], [571, 1], [571, 2], [571, 3], [572, 0], [572, 1], [572, 2], [572, 3], [573, 0], [573, 1], [573, 2], [573, 3], [574, 0], [574, 1], [574, 2], [574, 3], [575, 0], [575, 1], [575, 2], [575, 3], [576, 0], [576, 1], [576, 2], [576, 3], [577, 0], [577, 1], [577, 2], [577, 3], [578, 0], [578, 1], [578, 2], [578, 3], [579, 0], [579, 1], [579, 2], [579, 3], [580, 0], [580, 1], [580, 2], [580, 3], [581, 0], [581, 1], [581, 2], [581, 3], [582, 0], [582, 1], [582, 2], [582, 3], [583, 0], [583, 1], [583, 2], [583, 3], [584, 0], [584, 1], [584, 2], [584, 3], [585, 0], [585, 1], [585, 2], [585, 3], [586, 0], [586, 1], [586, 2], [586, 3], [587, 0], [587, 1], [587, 2], [587, 3], [588, 0], [588, 1], [588, 2], [588, 3], [589, 0], [589, 1], [589, 2], [589, 3], [590, 0], [590, 1], [590, 2], [590, 3], [591, 0], [591, 1], [591, 2], [591, 3], [592, 0], [592, 1], [592, 2], [592, 3], [593, 0], [593, 1], [593, 2], [593, 3], [594, 0], [594, 1], [594, 2], [594, 3], [595, 0], [595, 1], [595, 2], [595, 3], [596, 0], [596, 1], [596, 2], [596, 3], [597, 0], [597, 1], [597, 2], [597, 3], [598, 0], [598, 1], [598, 2], [598, 3], [599, 0], [599, 1], [599, 2], [599, 3], [600, 0], [600, 1], [600, 2], [600, 3], [601, 0], [601, 1], [601, 2], [601, 3], [602, 0], [602, 1], [602, 2], [602, 3], [603, 0], [603, 1], [603, 2], [603, 3], [604, 0], [604, 1], [604, 2], [604, 3], [605, 0], [605, 1], [605, 2], [605, 3], [606, 0], [606, 1], [606, 2], [606, 3], [607, 0], [607, 1], [607, 2], [607, 3], [608, 0], [608, 1], [608, 2], [608, 3], [609, 0], [609, 1], [609, 2], [609, 3], [610, 0], [610, 1], [610, 2], [610, 3], [611, 0], [611, 1], [611, 2], [611, 3], [612, 0], [612, 1], [612, 2], [612, 3], [613, 0], [613, 1], [613, 2], [613, 3], [614, 0], [614, 1], [614, 2], [614, 3], [615, 0], [615, 1], [615, 2], [615, 3], [616, 0], [616, 1], [616, 2], [616, 3], [617, 0], [617, 1], [617, 2], [617, 3], [618, 0], [618, 1], [618, 2], [618, 3], [619, 0], [619, 1], [619, 2], [619, 3], [620, 0], [620, 1], [620, 2], [620, 3], [621, 0], [621, 1], [621, 2], [621, 3], [622, 0], [622, 1], [622, 2], [622, 3], [623, 0], [623, 1], [623, 2], [623, 3], [624, 0], [624, 1], [624, 2], [624, 3], [625, 0], [625, 1], [625, 2], [625, 3], [626, 0], [626, 1], [626, 2], [626, 3], [627, 0], [627, 1], [627, 2], [627, 3], [628, 0], [628, 1], [628, 2], [628, 3], [629, 0], [629, 1], [629, 2], [629, 3], [630, 0], [630, 1], [630, 2], [630, 3], [631, 0], [631, 1], [631, 2], [631, 3], [632, 0], [632, 1], [632, 2], [632, 3], [633, 0], [633, 1], [633, 2], [633, 3], [634, 0], [634, 1], [634, 2], [634, 3], [635, 0], [635, 1], [635, 2], [635, 3], [636, 0], [636, 1], [636, 2], [636, 3], [637, 0], [637, 1], [637, 2], [637, 3], [638, 0], [638, 1], [638, 2], [638, 3], [639, 0], [639, 1], [639, 2], [639, 3], [640, 0], [640, 1], [640, 2], [640, 3], [641, 0], [641, 1], [641, 2], [641, 3], [642, 0], [642, 1], [642, 2], [642, 3], [643, 0], [643, 1], [643, 2], [643, 3], [644, 0], [644, 1], [644, 2], [644, 3], [645, 0], [645, 1], [645, 2], [645, 3], [646, 0], [646, 1], [646, 2], [646, 3], [647, 0], [647, 1], [647, 2], [647, 3], [648, 0], [648, 1], [648, 2], [648, 3], [649, 0], [649, 1], [649, 2], [649, 3], [650, 0], [650, 1], [650, 2], [650, 3], [651, 0], [651, 1], [651, 2], [651, 3], [652, 0], [652, 1], [652, 2], [652, 3], [653, 0], [653, 1], [653, 2], [653, 3], [654, 0], [654, 1], [654, 2], [654, 3], [655, 0], [655, 1], [655, 2], [655, 3], [656, 0], [656, 1], [656, 2], [656, 3], [657, 0], [657, 1], [657, 2], [657, 3], [658, 0], [658, 1], [658, 2], [658, 3], [659, 0], [659, 1], [659, 2], [659, 3], [660, 0], [660, 1], [660, 2], [660, 3], [661, 0], [661, 1], [661, 2], [661, 3], [662, 0], [662, 1], [662, 2], [662, 3], [663, 0], [663, 1], [663, 2], [663, 3], [664, 0], [664, 1], [664, 2], [664, 3], [665, 0], [665, 1], [665, 2], [665, 3], [666, 0], [666, 1], [666, 2], [666, 3], [667, 0], [667, 1], [667, 2], [667, 3], [668, 0], [668, 1], [668, 2], [668, 3], [669, 0], [669, 1], [669, 2], [669, 3], [670, 0], [670, 1], [670, 2], [670, 3], [671, 0], [671, 1], [671, 2], [671, 3], [672, 0], [672, 1], [672, 2], [672, 3], [673, 0], [673, 1], [673, 2], [673, 3], [674, 0], [674, 1], [674, 2], [674, 3], [675, 0], [675, 1], [675, 2], [675, 3], [676, 0], [676, 1], [676, 2], [676, 3], [677, 0], [677, 1], [677, 2], [677, 3], [678, 0], [678, 1], [678, 2], [678, 3], [679, 0], [679, 1], [679, 2], [679, 3], [680, 0], [680, 1], [680, 2], [680, 3], [681, 0], [681, 1], [681, 2], [681, 3], [682, 0], [682, 1], [682, 2], [682, 3], [683, 0], [683, 1], [683, 2], [683, 3], [684, 0], [684, 1], [684, 2], [684, 3], [685, 0], [685, 1], [685, 2], [685, 3], [686, 0], [686, 1], [686, 2], [686, 3], [687, 0], [687, 1], [687, 2], [687, 3], [688, 0], [688, 1], [688, 2], [688, 3], [689, 0], [689, 1], [689, 2], [689, 3], [690, 0], [690, 1], [690, 2], [690, 3], [691, 0], [691, 1], [691, 2], [691, 3], [692, 0], [692, 1], [692, 2], [692, 3], [693, 0], [693, 1], [693, 2], [693, 3], [694, 0], [694, 1], [694, 2], [694, 3], [695, 0], [695, 1], [695, 2], [695, 3], [696, 0], [696, 1], [696, 2], [696, 3], [697, 0], [697, 1], [697, 2], [697, 3], [698, 0], [698, 1], [698, 2], [698, 3], [699, 0], [699, 1], [699, 2], [699, 3], [700, 0], [700, 1], [700, 2], [700, 3], [701, 0], [701, 1], [701, 2], [701, 3], [702, 0], [702, 1], [702, 2], [702, 3], [703, 0], [703, 1], [703, 2], [703, 3], [704, 0], [704, 1], [704, 2], [704, 3], [705, 0], [705, 1], [705, 2], [705, 3], [706, 0], [706, 1], [706, 2], [706, 3], [707, 0], [707, 1], [707, 2], [707, 3], [708, 0], [708, 1], [708, 2], [708, 3], [709, 0], [709, 1], [709, 2], [709, 3], [710, 0], [710, 1], [710, 2], [710, 3], [711, 0], [711, 1], [711, 2], [711, 3], [712, 0], [712, 1], [712, 2], [712, 3], [713, 0], [713, 1], [713, 2], [713, 3], [714, 0], [714, 1], [714, 2], [714, 3], [715, 0], [715, 1], [715, 2], [715, 3], [716, 0], [716, 1], [716, 2], [716, 3], [717, 0], [717, 1], [717, 2], [717, 3], [718, 0], [718, 1], [718, 2], [718, 3], [719, 0], [719, 1], [719, 2], [719, 3], [720, 0], [720, 1], [720, 2], [720, 3], [721, 0], [721, 1], [721, 2], [721, 3], [722, 0], [722, 1], [722, 2], [722, 3], [723, 0], [723, 1], [723, 2], [723, 3], [724, 0], [724, 1], [724, 2], [724, 3], [725, 0], [725, 1], [725, 2], [725, 3], [726, 0], [726, 1], [726, 2], [726, 3], [727, 0], [727, 1], [727, 2], [727, 3], [728, 0], [728, 1], [728, 2], [728, 3], [729, 0], [729, 1], [729, 2], [729, 3], [730, 0], [730, 1], [730, 2], [730, 3], [731, 0], [731, 1], [731, 2], [731, 3], [732, 0], [732, 1], [732, 2], [732, 3], [733, 0], [733, 1], [733, 2], [733, 3], [734, 0], [734, 1], [734, 2], [734, 3], [735, 0], [735, 1], [735, 2], [735, 3], [736, 0], [736, 1], [736, 2], [736, 3], [737, 0], [737, 1], [737, 2], [737, 3], [738, 0], [738, 1], [738, 2], [738, 3], [739, 0], [739, 1], [739, 2], [739, 3], [740, 0], [740, 1], [740, 2], [740, 3], [741, 0], [741, 1], [741, 2], [741, 3], [742, 0], [742, 1], [742, 2], [742, 3], [743, 0], [743, 1], [743, 2], [743, 3], [744, 0], [744, 1], [744, 2], [744, 3], [745, 0], [745, 1], [745, 2], [745, 3], [746, 0], [746, 1], [746, 2], [746, 3], [747, 0], [747, 1], [747, 2], [747, 3], [748, 0], [748, 1], [748, 2], [748, 3], [749, 0], [749, 1], [749, 2], [749, 3], [750, 0], [750, 1], [750, 2], [750, 3], [751, 0], [751, 1], [751, 2], [751, 3], [752, 0], [752, 1], [752, 2], [752, 3], [753, 0], [753, 1], [753, 2], [753, 3], [754, 0], [754, 1], [754, 2], [754, 3], [755, 0], [755, 1], [755, 2], [755, 3], [756, 0], [756, 1], [756, 2], [756, 3], [757, 0], [757, 1], [757, 2], [757, 3], [758, 0], [758, 1], [758, 2], [758, 3], [759, 0], [759, 1], [759, 2], [759, 3], [760, 0], [760, 1], [760, 2], [760, 3], [761, 0], [761, 1], [761, 2], [761, 3], [762, 0], [762, 1], [762, 2], [762, 3], [763, 0], [763, 1], [763, 2], [763, 3], [764, 0], [764, 1], [764, 2], [764, 3], [765, 0], [765, 1], [765, 2], [765, 3], [766, 0], [766, 1], [766, 2], [766, 3], [767, 0], [767, 1], [767, 2], [767, 3], [768, 0], [768, 1], [768, 2], [768, 3], [769, 0], [769, 1], [769, 2], [769, 3], [770, 0], [770, 1], [770, 2], [770, 3], [771, 0], [771, 1], [771, 2], [771, 3], [772, 0], [772, 1], [772, 2], [772, 3], [773, 0], [773, 1], [773, 2], [773, 3], [774, 0], [774, 1], [774, 2], [774, 3], [775, 0], [775, 1], [775, 2], [775, 3], [776, 0], [776, 1], [776, 2], [776, 3], [777, 0], [777, 1], [777, 2], [777, 3], [778, 0], [778, 1], [778, 2], [778, 3], [779, 0], [779, 1], [779, 2], [779, 3], [780, 0], [780, 1], [780, 2], [780, 3], [781, 0], [781, 1], [781, 2], [781, 3], [782, 0], [782, 1], [782, 2], [782, 3], [783, 0], [783, 1], [783, 2], [783, 3], [784, 0], [784, 1], [784, 2], [784, 3], [785, 0], [785, 1], [785, 2], [785, 3], [786, 0], [786, 1], [786, 2], [786, 3], [787, 0], [787, 1], [787, 2], [787, 3], [788, 0], [788, 1], [788, 2], [788, 3], [789, 0], [789, 1], [789, 2], [789, 3], [790, 0], [790, 1], [790, 2], [790, 3], [791, 0], [791, 1], [791, 2], [791, 3], [792, 0], [792, 1], [792, 2], [792, 3], [793, 0], [793, 1], [793, 2], [793, 3], [794, 0], [794, 1], [794, 2], [794, 3], [795, 0], [795, 1], [795, 2], [795, 3], [796, 0], [796, 1], [796, 2], [796, 3], [797, 0], [797, 1], [797, 2], [797, 3], [798, 0], [798, 1], [798, 2], [798, 3], [799, 0], [799, 1], [799, 2], [799, 3], [800, 0], [800, 1], [800, 2], [800, 3], [801, 0], [801, 1], [801, 2], [801, 3], [802, 0], [802, 1], [802, 2], [802, 3], [803, 0], [803, 1], [803, 2], [803, 3], [804, 0], [804, 1], [804, 2], [804, 3], [805, 0], [805, 1], [805, 2], [805, 3], [806, 0], [806, 1], [806, 2], [806, 3], [807, 0], [807, 1], [807, 2], [807, 3], [808, 0], [808, 1], [808, 2], [808, 3], [809, 0], [809, 1], [809, 2], [809, 3], [810, 0], [810, 1], [810, 2], [810, 3], [811, 0], [811, 1], [811, 2], [811, 3], [812, 0], [812, 1], [812, 2], [812, 3], [813, 0], [813, 1], [813, 2], [813, 3], [814, 0], [814, 1], [814, 2], [814, 3], [815, 0], [815, 1], [815, 2], [815, 3], [816, 0], [816, 1], [816, 2], [816, 3], [817, 0], [817, 1], [817, 2], [817, 3], [818, 0], [818, 1], [818, 2], [818, 3], [819, 0], [819, 1], [819, 2], [819, 3], [820, 0], [820, 1], [820, 2], [820, 3], [821, 0], [821, 1], [821, 2], [821, 3], [822, 0], [822, 1], [822, 2], [822, 3], [823, 0], [823, 1], [823, 2], [823, 3], [824, 0], [824, 1], [824, 2], [824, 3], [825, 0], [825, 1], [825, 2], [825, 3], [826, 0], [826, 1], [826, 2], [826, 3], [827, 0], [827, 1], [827, 2], [827, 3], [828, 0], [828, 1], [828, 2], [828, 3], [829, 0], [829, 1], [829, 2], [829, 3], [830, 0], [830, 1], [830, 2], [830, 3], [831, 0], [831, 1], [831, 2], [831, 3], [832, 0], [832, 1], [832, 2], [832, 3], [833, 0], [833, 1], [833, 2], [833, 3], [834, 0], [834, 1], [834, 2], [834, 3], [835, 0], [835, 1], [835, 2], [835, 3], [836, 0], [836, 1], [836, 2], [836, 3], [837, 0], [837, 1], [837, 2], [837, 3], [838, 0], [838, 1], [838, 2], [838, 3], [839, 0], [839, 1], [839, 2], [839, 3], [840, 0], [840, 1], [840, 2], [840, 3], [841, 0], [841, 1], [841, 2], [841, 3], [842, 0], [842, 1], [842, 2], [842, 3], [843, 0], [843, 1], [843, 2], [843, 3], [844, 0], [844, 1], [844, 2], [844, 3], [845, 0], [845, 1], [845, 2], [845, 3], [846, 0], [846, 1], [846, 2], [846, 3], [847, 0], [847, 1], [847, 2], [847, 3], [848, 0], [848, 1], [848, 2], [848, 3], [849, 0], [849, 1], [849, 2], [849, 3], [850, 0], [850, 1], [850, 2], [850, 3], [851, 0], [851, 1], [851, 2], [851, 3], [852, 0], [852, 1], [852, 2], [852, 3], [853, 0], [853, 1], [853, 2], [853, 3], [854, 0], [854, 1], [854, 2], [854, 3], [855, 0], [855, 1], [855, 2], [855, 3], [856, 0], [856, 1], [856, 2], [856, 3], [857, 0], [857, 1], [857, 2], [857, 3], [858, 0], [858, 1], [858, 2], [858, 3], [859, 0], [859, 1], [859, 2], [859, 3], [860, 0], [860, 1], [860, 2], [860, 3], [861, 0], [861, 1], [861, 2], [861, 3], [862, 0], [862, 1], [862, 2], [862, 3], [863, 0], [863, 1], [863, 2], [863, 3], [864, 0], [864, 1], [864, 2], [864, 3], [865, 0], [865, 1], [865, 2], [865, 3], [866, 0], [866, 1], [866, 2], [866, 3], [867, 0], [867, 1], [867, 2], [867, 3], [868, 0], [868, 1], [868, 2], [868, 3], [869, 0], [869, 1], [869, 2], [869, 3], [870, 0], [870, 1], [870, 2], [870, 3], [871, 0], [871, 1], [871, 2], [871, 3], [872, 0], [872, 1], [872, 2], [872, 3], [873, 0], [873, 1], [873, 2], [873, 3], [874, 0], [874, 1], [874, 2], [874, 3], [875, 0], [875, 1], [875, 2], [875, 3], [876, 0], [876, 1], [876, 2], [876, 3], [877, 0], [877, 1], [877, 2], [877, 3], [878, 0], [878, 1], [878, 2], [878, 3], [879, 0], [879, 1], [879, 2], [879, 3], [880, 0], [880, 1], [880, 2], [880, 3], [881, 0], [881, 1], [881, 2], [881, 3], [882, 0], [882, 1], [882, 2], [882, 3], [883, 0], [883, 1], [883, 2], [883, 3], [884, 0], [884, 1], [884, 2], [884, 3], [885, 0], [885, 1], [885, 2], [885, 3], [886, 0], [886, 1], [886, 2], [886, 3], [887, 0], [887, 1], [887, 2], [887, 3], [888, 0], [888, 1], [888, 2], [888, 3], [889, 0], [889, 1], [889, 2], [889, 3], [890, 0], [890, 1], [890, 2], [890, 3], [891, 0], [891, 1], [891, 2], [891, 3], [892, 0], [892, 1], [892, 2], [892, 3], [893, 0], [893, 1], [893, 2], [893, 3], [894, 0], [894, 1], [894, 2], [894, 3], [895, 0], [895, 1], [895, 2], [895, 3], [896, 0], [896, 1], [896, 2], [896, 3], [897, 0], [897, 1], [897, 2], [897, 3], [898, 0], [898, 1], [898, 2], [898, 3], [899, 0], [899, 1], [899, 2], [899, 3], [900, 0], [900, 1], [900, 2], [900, 3], [901, 0], [901, 1], [901, 2], [901, 3], [902, 0], [902, 1], [902, 2], [902, 3], [903, 0], [903, 1], [903, 2], [903, 3], [904, 0], [904, 1], [904, 2], [904, 3], [905, 0], [905, 1], [905, 2], [905, 3], [906, 0], [906, 1], [906, 2], [906, 3], [907, 0], [907, 1], [907, 2], [907, 3], [908, 0], [908, 1], [908, 2], [908, 3], [909, 0], [909, 1], [909, 2], [909, 3], [910, 0], [910, 1], [910, 2], [910, 3], [911, 0], [911, 1], [911, 2], [911, 3], [912, 0], [912, 1], [912, 2], [912, 3], [913, 0], [913, 1], [913, 2], [913, 3], [914, 0], [914, 1], [914, 2], [914, 3], [915, 0], [915, 1], [915, 2], [915, 3], [916, 0], [916, 1], [916, 2], [916, 3], [917, 0], [917, 1], [917, 2], [917, 3], [918, 0], [918, 1], [918, 2], [918, 3], [919, 0], [919, 1], [919, 2], [919, 3], [920, 0], [920, 1], [920, 2], [920, 3], [921, 0], [921, 1], [921, 2], [921, 3], [922, 0], [922, 1], [922, 2], [922, 3], [923, 0], [923, 1], [923, 2], [923, 3], [924, 0], [924, 1], [924, 2], [924, 3], [925, 0], [925, 1], [925, 2], [925, 3], [926, 0], [926, 1], [926, 2], [926, 3], [927, 0], [927, 1], [927, 2], [927, 3], [928, 0], [928, 1], [928, 2], [928, 3], [929, 0], [929, 1], [929, 2], [929, 3], [930, 0], [930, 1], [930, 2], [930, 3], [931, 0], [931, 1], [931, 2], [931, 3], [932, 0], [932, 1], [932, 2], [932, 3], [933, 0], [933, 1], [933, 2], [933, 3], [934, 0], [934, 1], [934, 2], [934, 3], [935, 0], [935, 1], [935, 2], [935, 3], [936, 0], [936, 1], [936, 2], [936, 3], [937, 0], [937, 1], [937, 2], [937, 3], [938, 0], [938, 1], [938, 2], [938, 3], [939, 0], [939, 1], [939, 2], [939, 3], [940, 0], [940, 1], [940, 2], [940, 3], [941, 0], [941, 1], [941, 2], [941, 3], [942, 0], [942, 1], [942, 2], [942, 3], [943, 0], [943, 1], [943, 2], [943, 3], [944, 0], [944, 1], [944, 2], [944, 3], [945, 0], [945, 1], [945, 2], [945, 3], [946, 0], [946, 1], [946, 2], [946, 3], [947, 0], [947, 1], [947, 2], [947, 3], [948, 0], [948, 1], [948, 2], [948, 3], [949, 0], [949, 1], [949, 2], [949, 3], [950, 0], [950, 1], [950, 2], [950, 3], [951, 0], [951, 1], [951, 2], [951, 3], [952, 0], [952, 1], [952, 2], [952, 3], [953, 0], [953, 1], [953, 2], [953, 3], [954, 0], [954, 1], [954, 2], [954, 3], [955, 0], [955, 1], [955, 2], [955, 3], [956, 0], [956, 1], [956, 2], [956, 3], [957, 0], [957, 1], [957, 2], [957, 3], [958, 0], [958, 1], [958, 2], [958, 3], [959, 0], [959, 1], [959, 2], [959, 3], [960, 0], [960, 1], [960, 2], [960, 3], [961, 0], [961, 1], [961, 2], [961, 3], [962, 0], [962, 1], [962, 2], [962, 3], [963, 0], [963, 1], [963, 2], [963, 3], [964, 0], [964, 1], [964, 2], [964, 3], [965, 0], [965, 1], [965, 2], [965, 3], [966, 0], [966, 1], [966, 2], [966, 3], [967, 0], [967, 1], [967, 2], [967, 3], [968, 0], [968, 1], [968, 2], [968, 3], [969, 0], [969, 1], [969, 2], [969, 3], [970, 0], [970, 1], [970, 2], [970, 3], [971, 0], [971, 1], [971, 2], [971, 3], [972, 0], [972, 1], [972, 2], [972, 3], [973, 0], [973, 1], [973, 2], [973, 3], [974, 0], [974, 1], [974, 2], [974, 3], [975, 0], [975, 1], [975, 2], [975, 3], [976, 0], [976, 1], [976, 2], [976, 3], [977, 0], [977, 1], [977, 2], [977, 3], [978, 0], [978, 1], [978, 2], [978, 3], [979, 0], [979, 1], [979, 2], [979, 3], [980, 0], [980, 1], [980, 2], [980, 3], [981, 0], [981, 1], [981, 2], [981, 3], [982, 0], [982, 1], [982, 2], [982, 3], [983, 0], [983, 1], [983, 2], [983, 3], [984, 0], [984, 1], [984, 2], [984, 3], [985, 0], [985, 1], [985, 2], [985, 3], [986, 0], [986, 1], [986, 2], [986, 3], [987, 0], [987, 1], [987, 2], [987, 3], [988, 0], [988, 1], [988, 2], [988, 3], [989, 0], [989, 1], [989, 2], [989, 3], [990, 0], [990, 1], [990, 2], [990, 3], [991, 0], [991, 1], [991, 2], [991, 3], [992, 0], [992, 1], [992, 2], [992, 3], [993, 0], [993, 1], [993, 2], [993, 3], [994, 0], [994, 1], [994, 2], [994, 3], [995, 0], [995, 1], [995, 2], [995, 3], [996, 0], [996, 1], [996, 2], [996, 3], [997, 0], [997, 1], [997, 2], [997, 3], [998, 0], [998, 1], [998, 2], [998, 3], [999, 0], [999, 1], [999, 2], [999, 3], [1000, 0], [1000, 1], [1000, 2], [1000, 3], [1001, 0], [1001, 1], [1001, 2], [1001, 3], [1002, 0], [1002, 1], [1002, 2], [1002, 3], [1003, 0], [1003, 1], [1003, 2], [1003, 3], [1004, 0], [1004, 1], [1004, 2], [1004, 3], [1005, 0], [1005, 1], [1005, 2], [1005, 3], [1006, 0], [1006, 1], [1006, 2], [1006, 3], [1007, 0], [1007, 1], [1007, 2], [1007, 3], [1008, 0], [1008, 1], [1008, 2], [1008, 3], [1009, 0], [1009, 1], [1009, 2], [1009, 3], [1010, 0], [1010, 1], [1010, 2], [1010, 3], [1011, 0], [1011, 1], [1011, 2], [1011, 3], [1012, 0], [1012, 1], [1012, 2], [1012, 3], [1013, 0], [1013, 1], [1013, 2], [1013, 3], [1014, 0], [1014, 1], [1014, 2], [1014, 3], [1015, 0], [1015, 1], [1015, 2], [1015, 3], [1016, 0], [1016, 1], [1016, 2], [1016, 3], [1017, 0], [1017, 1], [1017, 2], [1017, 3], [1018, 0], [1018, 1], [1018, 2], [1018, 3], [1019, 0], [1019, 1], [1019, 2], [1019, 3], [1020, 0], [1020, 1], [1020, 2], [1020, 3], [1021, 0], [1021, 1], [1021, 2], [1021, 3], [1022, 0], [1022, 1], [1022, 2], [1022, 3], [1023, 0], [1023, 1], [1023, 2], [1023, 3], [1024, 0], [1024, 1], [1024, 2], [1024, 3], [1025, 0], [1025, 1], [1025, 2], [1025, 3], [1026, 0], [1026, 1], [1026, 2], [1026, 3], [1027, 0], [1027, 1], [1027, 2], [1027, 3], [1028, 0], [1028, 1], [1028, 2], [1028, 3], [1029, 0], [1029, 1], [1029, 2], [1029, 3], [1030, 0], [1030, 1], [1030, 2], [1030, 3], [1031, 0], [1031, 1], [1031, 2], [1031, 3], [1032, 0], [1032, 1], [1032, 2], [1032, 3], [1033, 0], [1033, 1], [1033, 2], [1033, 3], [1034, 0], [1034, 1], [1034, 2], [1034, 3], [1035, 0], [1035, 1], [1035, 2], [1035, 3], [1036, 0], [1036, 1], [1036, 2], [1036, 3], [1037, 0], [1037, 1], [1037, 2], [1037, 3], [1038, 0], [1038, 1], [1038, 2], [1038, 3], [1039, 0], [1039, 1], [1039, 2], [1039, 3], [1040, 0], [1040, 1], [1040, 2], [1040, 3], [1041, 0], [1041, 1], [1041, 2], [1041, 3], [1042, 0], [1042, 1], [1042, 2], [1042, 3], [1043, 0], [1043, 1], [1043, 2], [1043, 3], [1044, 0], [1044, 1], [1044, 2], [1044, 3], [1045, 0], [1045, 1], [1045, 2], [1045, 3], [1046, 0], [1046, 1], [1046, 2], [1046, 3], [1047, 0], [1047, 1], [1047, 2], [1047, 3], [1048, 0], [1048, 1], [1048, 2], [1048, 3], [1049, 0], [1049, 1], [1049, 2], [1049, 3], [1050, 0], [1050, 1], [1050, 2], [1050, 3], [1051, 0], [1051, 1], [1051, 2], [1051, 3], [1052, 0], [1052, 1], [1052, 2], [1052, 3], [1053, 0], [1053, 1], [1053, 2], [1053, 3], [1054, 0], [1054, 1], [1054, 2], [1054, 3], [1055, 0], [1055, 1], [1055, 2], [1055, 3], [1056, 0], [1056, 1], [1056, 2], [1056, 3], [1057, 0], [1057, 1], [1057, 2], [1057, 3], [1058, 0], [1058, 1], [1058, 2], [1058, 3], [1059, 0], [1059, 1], [1059, 2], [1059, 3], [1060, 0], [1060, 1], [1060, 2], [1060, 3], [1061, 0], [1061, 1], [1061, 2], [1061, 3], [1062, 0], [1062, 1], [1062, 2], [1062, 3], [1063, 0], [1063, 1], [1063, 2], [1063, 3], [1064, 0], [1064, 1], [1064, 2], [1064, 3], [1065, 0], [1065, 1], [1065, 2], [1065, 3], [1066, 0], [1066, 1], [1066, 2], [1066, 3], [1067, 0], [1067, 1], [1067, 2], [1067, 3], [1068, 0], [1068, 1], [1068, 2], [1068, 3], [1069, 0], [1069, 1], [1069, 2], [1069, 3], [1070, 0], [1070, 1], [1070, 2], [1070, 3], [1071, 0], [1071, 1], [1071, 2], [1071, 3], [1072, 0], [1072, 1], [1072, 2], [1072, 3], [1073, 0], [1073, 1], [1073, 2], [1073, 3], [1074, 0], [1074, 1], [1074, 2], [1074, 3], [1075, 0], [1075, 1], [1075, 2], [1075, 3], [1076, 0], [1076, 1], [1076, 2], [1076, 3], [1077, 0], [1077, 1], [1077, 2], [1077, 3], [1078, 0], [1078, 1], [1078, 2], [1078, 3], [1079, 0], [1079, 1], [1079, 2], [1079, 3], [1080, 0], [1080, 1], [1080, 2], [1080, 3], [1081, 0], [1081, 1], [1081, 2], [1081, 3], [1082, 0], [1082, 1], [1082, 2], [1082, 3], [1083, 0], [1083, 1], [1083, 2], [1083, 3], [1084, 0], [1084, 1], [1084, 2], [1084, 3], [1085, 0], [1085, 1], [1085, 2], [1085, 3], [1086, 0], [1086, 1], [1086, 2], [1086, 3], [1087, 0], [1087, 1], [1087, 2], [1087, 3], [1088, 0], [1088, 1], [1088, 2], [1088, 3], [1089, 0], [1089, 1], [1089, 2], [1089, 3], [1090, 0], [1090, 1], [1090, 2], [1090, 3], [1091, 0], [1091, 1], [1091, 2], [1091, 3], [1092, 0], [1092, 1], [1092, 2], [1092, 3], [1093, 0], [1093, 1], [1093, 2], [1093, 3], [1094, 0], [1094, 1], [1094, 2], [1094, 3], [1095, 0], [1095, 1], [1095, 2], [1095, 3], [1096, 0], [1096, 1], [1096, 2], [1096, 3], [1097, 0], [1097, 1], [1097, 2], [1097, 3], [1098, 0], [1098, 1], [1098, 2], [1098, 3], [1099, 0], [1099, 1], [1099, 2], [1099, 3], [1100, 0], [1100, 1], [1100, 2], [1100, 3], [1101, 0], [1101, 1], [1101, 2], [1101, 3], [1102, 0], [1102, 1], [1102, 2], [1102, 3], [1103, 0], [1103, 1], [1103, 2], [1103, 3], [1104, 0], [1104, 1], [1104, 2], [1104, 3], [1105, 0], [1105, 1], [1105, 2], [1105, 3], [1106, 0], [1106, 1], [1106, 2], [1106, 3], [1107, 0], [1107, 1], [1107, 2], [1107, 3], [1108, 0], [1108, 1], [1108, 2], [1108, 3], [1109, 0], [1109, 1], [1109, 2], [1109, 3], [1110, 0], [1110, 1], [1110, 2], [1110, 3], [1111, 0], [1111, 1], [1111, 2], [1111, 3], [1112, 0], [1112, 1], [1112, 2], [1112, 3], [1113, 0], [1113, 1], [1113, 2], [1113, 3], [1114, 0], [1114, 1], [1114, 2], [1114, 3], [1115, 0], [1115, 1], [1115, 2], [1115, 3], [1116, 0], [1116, 1], [1116, 2], [1116, 3], [1117, 0], [1117, 1], [1117, 2], [1117, 3], [1118, 0], [1118, 1], [1118, 2], [1118, 3], [1119, 0], [1119, 1], [1119, 2], [1119, 3], [1120, 0], [1120, 1], [1120, 2], [1120, 3], [1121, 0], [1121, 1], [1121, 2], [1121, 3], [1122, 0], [1122, 1], [1122, 2], [1122, 3], [1123, 0], [1123, 1], [1123, 2], [1123, 3], [1124, 0], [1124, 1], [1124, 2], [1124, 3], [1125, 0], [1125, 1], [1125, 2], [1125, 3], [1126, 0], [1126, 1], [1126, 2], [1126, 3], [1127, 0], [1127, 1], [1127, 2], [1127, 3], [1128, 0], [1128, 1], [1128, 2], [1128, 3], [1129, 0], [1129, 1], [1129, 2], [1129, 3], [1130, 0], [1130, 1], [1130, 2], [1130, 3], [1131, 0], [1131, 1], [1131, 2], [1131, 3], [1132, 0], [1132, 1], [1132, 2], [1132, 3], [1133, 0], [1133, 1], [1133, 2], [1133, 3], [1134, 0], [1134, 1], [1134, 2], [1134, 3], [1135, 0], [1135, 1], [1135, 2], [1135, 3], [1136, 0], [1136, 1], [1136, 2], [1136, 3], [1137, 0], [1137, 1], [1137, 2], [1137, 3], [1138, 0], [1138, 1], [1138, 2], [1138, 3], [1139, 0], [1139, 1], [1139, 2], [1139, 3], [1140, 0], [1140, 1], [1140, 2], [1140, 3], [1141, 0], [1141, 1], [1141, 2], [1141, 3], [1142, 0], [1142, 1], [1142, 2], [1142, 3], [1143, 0], [1143, 1], [1143, 2], [1143, 3], [1144, 0], [1144, 1], [1144, 2], [1144, 3], [1145, 0], [1145, 1], [1145, 2], [1145, 3], [1146, 0], [1146, 1], [1146, 2], [1146, 3], [1147, 0], [1147, 1], [1147, 2], [1147, 3], [1148, 0], [1148, 1], [1148, 2], [1148, 3], [1149, 0], [1149, 1], [1149, 2], [1149, 3], [1150, 0], [1150, 1], [1150, 2], [1150, 3], [1151, 0], [1151, 1], [1151, 2], [1151, 3], [1152, 0], [1152, 1], [1152, 2], [1152, 3], [1153, 0], [1153, 1], [1153, 2], [1153, 3], [1154, 0], [1154, 1], [1154, 2], [1154, 3], [1155, 0], [1155, 1], [1155, 2], [1155, 3], [1156, 0], [1156, 1], [1156, 2], [1156, 3], [1157, 0], [1157, 1], [1157, 2], [1157, 3], [1158, 0], [1158, 1], [1158, 2], [1158, 3], [1159, 0], [1159, 1], [1159, 2], [1159, 3], [1160, 0], [1160, 1], [1160, 2], [1160, 3], [1161, 0], [1161, 1], [1161, 2], [1161, 3], [1162, 0], [1162, 1], [1162, 2], [1162, 3], [1163, 0], [1163, 1], [1163, 2], [1163, 3], [1164, 0], [1164, 1], [1164, 2], [1164, 3], [1165, 0], [1165, 1], [1165, 2], [1165, 3], [1166, 0], [1166, 1], [1166, 2], [1166, 3], [1167, 0], [1167, 1], [1167, 2], [1167, 3], [1168, 0], [1168, 1], [1168, 2], [1168, 3], [1169, 0], [1169, 1], [1169, 2], [1169, 3], [1170, 0], [1170, 1], [1170, 2], [1170, 3], [1171, 0], [1171, 1], [1171, 2], [1171, 3], [1172, 0], [1172, 1], [1172, 2], [1172, 3], [1173, 0], [1173, 1], [1173, 2], [1173, 3], [1174, 0], [1174, 1], [1174, 2], [1174, 3], [1175, 0], [1175, 1], [1175, 2], [1175, 3], [1176, 0], [1176, 1], [1176, 2], [1176, 3], [1177, 0], [1177, 1], [1177, 2], [1177, 3], [1178, 0], [1178, 1], [1178, 2], [1178, 3], [1179, 0], [1179, 1], [1179, 2], [1179, 3], [1180, 0], [1180, 1], [1180, 2], [1180, 3], [1181, 0], [1181, 1], [1181, 2], [1181, 3], [1182, 0], [1182, 1], [1182, 2], [1182, 3], [1183, 0], [1183, 1], [1183, 2], [1183, 3], [1184, 0], [1184, 1], [1184, 2], [1184, 3], [1185, 0], [1185, 1], [1185, 2], [1185, 3], [1186, 0], [1186, 1], [1186, 2], [1186, 3], [1187, 0], [1187, 1], [1187, 2], [1187, 3], [1188, 0], [1188, 1], [1188, 2], [1188, 3], [1189, 0], [1189, 1], [1189, 2], [1189, 3], [1190, 0], [1190, 1], [1190, 2], [1190, 3], [1191, 0], [1191, 1], [1191, 2], [1191, 3], [1192, 0], [1192, 1], [1192, 2], [1192, 3], [1193, 0], [1193, 1], [1193, 2], [1193, 3], [1194, 0], [1194, 1], [1194, 2], [1194, 3], [1195, 0], [1195, 1], [1195, 2], [1195, 3], [1196, 0], [1196, 1], [1196, 2], [1196, 3], [1197, 0], [1197, 1], [1197, 2], [1197, 3], [1198, 0], [1198, 1], [1198, 2], [1198, 3], [1199, 0], [1199, 1], [1199, 2], [1199, 3], [1200, 0], [1200, 1], [1200, 2], [1200, 3], [1201, 0], [1201, 1], [1201, 2], [1201, 3], [1202, 0], [1202, 1], [1202, 2], [1202, 3], [1203, 0], [1203, 1], [1203, 2], [1203, 3], [1204, 0], [1204, 1], [1204, 2], [1204, 3], [1205, 0], [1205, 1], [1205, 2], [1205, 3], [1206, 0], [1206, 1], [1206, 2], [1206, 3], [1207, 0], [1207, 1], [1207, 2], [1207, 3], [1208, 0], [1208, 1], [1208, 2], [1208, 3], [1209, 0], [1209, 1], [1209, 2], [1209, 3], [1210, 0], [1210, 1], [1210, 2], [1210, 3], [1211, 0], [1211, 1], [1211, 2], [1211, 3], [1212, 0], [1212, 1], [1212, 2], [1212, 3], [1213, 0], [1213, 1], [1213, 2], [1213, 3], [1214, 0], [1214, 1], [1214, 2], [1214, 3], [1215, 0], [1215, 1], [1215, 2], [1215, 3], [1216, 0], [1216, 1], [1216, 2], [1216, 3], [1217, 0], [1217, 1], [1217, 2], [1217, 3], [1218, 0], [1218, 1], [1218, 2], [1218, 3], [1219, 0], [1219, 1], [1219, 2], [1219, 3], [1220, 0], [1220, 1], [1220, 2], [1220, 3], [1221, 0], [1221, 1], [1221, 2], [1221, 3], [1222, 0], [1222, 1], [1222, 2], [1222, 3], [1223, 0], [1223, 1], [1223, 2], [1223, 3], [1224, 0], [1224, 1], [1224, 2], [1224, 3], [1225, 0], [1225, 1], [1225, 2], [1225, 3], [1226, 0], [1226, 1], [1226, 2], [1226, 3], [1227, 0], [1227, 1], [1227, 2], [1227, 3], [1228, 0], [1228, 1], [1228, 2], [1228, 3], [1229, 0], [1229, 1], [1229, 2], [1229, 3], [1230, 0], [1230, 1], [1230, 2], [1230, 3], [1231, 0], [1231, 1], [1231, 2], [1231, 3], [1232, 0], [1232, 1], [1232, 2], [1232, 3], [1233, 0], [1233, 1], [1233, 2], [1233, 3], [1234, 0], [1234, 1], [1234, 2], [1234, 3], [1235, 0], [1235, 1], [1235, 2], [1235, 3], [1236, 0], [1236, 1], [1236, 2], [1236, 3], [1237, 0], [1237, 1], [1237, 2], [1237, 3], [1238, 0], [1238, 1], [1238, 2], [1238, 3], [1239, 0], [1239, 1], [1239, 2], [1239, 3], [1240, 0], [1240, 1], [1240, 2], [1240, 3], [1241, 0], [1241, 1], [1241, 2], [1241, 3], [1242, 0], [1242, 1], [1242, 2], [1242, 3], [1243, 0], [1243, 1], [1243, 2], [1243, 3], [1244, 0], [1244, 1], [1244, 2], [1244, 3], [1245, 0], [1245, 1], [1245, 2], [1245, 3], [1246, 0], [1246, 1], [1246, 2], [1246, 3], [1247, 0], [1247, 1], [1247, 2], [1247, 3], [1248, 0], [1248, 1], [1248, 2], [1248, 3], [1249, 0], [1249, 1], [1249, 2], [1249, 3], [1250, 0], [1250, 1], [1250, 2], [1250, 3], [1251, 0], [1251, 1], [1251, 2], [1251, 3], [1252, 0], [1252, 1], [1252, 2], [1252, 3], [1253, 0], [1253, 1], [1253, 2], [1253, 3], [1254, 0], [1254, 1], [1254, 2], [1254, 3], [1255, 0], [1255, 1], [1255, 2], [1255, 3], [1256, 0], [1256, 1], [1256, 2], [1256, 3], [1257, 0], [1257, 1], [1257, 2], [1257, 3], [1258, 0], [1258, 1], [1258, 2], [1258, 3], [1259, 0], [1259, 1], [1259, 2], [1259, 3], [1260, 0], [1260, 1], [1260, 2], [1260, 3], [1261, 0], [1261, 1], [1261, 2], [1261, 3], [1262, 0], [1262, 1], [1262, 2], [1262, 3], [1263, 0], [1263, 1], [1263, 2], [1263, 3], [1264, 0], [1264, 1], [1264, 2], [1264, 3], [1265, 0], [1265, 1], [1265, 2], [1265, 3], [1266, 0], [1266, 1], [1266, 2], [1266, 3], [1267, 0], [1267, 1], [1267, 2], [1267, 3], [1268, 0], [1268, 1], [1268, 2], [1268, 3], [1269, 0], [1269, 1], [1269, 2], [1269, 3], [1270, 0], [1270, 1], [1270, 2], [1270, 3], [1271, 0], [1271, 1], [1271, 2], [1271, 3], [1272, 0], [1272, 1], [1272, 2], [1272, 3], [1273, 0], [1273, 1], [1273, 2], [1273, 3], [1274, 0], [1274, 1], [1274, 2], [1274, 3], [1275, 0], [1275, 1], [1275, 2], [1275, 3], [1276, 0], [1276, 1], [1276, 2], [1276, 3], [1277, 0], [1277, 1], [1277, 2], [1277, 3], [1278, 0], [1278, 1], [1278, 2], [1278, 3], [1279, 0], [1279, 1], [1279, 2], [1279, 3], [1280, 0], [1280, 1], [1280, 2], [1280, 3], [1281, 0], [1281, 1], [1281, 2], [1281, 3], [1282, 0], [1282, 1], [1282, 2], [1282, 3], [1283, 0], [1283, 1], [1283, 2], [1283, 3], [1284, 0], [1284, 1], [1284, 2], [1284, 3], [1285, 0], [1285, 1], [1285, 2], [1285, 3], [1286, 0], [1286, 1], [1286, 2], [1286, 3], [1287, 0], [1287, 1], [1287, 2], [1287, 3], [1288, 0], [1288, 1], [1288, 2], [1288, 3], [1289, 0], [1289, 1], [1289, 2], [1289, 3], [1290, 0], [1290, 1], [1290, 2], [1290, 3], [1291, 0], [1291, 1], [1291, 2], [1291, 3], [1292, 0], [1292, 1], [1292, 2], [1292, 3], [1293, 0], [1293, 1], [1293, 2], [1293, 3], [1294, 0], [1294, 1], [1294, 2], [1294, 3], [1295, 0], [1295, 1], [1295, 2], [1295, 3], [1296, 0], [1296, 1], [1296, 2], [1296, 3], [1297, 0], [1297, 1], [1297, 2], [1297, 3], [1298, 0], [1298, 1], [1298, 2], [1298, 3], [1299, 0], [1299, 1], [1299, 2], [1299, 3], [1300, 0], [1300, 1], [1300, 2], [1300, 3], [1301, 0], [1301, 1], [1301, 2], [1301, 3], [1302, 0], [1302, 1], [1302, 2], [1302, 3], [1303, 0], [1303, 1], [1303, 2], [1303, 3], [1304, 0], [1304, 1], [1304, 2], [1304, 3], [1305, 0], [1305, 1], [1305, 2], [1305, 3], [1306, 0], [1306, 1], [1306, 2], [1306, 3], [1307, 0], [1307, 1], [1307, 2], [1307, 3], [1308, 0], [1308, 1], [1308, 2], [1308, 3], [1309, 0], [1309, 1], [1309, 2], [1309, 3], [1310, 0], [1310, 1], [1310, 2], [1310, 3], [1311, 0], [1311, 1], [1311, 2], [1311, 3], [1312, 0], [1312, 1], [1312, 2], [1312, 3], [1313, 0], [1313, 1], [1313, 2], [1313, 3], [1314, 0], [1314, 1], [1314, 2], [1314, 3], [1315, 0], [1315, 1], [1315, 2], [1315, 3], [1316, 0], [1316, 1], [1316, 2], [1316, 3], [1317, 0], [1317, 1], [1317, 2], [1317, 3], [1318, 0], [1318, 1], [1318, 2], [1318, 3], [1319, 0], [1319, 1], [1319, 2], [1319, 3], [1320, 0], [1320, 1], [1320, 2], [1320, 3], [1321, 0], [1321, 1], [1321, 2], [1321, 3], [1322, 0], [1322, 1], [1322, 2], [1322, 3], [1323, 0], [1323, 1], [1323, 2], [1323, 3], [1324, 0], [1324, 1], [1324, 2], [1324, 3], [1325, 0], [1325, 1], [1325, 2], [1325, 3], [1326, 0], [1326, 1], [1326, 2], [1326, 3], [1327, 0], [1327, 1], [1327, 2], [1327, 3], [1328, 0], [1328, 1], [1328, 2], [1328, 3], [1329, 0], [1329, 1], [1329, 2], [1329, 3], [1330, 0], [1330, 1], [1330, 2], [1330, 3], [1331, 0], [1331, 1], [1331, 2], [1331, 3], [1332, 0], [1332, 1], [1332, 2], [1332, 3], [1333, 0], [1333, 1], [1333, 2], [1333, 3], [1334, 0], [1334, 1], [1334, 2], [1334, 3], [1335, 0], [1335, 1], [1335, 2], [1335, 3], [1336, 0], [1336, 1], [1336, 2], [1336, 3], [1337, 0], [1337, 1], [1337, 2], [1337, 3], [1338, 0], [1338, 1], [1338, 2], [1338, 3], [1339, 0], [1339, 1], [1339, 2], [1339, 3], [1340, 0], [1340, 1], [1340, 2], [1340, 3], [1341, 0], [1341, 1], [1341, 2], [1341, 3], [1342, 0], [1342, 1], [1342, 2], [1342, 3], [1343, 0], [1343, 1], [1343, 2], [1343, 3], [1344, 0], [1344, 1], [1344, 2], [1344, 3], [1345, 0], [1345, 1], [1345, 2], [1345, 3], [1346, 0], [1346, 1], [1346, 2], [1346, 3], [1347, 0], [1347, 1], [1347, 2], [1347, 3], [1348, 0], [1348, 1], [1348, 2], [1348, 3], [1349, 0], [1349, 1], [1349, 2], [1349, 3], [1350, 0], [1350, 1], [1350, 2], [1350, 3], [1351, 0], [1351, 1], [1351, 2], [1351, 3], [1352, 0], [1352, 1], [1352, 2], [1352, 3], [1353, 0], [1353, 1], [1353, 2], [1353, 3], [1354, 0], [1354, 1], [1354, 2], [1354, 3], [1355, 0], [1355, 1], [1355, 2], [1355, 3], [1356, 0], [1356, 1], [1356, 2], [1356, 3], [1357, 0], [1357, 1], [1357, 2], [1357, 3], [1358, 0], [1358, 1], [1358, 2], [1358, 3], [1359, 0], [1359, 1], [1359, 2], [1359, 3], [1360, 0], [1360, 1], [1360, 2], [1360, 3], [1361, 0], [1361, 1], [1361, 2], [1361, 3], [1362, 0], [1362, 1], [1362, 2], [1362, 3], [1363, 0], [1363, 1], [1363, 2], [1363, 3], [1364, 0], [1364, 1], [1364, 2], [1364, 3], [1365, 0], [1365, 1], [1365, 2], [1365, 3], [1366, 0], [1366, 1], [1366, 2], [1366, 3], [1367, 0], [1367, 1], [1367, 2], [1367, 3], [1368, 0], [1368, 1], [1368, 2], [1368, 3], [1369, 0], [1369, 1], [1369, 2], [1369, 3], [1370, 0], [1370, 1], [1370, 2], [1370, 3], [1371, 0], [1371, 1], [1371, 2], [1371, 3], [1372, 0], [1372, 1], [1372, 2], [1372, 3], [1373, 0], [1373, 1], [1373, 2], [1373, 3], [1374, 0], [1374, 1], [1374, 2], [1374, 3], [1375, 0], [1375, 1], [1375, 2], [1375, 3], [1376, 0], [1376, 1], [1376, 2], [1376, 3], [1377, 0], [1377, 1], [1377, 2], [1377, 3], [1378, 0], [1378, 1], [1378, 2], [1378, 3], [1379, 0], [1379, 1], [1379, 2], [1379, 3], [1380, 0], [1380, 1], [1380, 2], [1380, 3], [1381, 0], [1381, 1], [1381, 2], [1381, 3], [1382, 0], [1382, 1], [1382, 2], [1382, 3], [1383, 0], [1383, 1], [1383, 2], [1383, 3], [1384, 0], [1384, 1], [1384, 2], [1384, 3], [1385, 0], [1385, 1], [1385, 2], [1385, 3], [1386, 0], [1386, 1], [1386, 2], [1386, 3], [1387, 0], [1387, 1], [1387, 2], [1387, 3], [1388, 0], [1388, 1], [1388, 2], [1388, 3], [1389, 0], [1389, 1], [1389, 2], [1389, 3], [1390, 0], [1390, 1], [1390, 2], [1390, 3], [1391, 0], [1391, 1], [1391, 2], [1391, 3], [1392, 0], [1392, 1], [1392, 2], [1392, 3], [1393, 0], [1393, 1], [1393, 2], [1393, 3], [1394, 0], [1394, 1], [1394, 2], [1394, 3], [1395, 0], [1395, 1], [1395, 2], [1395, 3], [1396, 0], [1396, 1], [1396, 2], [1396, 3], [1397, 0], [1397, 1], [1397, 2], [1397, 3], [1398, 0], [1398, 1], [1398, 2], [1398, 3], [1399, 0], [1399, 1], [1399, 2], [1399, 3], [1400, 0], [1400, 1], [1400, 2], [1400, 3], [1401, 0], [1401, 1], [1401, 2], [1401, 3], [1402, 0], [1402, 1], [1402, 2], [1402, 3], [1403, 0], [1403, 1], [1403, 2], [1403, 3], [1404, 0], [1404, 1], [1404, 2], [1404, 3], [1405, 0], [1405, 1], [1405, 2], [1405, 3], [1406, 0], [1406, 1], [1406, 2], [1406, 3], [1407, 0], [1407, 1], [1407, 2], [1407, 3], [1408, 0], [1408, 1], [1408, 2], [1408, 3], [1409, 0], [1409, 1], [1409, 2], [1409, 3], [1410, 0], [1410, 1], [1410, 2], [1410, 3], [1411, 0], [1411, 1], [1411, 2], [1411, 3], [1412, 0], [1412, 1], [1412, 2], [1412, 3], [1413, 0], [1413, 1], [1413, 2], [1413, 3], [1414, 0], [1414, 1], [1414, 2], [1414, 3], [1415, 0], [1415, 1], [1415, 2], [1415, 3], [1416, 0], [1416, 1], [1416, 2], [1416, 3], [1417, 0], [1417, 1], [1417, 2], [1417, 3], [1418, 0], [1418, 1], [1418, 2], [1418, 3], [1419, 0], [1419, 1], [1419, 2], [1419, 3], [1420, 0], [1420, 1], [1420, 2], [1420, 3], [1421, 0], [1421, 1], [1421, 2], [1421, 3], [1422, 0], [1422, 1], [1422, 2], [1422, 3], [1423, 0], [1423, 1], [1423, 2], [1423, 3], [1424, 0], [1424, 1], [1424, 2], [1424, 3], [1425, 0], [1425, 1], [1425, 2], [1425, 3], [1426, 0], [1426, 1], [1426, 2], [1426, 3], [1427, 0], [1427, 1], [1427, 2], [1427, 3], [1428, 0], [1428, 1], [1428, 2], [1428, 3], [1429, 0], [1429, 1], [1429, 2], [1429, 3], [1430, 0], [1430, 1], [1430, 2], [1430, 3], [1431, 0], [1431, 1], [1431, 2], [1431, 3], [1432, 0], [1432, 1], [1432, 2], [1432, 3], [1433, 0], [1433, 1], [1433, 2], [1433, 3], [1434, 0], [1434, 1], [1434, 2], [1434, 3], [1435, 0], [1435, 1], [1435, 2], [1435, 3], [1436, 0], [1436, 1], [1436, 2], [1436, 3], [1437, 0], [1437, 1], [1437, 2], [1437, 3], [1438, 0], [1438, 1], [1438, 2], [1438, 3], [1439, 0], [1439, 1], [1439, 2], [1439, 3], [1440, 0], [1440, 1], [1440, 2], [1440, 3], [1441, 0], [1441, 1], [1441, 2], [1441, 3], [1442, 0], [1442, 1], [1442, 2], [1442, 3], [1443, 0], [1443, 1], [1443, 2], [1443, 3], [1444, 0], [1444, 1], [1444, 2], [1444, 3], [1445, 0], [1445, 1], [1445, 2], [1445, 3], [1446, 0], [1446, 1], [1446, 2], [1446, 3], [1447, 0], [1447, 1], [1447, 2], [1447, 3], [1448, 0], [1448, 1], [1448, 2], [1448, 3], [1449, 0], [1449, 1], [1449, 2], [1449, 3], [1450, 0], [1450, 1], [1450, 2], [1450, 3], [1451, 0], [1451, 1], [1451, 2], [1451, 3], [1452, 0], [1452, 1], [1452, 2], [1452, 3], [1453, 0], [1453, 1], [1453, 2], [1453, 3], [1454, 0], [1454, 1], [1454, 2], [1454, 3], [1455, 0], [1455, 1], [1455, 2], [1455, 3], [1456, 0], [1456, 1], [1456, 2], [1456, 3], [1457, 0], [1457, 1], [1457, 2], [1457, 3], [1458, 0], [1458, 1], [1458, 2], [1458, 3], [1459, 0], [1459, 1], [1459, 2], [1459, 3], [1460, 0], [1460, 1], [1460, 2], [1460, 3], [1461, 0], [1461, 1], [1461, 2], [1461, 3], [1462, 0], [1462, 1], [1462, 2], [1462, 3], [1463, 0], [1463, 1], [1463, 2], [1463, 3], [1464, 0], [1464, 1], [1464, 2], [1464, 3], [1465, 0], [1465, 1], [1465, 2], [1465, 3], [1466, 0], [1466, 1], [1466, 2], [1466, 3], [1467, 0], [1467, 1], [1467, 2], [1467, 3], [1468, 0], [1468, 1], [1468, 2], [1468, 3], [1469, 0], [1469, 1], [1469, 2], [1469, 3], [1470, 0], [1470, 1], [1470, 2], [1470, 3], [1471, 0], [1471, 1], [1471, 2], [1471, 3], [1472, 0], [1472, 1], [1472, 2], [1472, 3], [1473, 0], [1473, 1], [1473, 2], [1473, 3], [1474, 0], [1474, 1], [1474, 2], [1474, 3], [1475, 0], [1475, 1], [1475, 2], [1475, 3], [1476, 0], [1476, 1], [1476, 2], [1476, 3], [1477, 0], [1477, 1], [1477, 2], [1477, 3], [1478, 0], [1478, 1], [1478, 2], [1478, 3], [1479, 0], [1479, 1], [1479, 2], [1479, 3], [1480, 0], [1480, 1], [1480, 2], [1480, 3], [1481, 0], [1481, 1], [1481, 2], [1481, 3], [1482, 0], [1482, 1], [1482, 2], [1482, 3], [1483, 0], [1483, 1], [1483, 2], [1483, 3], [1484, 0], [1484, 1], [1484, 2], [1484, 3], [1485, 0], [1485, 1], [1485, 2], [1485, 3], [1486, 0], [1486, 1], [1486, 2], [1486, 3], [1487, 0], [1487, 1], [1487, 2], [1487, 3], [1488, 0], [1488, 1], [1488, 2], [1488, 3], [1489, 0], [1489, 1], [1489, 2], [1489, 3], [1490, 0], [1490, 1], [1490, 2], [1490, 3], [1491, 0], [1491, 1], [1491, 2], [1491, 3], [1492, 0], [1492, 1], [1492, 2], [1492, 3], [1493, 0], [1493, 1], [1493, 2], [1493, 3], [1494, 0], [1494, 1], [1494, 2], [1494, 3], [1495, 0], [1495, 1], [1495, 2], [1495, 3], [1496, 0], [1496, 1], [1496, 2], [1496, 3], [1497, 0], [1497, 1], [1497, 2], [1497, 3], [1498, 0], [1498, 1], [1498, 2], [1498, 3], [1499, 0], [1499, 1], [1499, 2], [1499, 3], [1500, 0], [1500, 1], [1500, 2], [1500, 3], [1501, 0], [1501, 1], [1501, 2], [1501, 3], [1502, 0], [1502, 1], [1502, 2], [1502, 3], [1503, 0], [1503, 1], [1503, 2], [1503, 3], [1504, 0], [1504, 1], [1504, 2], [1504, 3], [1505, 0], [1505, 1], [1505, 2], [1505, 3], [1506, 0], [1506, 1], [1506, 2], [1506, 3], [1507, 0], [1507, 1], [1507, 2], [1507, 3], [1508, 0], [1508, 1], [1508, 2], [1508, 3], [1509, 0], [1509, 1], [1509, 2], [1509, 3], [1510, 0], [1510, 1], [1510, 2], [1510, 3], [1511, 0], [1511, 1], [1511, 2], [1511, 3], [1512, 0], [1512, 1], [1512, 2], [1512, 3], [1513, 0], [1513, 1], [1513, 2], [1513, 3], [1514, 0], [1514, 1], [1514, 2], [1514, 3], [1515, 0], [1515, 1], [1515, 2], [1515, 3], [1516, 0], [1516, 1], [1516, 2], [1516, 3], [1517, 0], [1517, 1], [1517, 2], [1517, 3], [1518, 0], [1518, 1], [1518, 2], [1518, 3], [1519, 0], [1519, 1], [1519, 2], [1519, 3], [1520, 0], [1520, 1], [1520, 2], [1520, 3], [1521, 0], [1521, 1], [1521, 2], [1521, 3], [1522, 0], [1522, 1], [1522, 2], [1522, 3], [1523, 0], [1523, 1], [1523, 2], [1523, 3], [1524, 0], [1524, 1], [1524, 2], [1524, 3], [1525, 0], [1525, 1], [1525, 2], [1525, 3], [1526, 0], [1526, 1], [1526, 2], [1526, 3], [1527, 0], [1527, 1], [1527, 2], [1527, 3], [1528, 0], [1528, 1], [1528, 2], [1528, 3], [1529, 0], [1529, 1], [1529, 2], [1529, 3], [1530, 0], [1530, 1], [1530, 2], [1530, 3], [1531, 0], [1531, 1], [1531, 2], [1531, 3], [1532, 0], [1532, 1], [1532, 2], [1532, 3], [1533, 0], [1533, 1], [1533, 2], [1533, 3], [1534, 0], [1534, 1], [1534, 2], [1534, 3], [1535, 0], [1535, 1], [1535, 2], [1535, 3], [1536, 0], [1536, 1], [1536, 2], [1536, 3], [1537, 0], [1537, 1], [1537, 2], [1537, 3], [1538, 0], [1538, 1], [1538, 2], [1538, 3], [1539, 0], [1539, 1], [1539, 2], [1539, 3], [1540, 0], [1540, 1], [1540, 2], [1540, 3], [1541, 0], [1541, 1], [1541, 2], [1541, 3], [1542, 0], [1542, 1], [1542, 2], [1542, 3], [1543, 0], [1543, 1], [1543, 2], [1543, 3], [1544, 0], [1544, 1], [1544, 2], [1544, 3], [1545, 0], [1545, 1], [1545, 2], [1545, 3], [1546, 0], [1546, 1], [1546, 2], [1546, 3], [1547, 0], [1547, 1], [1547, 2], [1547, 3], [1548, 0], [1548, 1], [1548, 2], [1548, 3], [1549, 0], [1549, 1], [1549, 2], [1549, 3], [1550, 0], [1550, 1], [1550, 2], [1550, 3], [1551, 0], [1551, 1], [1551, 2], [1551, 3], [1552, 0], [1552, 1], [1552, 2], [1552, 3], [1553, 0], [1553, 1], [1553, 2], [1553, 3], [1554, 0], [1554, 1], [1554, 2], [1554, 3], [1555, 0], [1555, 1], [1555, 2], [1555, 3], [1556, 0], [1556, 1], [1556, 2], [1556, 3], [1557, 0], [1557, 1], [1557, 2], [1557, 3], [1558, 0], [1558, 1], [1558, 2], [1558, 3], [1559, 0], [1559, 1], [1559, 2], [1559, 3], [1560, 0], [1560, 1], [1560, 2], [1560, 3], [1561, 0], [1561, 1], [1561, 2], [1561, 3], [1562, 0], [1562, 1], [1562, 2], [1562, 3], [1563, 0], [1563, 1], [1563, 2], [1563, 3], [1564, 0], [1564, 1], [1564, 2], [1564, 3], [1565, 0], [1565, 1], [1565, 2], [1565, 3], [1566, 0], [1566, 1], [1566, 2], [1566, 3], [1567, 0], [1567, 1], [1567, 2], [1567, 3], [1568, 0], [1568, 1], [1568, 2], [1568, 3], [1569, 0], [1569, 1], [1569, 2], [1569, 3], [1570, 0], [1570, 1], [1570, 2], [1570, 3], [1571, 0], [1571, 1], [1571, 2], [1571, 3], [1572, 0], [1572, 1], [1572, 2], [1572, 3], [1573, 0], [1573, 1], [1573, 2], [1573, 3], [1574, 0], [1574, 1], [1574, 2], [1574, 3], [1575, 0], [1575, 1], [1575, 2], [1575, 3], [1576, 0], [1576, 1], [1576, 2], [1576, 3], [1577, 0], [1577, 1], [1577, 2], [1577, 3], [1578, 0], [1578, 1], [1578, 2], [1578, 3], [1579, 0], [1579, 1], [1579, 2], [1579, 3], [1580, 0], [1580, 1], [1580, 2], [1580, 3], [1581, 0], [1581, 1], [1581, 2], [1581, 3], [1582, 0], [1582, 1], [1582, 2], [1582, 3], [1583, 0], [1583, 1], [1583, 2], [1583, 3], [1584, 0], [1584, 1], [1584, 2], [1584, 3], [1585, 0], [1585, 1], [1585, 2], [1585, 3], [1586, 0], [1586, 1], [1586, 2], [1586, 3], [1587, 0], [1587, 1], [1587, 2], [1587, 3], [1588, 0], [1588, 1], [1588, 2], [1588, 3], [1589, 0], [1589, 1], [1589, 2], [1589, 3], [1590, 0], [1590, 1], [1590, 2], [1590, 3], [1591, 0], [1591, 1], [1591, 2], [1591, 3], [1592, 0], [1592, 1], [1592, 2], [1592, 3], [1593, 0], [1593, 1], [1593, 2], [1593, 3], [1594, 0], [1594, 1], [1594, 2], [1594, 3], [1595, 0], [1595, 1], [1595, 2], [1595, 3], [1596, 0], [1596, 1], [1596, 2], [1596, 3], [1597, 0], [1597, 1], [1597, 2], [1597, 3], [1598, 0], [1598, 1], [1598, 2], [1598, 3], [1599, 0], [1599, 1], [1599, 2], [1599, 3], [1600, 0], [1600, 1], [1600, 2], [1600, 3], [1601, 0], [1601, 1], [1601, 2], [1601, 3], [1602, 0], [1602, 1], [1602, 2], [1602, 3], [1603, 0], [1603, 1], [1603, 2], [1603, 3], [1604, 0], [1604, 1], [1604, 2], [1604, 3], [1605, 0], [1605, 1], [1605, 2], [1605, 3], [1606, 0], [1606, 1], [1606, 2], [1606, 3], [1607, 0], [1607, 1], [1607, 2], [1607, 3], [1608, 0], [1608, 1], [1608, 2], [1608, 3], [1609, 0], [1609, 1], [1609, 2], [1609, 3], [1610, 0], [1610, 1], [1610, 2], [1610, 3], [1611, 0], [1611, 1], [1611, 2], [1611, 3], [1612, 0], [1612, 1], [1612, 2], [1612, 3], [1613, 0], [1613, 1], [1613, 2], [1613, 3], [1614, 0], [1614, 1], [1614, 2], [1614, 3], [1615, 0], [1615, 1], [1615, 2], [1615, 3], [1616, 0], [1616, 1], [1616, 2], [1616, 3], [1617, 0], [1617, 1], [1617, 2], [1617, 3], [1618, 0], [1618, 1], [1618, 2], [1618, 3], [1619, 0], [1619, 1], [1619, 2], [1619, 3], [1620, 0], [1620, 1], [1620, 2], [1620, 3], [1621, 0], [1621, 1], [1621, 2], [1621, 3], [1622, 0], [1622, 1], [1622, 2], [1622, 3], [1623, 0], [1623, 1], [1623, 2], [1623, 3], [1624, 0], [1624, 1], [1624, 2], [1624, 3], [1625, 0], [1625, 1], [1625, 2], [1625, 3], [1626, 0], [1626, 1], [1626, 2], [1626, 3], [1627, 0], [1627, 1], [1627, 2], [1627, 3], [1628, 0], [1628, 1], [1628, 2], [1628, 3], [1629, 0], [1629, 1], [1629, 2], [1629, 3], [1630, 0], [1630, 1], [1630, 2], [1630, 3], [1631, 0], [1631, 1], [1631, 2], [1631, 3], [1632, 0], [1632, 1], [1632, 2], [1632, 3], [1633, 0], [1633, 1], [1633, 2], [1633, 3], [1634, 0], [1634, 1], [1634, 2], [1634, 3], [1635, 0], [1635, 1], [1635, 2], [1635, 3], [1636, 0], [1636, 1], [1636, 2], [1636, 3], [1637, 0], [1637, 1], [1637, 2], [1637, 3], [1638, 0], [1638, 1], [1638, 2], [1638, 3], [1639, 0], [1639, 1], [1639, 2], [1639, 3], [1640, 0], [1640, 1], [1640, 2], [1640, 3], [1641, 0], [1641, 1], [1641, 2], [1641, 3], [1642, 0], [1642, 1], [1642, 2], [1642, 3], [1643, 0], [1643, 1], [1643, 2], [1643, 3], [1644, 0], [1644, 1], [1644, 2], [1644, 3], [1645, 0], [1645, 1], [1645, 2], [1645, 3], [1646, 0], [1646, 1], [1646, 2], [1646, 3], [1647, 0], [1647, 1], [1647, 2], [1647, 3], [1648, 0], [1648, 1], [1648, 2], [1648, 3], [1649, 0], [1649, 1], [1649, 2], [1649, 3], [1650, 0], [1650, 1], [1650, 2], [1650, 3], [1651, 0], [1651, 1], [1651, 2], [1651, 3], [1652, 0], [1652, 1], [1652, 2], [1652, 3], [1653, 0], [1653, 1], [1653, 2], [1653, 3], [1654, 0], [1654, 1], [1654, 2], [1654, 3], [1655, 0], [1655, 1], [1655, 2], [1655, 3], [1656, 0], [1656, 1], [1656, 2], [1656, 3], [1657, 0], [1657, 1], [1657, 2], [1657, 3], [1658, 0], [1658, 1], [1658, 2], [1658, 3], [1659, 0], [1659, 1], [1659, 2], [1659, 3], [1660, 0], [1660, 1], [1660, 2], [1660, 3], [1661, 0], [1661, 1], [1661, 2], [1661, 3], [1662, 0], [1662, 1], [1662, 2], [1662, 3], [1663, 0], [1663, 1], [1663, 2], [1663, 3], [1664, 0], [1664, 1], [1664, 2], [1664, 3], [1665, 0], [1665, 1], [1665, 2], [1665, 3], [1666, 0], [1666, 1], [1666, 2], [1666, 3], [1667, 0], [1667, 1], [1667, 2], [1667, 3], [1668, 0], [1668, 1], [1668, 2], [1668, 3], [1669, 0], [1669, 1], [1669, 2], [1669, 3], [1670, 0], [1670, 1], [1670, 2], [1670, 3], [1671, 0], [1671, 1], [1671, 2], [1671, 3], [1672, 0], [1672, 1], [1672, 2], [1672, 3], [1673, 0], [1673, 1], [1673, 2], [1673, 3], [1674, 0], [1674, 1], [1674, 2], [1674, 3], [1675, 0], [1675, 1], [1675, 2], [1675, 3], [1676, 0], [1676, 1], [1676, 2], [1676, 3], [1677, 0], [1677, 1], [1677, 2], [1677, 3], [1678, 0], [1678, 1], [1678, 2], [1678, 3], [1679, 0], [1679, 1], [1679, 2], [1679, 3], [1680, 0], [1680, 1], [1680, 2], [1680, 3], [1681, 0], [1681, 1], [1681, 2], [1681, 3], [1682, 0], [1682, 1], [1682, 2], [1682, 3], [1683, 0], [1683, 1], [1683, 2], [1683, 3], [1684, 0], [1684, 1], [1684, 2], [1684, 3], [1685, 0], [1685, 1], [1685, 2], [1685, 3], [1686, 0], [1686, 1], [1686, 2], [1686, 3], [1687, 0], [1687, 1], [1687, 2], [1687, 3], [1688, 0], [1688, 1], [1688, 2], [1688, 3], [1689, 0], [1689, 1], [1689, 2], [1689, 3], [1690, 0], [1690, 1], [1690, 2], [1690, 3], [1691, 0], [1691, 1], [1691, 2], [1691, 3], [1692, 0], [1692, 1], [1692, 2], [1692, 3], [1693, 0], [1693, 1], [1693, 2], [1693, 3], [1694, 0], [1694, 1], [1694, 2], [1694, 3], [1695, 0], [1695, 1], [1695, 2], [1695, 3], [1696, 0], [1696, 1], [1696, 2], [1696, 3], [1697, 0], [1697, 1], [1697, 2], [1697, 3], [1698, 0], [1698, 1], [1698, 2], [1698, 3], [1699, 0], [1699, 1], [1699, 2], [1699, 3], [1700, 0], [1700, 1], [1700, 2], [1700, 3], [1701, 0], [1701, 1], [1701, 2], [1701, 3], [1702, 0], [1702, 1], [1702, 2], [1702, 3], [1703, 0], [1703, 1], [1703, 2], [1703, 3], [1704, 0], [1704, 1], [1704, 2], [1704, 3], [1705, 0], [1705, 1], [1705, 2], [1705, 3], [1706, 0], [1706, 1], [1706, 2], [1706, 3], [1707, 0], [1707, 1], [1707, 2], [1707, 3], [1708, 0], [1708, 1], [1708, 2], [1708, 3], [1709, 0], [1709, 1], [1709, 2], [1709, 3], [1710, 0], [1710, 1], [1710, 2], [1710, 3], [1711, 0], [1711, 1], [1711, 2], [1711, 3], [1712, 0], [1712, 1], [1712, 2], [1712, 3], [1713, 0], [1713, 1], [1713, 2], [1713, 3], [1714, 0], [1714, 1], [1714, 2], [1714, 3], [1715, 0], [1715, 1], [1715, 2], [1715, 3], [1716, 0], [1716, 1], [1716, 2], [1716, 3], [1717, 0], [1717, 1], [1717, 2], [1717, 3], [1718, 0], [1718, 1], [1718, 2], [1718, 3], [1719, 0], [1719, 1], [1719, 2], [1719, 3], [1720, 0], [1720, 1], [1720, 2], [1720, 3], [1721, 0], [1721, 1], [1721, 2], [1721, 3], [1722, 0], [1722, 1], [1722, 2], [1722, 3], [1723, 0], [1723, 1], [1723, 2], [1723, 3], [1724, 0], [1724, 1], [1724, 2], [1724, 3], [1725, 0], [1725, 1], [1725, 2], [1725, 3], [1726, 0], [1726, 1], [1726, 2], [1726, 3], [1727, 0], [1727, 1], [1727, 2], [1727, 3], [1728, 0], [1728, 1], [1728, 2], [1728, 3], [1729, 0], [1729, 1], [1729, 2], [1729, 3], [1730, 0], [1730, 1], [1730, 2], [1730, 3], [1731, 0], [1731, 1], [1731, 2], [1731, 3], [1732, 0], [1732, 1], [1732, 2], [1732, 3], [1733, 0], [1733, 1], [1733, 2], [1733, 3], [1734, 0], [1734, 1], [1734, 2], [1734, 3], [1735, 0], [1735, 1], [1735, 2], [1735, 3], [1736, 0], [1736, 1], [1736, 2], [1736, 3], [1737, 0], [1737, 1], [1737, 2], [1737, 3], [1738, 0], [1738, 1], [1738, 2], [1738, 3], [1739, 0], [1739, 1], [1739, 2], [1739, 3], [1740, 0], [1740, 1], [1740, 2], [1740, 3], [1741, 0], [1741, 1], [1741, 2], [1741, 3], [1742, 0], [1742, 1], [1742, 2], [1742, 3], [1743, 0], [1743, 1], [1743, 2], [1743, 3], [1744, 0], [1744, 1], [1744, 2], [1744, 3], [1745, 0], [1745, 1], [1745, 2], [1745, 3], [1746, 0], [1746, 1], [1746, 2], [1746, 3], [1747, 0], [1747, 1], [1747, 2], [1747, 3], [1748, 0], [1748, 1], [1748, 2], [1748, 3], [1749, 0], [1749, 1], [1749, 2], [1749, 3], [1750, 0], [1750, 1], [1750, 2], [1750, 3], [1751, 0], [1751, 1], [1751, 2], [1751, 3], [1752, 0], [1752, 1], [1752, 2], [1752, 3], [1753, 0], [1753, 1], [1753, 2], [1753, 3], [1754, 0], [1754, 1], [1754, 2], [1754, 3], [1755, 0], [1755, 1], [1755, 2], [1755, 3], [1756, 0], [1756, 1], [1756, 2], [1756, 3], [1757, 0], [1757, 1], [1757, 2], [1757, 3], [1758, 0], [1758, 1], [1758, 2], [1758, 3], [1759, 0], [1759, 1], [1759, 2], [1759, 3], [1760, 0], [1760, 1], [1760, 2], [1760, 3], [1761, 0], [1761, 1], [1761, 2], [1761, 3], [1762, 0], [1762, 1], [1762, 2], [1762, 3], [1763, 0], [1763, 1], [1763, 2], [1763, 3], [1764, 0], [1764, 1], [1764, 2], [1764, 3], [1765, 0], [1765, 1], [1765, 2], [1765, 3], [1766, 0], [1766, 1], [1766, 2], [1766, 3], [1767, 0], [1767, 1], [1767, 2], [1767, 3], [1768, 0], [1768, 1], [1768, 2], [1768, 3], [1769, 0], [1769, 1], [1769, 2], [1769, 3], [1770, 0], [1770, 1], [1770, 2], [1770, 3], [1771, 0], [1771, 1], [1771, 2], [1771, 3], [1772, 0], [1772, 1], [1772, 2], [1772, 3], [1773, 0], [1773, 1], [1773, 2], [1773, 3], [1774, 0], [1774, 1], [1774, 2], [1774, 3], [1775, 0], [1775, 1], [1775, 2], [1775, 3], [1776, 0], [1776, 1], [1776, 2], [1776, 3], [1777, 0], [1777, 1], [1777, 2], [1777, 3], [1778, 0], [1778, 1], [1778, 2], [1778, 3], [1779, 0], [1779, 1], [1779, 2], [1779, 3], [1780, 0], [1780, 1], [1780, 2], [1780, 3], [1781, 0], [1781, 1], [1781, 2], [1781, 3], [1782, 0], [1782, 1], [1782, 2], [1782, 3], [1783, 0], [1783, 1], [1783, 2], [1783, 3], [1784, 0], [1784, 1], [1784, 2], [1784, 3], [1785, 0], [1785, 1], [1785, 2], [1785, 3], [1786, 0], [1786, 1], [1786, 2], [1786, 3], [1787, 0], [1787, 1], [1787, 2], [1787, 3], [1788, 0], [1788, 1], [1788, 2], [1788, 3], [1789, 0], [1789, 1], [1789, 2], [1789, 3], [1790, 0], [1790, 1], [1790, 2], [1790, 3], [1791, 0], [1791, 1], [1791, 2], [1791, 3], [1792, 0], [1792, 1], [1792, 2], [1792, 3], [1793, 0], [1793, 1], [1793, 2], [1793, 3], [1794, 0], [1794, 1], [1794, 2], [1794, 3], [1795, 0], [1795, 1], [1795, 2], [1795, 3], [1796, 0], [1796, 1], [1796, 2], [1796, 3], [1797, 0], [1797, 1], [1797, 2], [1797, 3], [1798, 0], [1798, 1], [1798, 2], [1798, 3], [1799, 0], [1799, 1], [1799, 2], [1799, 3], [1800, 0], [1800, 1], [1800, 2], [1800, 3], [1801, 0], [1801, 1], [1801, 2], [1801, 3], [1802, 0], [1802, 1], [1802, 2], [1802, 3], [1803, 0], [1803, 1], [1803, 2], [1803, 3], [1804, 0], [1804, 1], [1804, 2], [1804, 3], [1805, 0], [1805, 1], [1805, 2], [1805, 3], [1806, 0], [1806, 1], [1806, 2], [1806, 3], [1807, 0], [1807, 1], [1807, 2], [1807, 3], [1808, 0], [1808, 1], [1808, 2], [1808, 3], [1809, 0], [1809, 1], [1809, 2], [1809, 3], [1810, 0], [1810, 1], [1810, 2], [1810, 3], [1811, 0], [1811, 1], [1811, 2], [1811, 3], [1812, 0], [1812, 1], [1812, 2], [1812, 3], [1813, 0], [1813, 1], [1813, 2], [1813, 3], [1814, 0], [1814, 1], [1814, 2], [1814, 3], [1815, 0], [1815, 1], [1815, 2], [1815, 3], [1816, 0], [1816, 1], [1816, 2], [1816, 3], [1817, 0], [1817, 1], [1817, 2], [1817, 3], [1818, 0], [1818, 1], [1818, 2], [1818, 3], [1819, 0], [1819, 1], [1819, 2], [1819, 3], [1820, 0], [1820, 1], [1820, 2], [1820, 3], [1821, 0], [1821, 1], [1821, 2], [1821, 3], [1822, 0], [1822, 1], [1822, 2], [1822, 3], [1823, 0], [1823, 1], [1823, 2], [1823, 3], [1824, 0], [1824, 1], [1824, 2], [1824, 3], [1825, 0], [1825, 1], [1825, 2], [1825, 3], [1826, 0], [1826, 1], [1826, 2], [1826, 3], [1827, 0], [1827, 1], [1827, 2], [1827, 3], [1828, 0], [1828, 1], [1828, 2], [1828, 3], [1829, 0], [1829, 1], [1829, 2], [1829, 3], [1830, 0], [1830, 1], [1830, 2], [1830, 3], [1831, 0], [1831, 1], [1831, 2], [1831, 3], [1832, 0], [1832, 1], [1832, 2], [1832, 3], [1833, 0], [1833, 1], [1833, 2], [1833, 3], [1834, 0], [1834, 1], [1834, 2], [1834, 3], [1835, 0], [1835, 1], [1835, 2], [1835, 3], [1836, 0], [1836, 1], [1836, 2], [1836, 3], [1837, 0], [1837, 1], [1837, 2], [1837, 3], [1838, 0], [1838, 1], [1838, 2], [1838, 3], [1839, 0], [1839, 1], [1839, 2], [1839, 3], [1840, 0], [1840, 1], [1840, 2], [1840, 3], [1841, 0], [1841, 1], [1841, 2], [1841, 3], [1842, 0], [1842, 1], [1842, 2], [1842, 3], [1843, 0], [1843, 1], [1843, 2], [1843, 3], [1844, 0], [1844, 1], [1844, 2], [1844, 3], [1845, 0], [1845, 1], [1845, 2], [1845, 3], [1846, 0], [1846, 1], [1846, 2], [1846, 3], [1847, 0], [1847, 1], [1847, 2], [1847, 3], [1848, 0], [1848, 1], [1848, 2], [1848, 3], [1849, 0], [1849, 1], [1849, 2], [1849, 3], [1850, 0], [1850, 1], [1850, 2], [1850, 3], [1851, 0], [1851, 1], [1851, 2], [1851, 3], [1852, 0], [1852, 1], [1852, 2], [1852, 3], [1853, 0], [1853, 1], [1853, 2], [1853, 3], [1854, 0], [1854, 1], [1854, 2], [1854, 3], [1855, 0], [1855, 1], [1855, 2], [1855, 3], [1856, 0], [1856, 1], [1856, 2], [1856, 3], [1857, 0], [1857, 1], [1857, 2], [1857, 3], [1858, 0], [1858, 1], [1858, 2], [1858, 3], [1859, 0], [1859, 1], [1859, 2], [1859, 3], [1860, 0], [1860, 1], [1860, 2], [1860, 3], [1861, 0], [1861, 1], [1861, 2], [1861, 3], [1862, 0], [1862, 1], [1862, 2], [1862, 3], [1863, 0], [1863, 1], [1863, 2], [1863, 3], [1864, 0], [1864, 1], [1864, 2], [1864, 3], [1865, 0], [1865, 1], [1865, 2], [1865, 3], [1866, 0], [1866, 1], [1866, 2], [1866, 3], [1867, 0], [1867, 1], [1867, 2], [1867, 3], [1868, 0], [1868, 1], [1868, 2], [1868, 3], [1869, 0], [1869, 1], [1869, 2], [1869, 3], [1870, 0], [1870, 1], [1870, 2], [1870, 3], [1871, 0], [1871, 1], [1871, 2], [1871, 3], [1872, 0], [1872, 1], [1872, 2], [1872, 3], [1873, 0], [1873, 1], [1873, 2], [1873, 3], [1874, 0], [1874, 1], [1874, 2], [1874, 3], [1875, 0], [1875, 1], [1875, 2], [1875, 3], [1876, 0], [1876, 1], [1876, 2], [1876, 3], [1877, 0], [1877, 1], [1877, 2], [1877, 3], [1878, 0], [1878, 1], [1878, 2], [1878, 3], [1879, 0], [1879, 1], [1879, 2], [1879, 3], [1880, 0], [1880, 1], [1880, 2], [1880, 3], [1881, 0], [1881, 1], [1881, 2], [1881, 3], [1882, 0], [1882, 1], [1882, 2], [1882, 3], [1883, 0], [1883, 1], [1883, 2], [1883, 3], [1884, 0], [1884, 1], [1884, 2], [1884, 3], [1885, 0], [1885, 1], [1885, 2], [1885, 3], [1886, 0], [1886, 1], [1886, 2], [1886, 3], [1887, 0], [1887, 1], [1887, 2], [1887, 3], [1888, 0], [1888, 1], [1888, 2], [1888, 3], [1889, 0], [1889, 1], [1889, 2], [1889, 3], [1890, 0], [1890, 1], [1890, 2], [1890, 3], [1891, 0], [1891, 1], [1891, 2], [1891, 3], [1892, 0], [1892, 1], [1892, 2], [1892, 3], [1893, 0], [1893, 1], [1893, 2], [1893, 3], [1894, 0], [1894, 1], [1894, 2], [1894, 3], [1895, 0], [1895, 1], [1895, 2], [1895, 3], [1896, 0], [1896, 1], [1896, 2], [1896, 3], [1897, 0], [1897, 1], [1897, 2], [1897, 3], [1898, 0], [1898, 1], [1898, 2], [1898, 3], [1899, 0], [1899, 1], [1899, 2], [1899, 3], [1900, 0], [1900, 1], [1900, 2], [1900, 3], [1901, 0], [1901, 1], [1901, 2], [1901, 3], [1902, 0], [1902, 1], [1902, 2], [1902, 3], [1903, 0], [1903, 1], [1903, 2], [1903, 3], [1904, 0], [1904, 1], [1904, 2], [1904, 3], [1905, 0], [1905, 1], [1905, 2], [1905, 3], [1906, 0], [1906, 1], [1906, 2], [1906, 3], [1907, 0], [1907, 1], [1907, 2], [1907, 3], [1908, 0], [1908, 1], [1908, 2], [1908, 3], [1909, 0], [1909, 1], [1909, 2], [1909, 3], [1910, 0], [1910, 1], [1910, 2], [1910, 3], [1911, 0], [1911, 1], [1911, 2], [1911, 3], [1912, 0], [1912, 1], [1912, 2], [1912, 3], [1913, 0], [1913, 1], [1913, 2], [1913, 3], [1914, 0], [1914, 1], [1914, 2], [1914, 3], [1915, 0], [1915, 1], [1915, 2], [1915, 3], [1916, 0], [1916, 1], [1916, 2], [1916, 3], [1917, 0], [1917, 1], [1917, 2], [1917, 3], [1918, 0], [1918, 1], [1918, 2], [1918, 3], [1919, 0], [1919, 1], [1919, 2], [1919, 3], [1920, 0], [1920, 1], [1920, 2], [1920, 3], [1921, 0], [1921, 1], [1921, 2], [1921, 3], [1922, 0], [1922, 1], [1922, 2], [1922, 3], [1923, 0], [1923, 1], [1923, 2], [1923, 3], [1924, 0], [1924, 1], [1924, 2], [1924, 3], [1925, 0], [1925, 1], [1925, 2], [1925, 3], [1926, 0], [1926, 1], [1926, 2], [1926, 3], [1927, 0], [1927, 1], [1927, 2], [1927, 3], [1928, 0], [1928, 1], [1928, 2], [1928, 3], [1929, 0], [1929, 1], [1929, 2], [1929, 3], [1930, 0], [1930, 1], [1930, 2], [1930, 3], [1931, 0], [1931, 1], [1931, 2], [1931, 3], [1932, 0], [1932, 1], [1932, 2], [1932, 3], [1933, 0], [1933, 1], [1933, 2], [1933, 3], [1934, 0], [1934, 1], [1934, 2], [1934, 3], [1935, 0], [1935, 1], [1935, 2], [1935, 3], [1936, 0], [1936, 1], [1936, 2], [1936, 3], [1937, 0], [1937, 1], [1937, 2], [1937, 3], [1938, 0], [1938, 1], [1938, 2], [1938, 3], [1939, 0], [1939, 1], [1939, 2], [1939, 3], [1940, 0], [1940, 1], [1940, 2], [1940, 3], [1941, 0], [1941, 1], [1941, 2], [1941, 3], [1942, 0], [1942, 1], [1942, 2], [1942, 3], [1943, 0], [1943, 1], [1943, 2], [1943, 3], [1944, 0], [1944, 1], [1944, 2], [1944, 3], [1945, 0], [1945, 1], [1945, 2], [1945, 3], [1946, 0], [1946, 1], [1946, 2], [1946, 3], [1947, 0], [1947, 1], [1947, 2], [1947, 3], [1948, 0], [1948, 1], [1948, 2], [1948, 3], [1949, 0], [1949, 1], [1949, 2], [1949, 3], [1950, 0], [1950, 1], [1950, 2], [1950, 3], [1951, 0], [1951, 1], [1951, 2], [1951, 3], [1952, 0], [1952, 1], [1952, 2], [1952, 3], [1953, 0], [1953, 1], [1953, 2], [1953, 3], [1954, 0], [1954, 1], [1954, 2], [1954, 3], [1955, 0], [1955, 1], [1955, 2], [1955, 3], [1956, 0], [1956, 1], [1956, 2], [1956, 3], [1957, 0], [1957, 1], [1957, 2], [1957, 3], [1958, 0], [1958, 1], [1958, 2], [1958, 3], [1959, 0], [1959, 1], [1959, 2], [1959, 3], [1960, 0], [1960, 1], [1960, 2], [1960, 3], [1961, 0], [1961, 1], [1961, 2], [1961, 3], [1962, 0], [1962, 1], [1962, 2], [1962, 3], [1963, 0], [1963, 1], [1963, 2], [1963, 3], [1964, 0], [1964, 1], [1964, 2], [1964, 3], [1965, 0], [1965, 1], [1965, 2], [1965, 3], [1966, 0], [1966, 1], [1966, 2], [1966, 3], [1967, 0], [1967, 1], [1967, 2], [1967, 3], [1968, 0], [1968, 1], [1968, 2], [1968, 3], [1969, 0], [1969, 1], [1969, 2], [1969, 3], [1970, 0], [1970, 1], [1970, 2], [1970, 3], [1971, 0], [1971, 1], [1971, 2], [1971, 3], [1972, 0], [1972, 1], [1972, 2], [1972, 3], [1973, 0], [1973, 1], [1973, 2], [1973, 3], [1974, 0], [1974, 1], [1974, 2], [1974, 3], [1975, 0], [1975, 1], [1975, 2], [1975, 3], [1976, 0], [1976, 1], [1976, 2], [1976, 3], [1977, 0], [1977, 1], [1977, 2], [1977, 3], [1978, 0], [1978, 1], [1978, 2], [1978, 3], [1979, 0], [1979, 1], [1979, 2], [1979, 3], [1980, 0], [1980, 1], [1980, 2], [1980, 3], [1981, 0], [1981, 1], [1981, 2], [1981, 3], [1982, 0], [1982, 1], [1982, 2], [1982, 3], [1983, 0], [1983, 1], [1983, 2], [1983, 3], [1984, 0], [1984, 1], [1984, 2], [1984, 3], [1985, 0], [1985, 1], [1985, 2], [1985, 3], [1986, 0], [1986, 1], [1986, 2], [1986, 3], [1987, 0], [1987, 1], [1987, 2], [1987, 3], [1988, 0], [1988, 1], [1988, 2], [1988, 3], [1989, 0], [1989, 1], [1989, 2], [1989, 3], [1990, 0], [1990, 1], [1990, 2], [1990, 3], [1991, 0], [1991, 1], [1991, 2], [1991, 3], [1992, 0], [1992, 1], [1992, 2], [1992, 3], [1993, 0], [1993, 1], [1993, 2], [1993, 3], [1994, 0], [1994, 1], [1994, 2], [1994, 3], [1995, 0], [1995, 1], [1995, 2], [1995, 3], [1996, 0], [1996, 1], [1996, 2], [1996, 3], [1997, 0], [1997, 1], [1997, 2], [1997, 3], [1998, 0], [1998, 1], [1998, 2], [1998, 3], [1999, 0], [1999, 1], [1999, 2], [1999, 3], [2000, 0], [2000, 1], [2000, 2], [2000, 3], [2001, 0], [2001, 1], [2001, 2], [2001, 3], [2002, 0], [2002, 1], [2002, 2], [2002, 3], [2003, 0], [2003, 1], [2003, 2], [2003, 3], [2004, 0], [2004, 1], [2004, 2], [2004, 3], [2005, 0], [2005, 1], [2005, 2], [2005, 3], [2006, 0], [2006, 1], [2006, 2], [2006, 3], [2007, 0], [2007, 1], [2007, 2], [2007, 3], [2008, 0], [2008, 1], [2008, 2], [2008, 3], [2009, 0], [2009, 1], [2009, 2], [2009, 3], [2010, 0], [2010, 1], [2010, 2], [2010, 3], [2011, 0], [2011, 1], [2011, 2], [2011, 3], [2012, 0], [2012, 1], [2012, 2], [2012, 3], [2013, 0], [2013, 1], [2013, 2], [2013, 3], [2014, 0], [2014, 1], [2014, 2], [2014, 3], [2015, 0], [2015, 1], [2015, 2], [2015, 3], [2016, 0], [2016, 1], [2016, 2], [2016, 3], [2017, 0], [2017, 1], [2017, 2], [2017, 3], [2018, 0], [2018, 1], [2018, 2], [2018, 3], [2019, 0], [2019, 1], [2019, 2], [2019, 3], [2020, 0], [2020, 1], [2020, 2], [2020, 3], [2021, 0], [2021, 1], [2021, 2], [2021, 3], [2022, 0], [2022, 1], [2022, 2], [2022, 3], [2023, 0], [2023, 1], [2023, 2], [2023, 3], [2024, 0], [2024, 1], [2024, 2], [2024, 3], [2025, 0], [2025, 1], [2025, 2], [2025, 3], [2026, 0], [2026, 1], [2026, 2], [2026, 3], [2027, 0], [2027, 1], [2027, 2], [2027, 3], [2028, 0], [2028, 1], [2028, 2], [2028, 3], [2029, 0], [2029, 1], [2029, 2], [2029, 3], [2030, 0], [2030, 1], [2030, 2], [2030, 3], [2031, 0], [2031, 1], [2031, 2], [2031, 3], [2032, 0], [2032, 1], [2032, 2], [2032, 3], [2033, 0], [2033, 1], [2033, 2], [2033, 3], [2034, 0], [2034, 1], [2034, 2], [2034, 3], [2035, 0], [2035, 1], [2035, 2], [2035, 3], [2036, 0], [2036, 1], [2036, 2], [2036, 3], [2037, 0], [2037, 1], [2037, 2], [2037, 3], [2038, 0], [2038, 1], [2038, 2], [2038, 3], [2039, 0], [2039, 1], [2039, 2], [2039, 3], [2040, 0], [2040, 1], [2040, 2], [2040, 3], [2041, 0], [2041, 1], [2041, 2], [2041, 3], [2042, 0], [2042, 1], [2042, 2], [2042, 3], [2043, 0], [2043, 1], [2043, 2], [2043, 3], [2044, 0], [2044, 1], [2044, 2], [2044, 3], [2045, 0], [2045, 1], [2045, 2], [2045, 3], [2046, 0], [2046, 1], [2046, 2], [2046, 3], [2047, 0], [2047, 1], [2047, 2], [2047, 3], [416940273, 0], [416940273, 1], [416940273, 2], [416940273, 3], [416940529, 0], [416940529, 1], [416940529, 2], [416940529, 3], [416940785, 0], [416940785, 1], [416940785, 2], [416940785, 3], [416941041, 0], [416941041, 1], [416941041, 2], [416941041, 3], [416941297, 0], [416941297, 1], [416941297, 2], [416941297, 3], [416941553, 0], [416941553, 1], [416941553, 2], [416941553, 3], [416941809, 0], [416941809, 1], [416941809, 2], [416941809, 3], [416942065, 0], [416942065, 1], [416942065, 2], [416942065, 3], [416942321, 0], [416942321, 1], [416942321, 2], [416942321, 3], [416942577, 0], [416942577, 1], [416942577, 2], [416942577, 3], [416942833, 0], [416942833, 1], [416942833, 2], [416942833, 3], [416943089, 0], [416943089, 1], [416943089, 2], [416943089, 3], [416943345, 0], [416943345, 1], [416943345, 2], [416943345, 3], [416943601, 0], [416943601, 1], [416943601, 2], [416943601, 3], [416943857, 0], [416943857, 1], [416943857, 2], [416943857, 3], [416944113, 0], [416944113, 1], [416944113, 2], [416944113, 3], [416944369, 0], [416944369, 1], [416944369, 2], [416944369, 3], [416944625, 0], [416944625, 1], [416944625, 2], [416944625, 3], [416944881, 0], [416944881, 1], [416944881, 2], [416944881, 3], [416945137, 0], [416945137, 1], [416945137, 2], [416945137, 3], [416945393, 0], [416945393, 1], [416945393, 2], [416945393, 3], [416945649, 0], [416945649, 1], [416945649, 2], [416945649, 3], [416945905, 0], [416945905, 1], [416945905, 2], [416945905, 3], [416946161, 0], [416946161, 1], [416946161, 2], [416946161, 3], [416946417, 0], [416946417, 1], [416946417, 2], [416946417, 3], [416946673, 0], [416946673, 1], [416946673, 2], [416946673, 3], [416946929, 0], [416946929, 1], [416946929, 2], [416946929, 3], [416947185, 0], [416947185, 1], [416947185, 2], [416947185, 3], [416947441, 0], [416947441, 1], [416947441, 2], [416947441, 3], [416947697, 0], [416947697, 1], [416947697, 2], [416947697, 3], [416947953, 0], [416947953, 1], [416947953, 2], [416947953, 3], [416948209, 0], [416948209, 1], [416948209, 2], [416948209, 3], [416948465, 0], [416948465, 1], [416948465, 2], [416948465, 3], [416948721, 0], [416948721, 1], [416948721, 2], [416948721, 3], [416948977, 0], [416948977, 1], [416948977, 2], [416948977, 3], [416949233, 0], [416949233, 1], [416949233, 2], [416949233, 3], [416949489, 0], [416949489, 1], [416949489, 2], [416949489, 3], [416949745, 0], [416949745, 1], [416949745, 2], [416949745, 3], [416950001, 0], [416950001, 1], [416950001, 2], [416950001, 3], [416950257, 0], [416950257, 1], [416950257, 2], [416950257, 3], [416950513, 0], [416950513, 1], [416950513, 2], [416950513, 3], [416950769, 0], [416950769, 1], [416950769, 2], [416950769, 3], [416951025, 0], [416951025, 1], [416951025, 2], [416951025, 3], [416951281, 0], [416951281, 1], [416951281, 2], [416951281, 3], [416951537, 0], [416951537, 1], [416951537, 2], [416951537, 3], [416951793, 0], [416951793, 1], [416951793, 2], [416951793, 3], [416952049, 0], [416952049, 1], [416952049, 2], [416952049, 3], [416952305, 0], [416952305, 1], [416952305, 2], [416952305, 3], [416952561, 0], [416952561, 1], [416952561, 2], [416952561, 3], [416952817, 0], [416952817, 1], [416952817, 2], [416952817, 3], [416953073, 0], [416953073, 1], [416953073, 2], [416953073, 3], [416953329, 0], [416953329, 1], [416953329, 2], [416953329, 3], [416953585, 0], [416953585, 1], [416953585, 2], [416953585, 3], [416953841, 0], [416953841, 1], [416953841, 2], [416953841, 3], [416954097, 0], [416954097, 1], [416954097, 2], [416954097, 3], [416954353, 0], [416954353, 1], [416954353, 2], [416954353, 3], [416954609, 0], [416954609, 1], [416954609, 2], [416954609, 3], [416954865, 0], [416954865, 1], [416954865, 2], [416954865, 3], [416955121, 0], [416955121, 1], [416955121, 2], [416955121, 3], [416955377, 0], [416955377, 1], [416955377, 2], [416955377, 3], [416955633, 0], [416955633, 1], [416955633, 2], [416955633, 3], [416955889, 0], [416955889, 1], [416955889, 2], [416955889, 3], [416956145, 0], [416956145, 1], [416956145, 2], [416956145, 3], [416956401, 0], [416956401, 1], [416956401, 2], [416956401, 3], [416956657, 0], [416956657, 1], [416956657, 2], [416956657, 3], [416956913, 0], [416956913, 1], [416956913, 2], [416956913, 3], [416957169, 0], [416957169, 1], [416957169, 2], [416957169, 3], [416957425, 0], [416957425, 1], [416957425, 2], [416957425, 3], [416957681, 0], [416957681, 1], [416957681, 2], [416957681, 3], [416957937, 0], [416957937, 1], [416957937, 2], [416957937, 3], [416958193, 0], [416958193, 1], [416958193, 2], [416958193, 3], [416958449, 0], [416958449, 1], [416958449, 2], [416958449, 3], [416958705, 0], [416958705, 1], [416958705, 2], [416958705, 3], [416958961, 0], [416958961, 1], [416958961, 2], [416958961, 3], [416959217, 0], [416959217, 1], [416959217, 2], [416959217, 3], [416959473, 0], [416959473, 1], [416959473, 2], [416959473, 3], [416959729, 0], [416959729, 1], [416959729, 2], [416959729, 3], [416959985, 0], [416959985, 1], [416959985, 2], [416959985, 3], [416960241, 0], [416960241, 1], [416960241, 2], [416960241, 3], [416960497, 0], [416960497, 1], [416960497, 2], [416960497, 3], [416960753, 0], [416960753, 1], [416960753, 2], [416960753, 3], [416961009, 0], [416961009, 1], [416961009, 2], [416961009, 3], [416961265, 0], [416961265, 1], [416961265, 2], [416961265, 3], [416961521, 0], [416961521, 1], [416961521, 2], [416961521, 3], [416961777, 0], [416961777, 1], [416961777, 2], [416961777, 3], [416962033, 0], [416962033, 1], [416962033, 2], [416962033, 3], [416962289, 0], [416962289, 1], [416962289, 2], [416962289, 3], [416962545, 0], [416962545, 1], [416962545, 2], [416962545, 3], [416962801, 0], [416962801, 1], [416962801, 2], [416962801, 3], [416963057, 0], [416963057, 1], [416963057, 2], [416963057, 3], [416963313, 0], [416963313, 1], [416963313, 2], [416963313, 3], [416963569, 0], [416963569, 1], [416963569, 2], [416963569, 3], [416963825, 0], [416963825, 1], [416963825, 2], [416963825, 3], [416964081, 0], [416964081, 1], [416964081, 2], [416964081, 3], [416964337, 0], [416964337, 1], [416964337, 2], [416964337, 3], [416964593, 0], [416964593, 1], [416964593, 2], [416964593, 3], [416964849, 0], [416964849, 1], [416964849, 2], [416964849, 3], [416965105, 0], [416965105, 1], [416965105, 2], [416965105, 3], [416965361, 0], [416965361, 1], [416965361, 2], [416965361, 3], [416965617, 0], [416965617, 1], [416965617, 2], [416965617, 3], [416965873, 0], [416965873, 1], [416965873, 2], [416965873, 3], [416966129, 0], [416966129, 1], [416966129, 2], [416966129, 3], [416966385, 0], [416966385, 1], [416966385, 2], [416966385, 3], [416966641, 0], [416966641, 1], [416966641, 2], [416966641, 3], [416966897, 0], [416966897, 1], [416966897, 2], [416966897, 3], [416967153, 0], [416967153, 1], [416967153, 2], [416967153, 3], [416967409, 0], [416967409, 1], [416967409, 2], [416967409, 3], [416967665, 0], [416967665, 1], [416967665, 2], [416967665, 3], [416967921, 0], [416967921, 1], [416967921, 2], [416967921, 3], [416968177, 0], [416968177, 1], [416968177, 2], [416968177, 3], [416968433, 0], [416968433, 1], [416968433, 2], [416968433, 3], [416968689, 0], [416968689, 1], [416968689, 2], [416968689, 3], [416968945, 0], [416968945, 1], [416968945, 2], [416968945, 3], [416969201, 0], [416969201, 1], [416969201, 2], [416969201, 3], [416969457, 0], [416969457, 1], [416969457, 2], [416969457, 3], [416969713, 0], [416969713, 1], [416969713, 2], [416969713, 3], [416969969, 0], [416969969, 1], [416969969, 2], [416969969, 3], [416970225, 0], [416970225, 1], [416970225, 2], [416970225, 3], [416970481, 0], [416970481, 1], [416970481, 2], [416970481, 3], [416970737, 0], [416970737, 1], [416970737, 2], [416970737, 3], [416970993, 0], [416970993, 1], [416970993, 2], [416970993, 3], [416971249, 0], [416971249, 1], [416971249, 2], [416971249, 3], [416971505, 0], [416971505, 1], [416971505, 2], [416971505, 3], [416971761, 0], [416971761, 1], [416971761, 2], [416971761, 3], [416972017, 0], [416972017, 1], [416972017, 2], [416972017, 3], [416972273, 0], [416972273, 1], [416972273, 2], [416972273, 3], [416972529, 0], [416972529, 1], [416972529, 2], [416972529, 3], [416972785, 0], [416972785, 1], [416972785, 2], [416972785, 3], [416973041, 0], [416973041, 1], [416973041, 2], [416973041, 3], [416973297, 0], [416973297, 1], [416973297, 2], [416973297, 3], [416973553, 0], [416973553, 1], [416973553, 2], [416973553, 3], [416973809, 0], [416973809, 1], [416973809, 2], [416973809, 3], [416974065, 0], [416974065, 1], [416974065, 2], [416974065, 3], [416974321, 0], [416974321, 1], [416974321, 2], [416974321, 3], [416974577, 0], [416974577, 1], [416974577, 2], [416974577, 3], [416974833, 0], [416974833, 1], [416974833, 2], [416974833, 3], [416975089, 0], [416975089, 1], [416975089, 2], [416975089, 3], [416975345, 0], [416975345, 1], [416975345, 2], [416975345, 3], [416975601, 0], [416975601, 1], [416975601, 2], [416975601, 3], [416975857, 0], [416975857, 1], [416975857, 2], [416975857, 3], [416976113, 0], [416976113, 1], [416976113, 2], [416976113, 3], [416976369, 0], [416976369, 1], [416976369, 2], [416976369, 3], [416976625, 0], [416976625, 1], [416976625, 2], [416976625, 3], [416976881, 0], [416976881, 1], [416976881, 2], [416976881, 3], [416977137, 0], [416977137, 1], [416977137, 2], [416977137, 3], [416977393, 0], [416977393, 1], [416977393, 2], [416977393, 3], [416977649, 0], [416977649, 1], [416977649, 2], [416977649, 3], [416977905, 0], [416977905, 1], [416977905, 2], [416977905, 3], [416978161, 0], [416978161, 1], [416978161, 2], [416978161, 3], [416978417, 0], [416978417, 1], [416978417, 2], [416978417, 3], [416978673, 0], [416978673, 1], [416978673, 2], [416978673, 3], [416978929, 0], [416978929, 1], [416978929, 2], [416978929, 3], [416979185, 0], [416979185, 1], [416979185, 2], [416979185, 3], [416979441, 0], [416979441, 1], [416979441, 2], [416979441, 3], [416979697, 0], [416979697, 1], [416979697, 2], [416979697, 3], [416979953, 0], [416979953, 1], [416979953, 2], [416979953, 3], [416980209, 0], [416980209, 1], [416980209, 2], [416980209, 3], [416980465, 0], [416980465, 1], [416980465, 2], [416980465, 3], [416980721, 0], [416980721, 1], [416980721, 2], [416980721, 3], [416980977, 0], [416980977, 1], [416980977, 2], [416980977, 3], [416981233, 0], [416981233, 1], [416981233, 2], [416981233, 3], [416981489, 0], [416981489, 1], [416981489, 2], [416981489, 3], [416981745, 0], [416981745, 1], [416981745, 2], [416981745, 3], [416982001, 0], [416982001, 1], [416982001, 2], [416982001, 3], [416982257, 0], [416982257, 1], [416982257, 2], [416982257, 3], [416982513, 0], [416982513, 1], [416982513, 2], [416982513, 3], [416982769, 0], [416982769, 1], [416982769, 2], [416982769, 3], [416983025, 0], [416983025, 1], [416983025, 2], [416983025, 3], [416983281, 0], [416983281, 1], [416983281, 2], [416983281, 3], [416983537, 0], [416983537, 1], [416983537, 2], [416983537, 3], [416983793, 0], [416983793, 1], [416983793, 2], [416983793, 3], [416984049, 0], [416984049, 1], [416984049, 2], [416984049, 3], [416984305, 0], [416984305, 1], [416984305, 2], [416984305, 3], [416984561, 0], [416984561, 1], [416984561, 2], [416984561, 3], [416984817, 0], [416984817, 1], [416984817, 2], [416984817, 3], [416985073, 0], [416985073, 1], [416985073, 2], [416985073, 3], [416985329, 0], [416985329, 1], [416985329, 2], [416985329, 3], [416985585, 0], [416985585, 1], [416985585, 2], [416985585, 3], [416985841, 0], [416985841, 1], [416985841, 2], [416985841, 3], [416986097, 0], [416986097, 1], [416986097, 2], [416986097, 3], [416986353, 0], [416986353, 1], [416986353, 2], [416986353, 3], [416986609, 0], [416986609, 1], [416986609, 2], [416986609, 3], [416986865, 0], [416986865, 1], [416986865, 2], [416986865, 3], [416987121, 0], [416987121, 1], [416987121, 2], [416987121, 3], [416987377, 0], [416987377, 1], [416987377, 2], [416987377, 3], [416987633, 0], [416987633, 1], [416987633, 2], [416987633, 3], [416987889, 0], [416987889, 1], [416987889, 2], [416987889, 3], [416988145, 0], [416988145, 1], [416988145, 2], [416988145, 3], [416988401, 0], [416988401, 1], [416988401, 2], [416988401, 3], [416988657, 0], [416988657, 1], [416988657, 2], [416988657, 3], [416988913, 0], [416988913, 1], [416988913, 2], [416988913, 3], [416989169, 0], [416989169, 1], [416989169, 2], [416989169, 3], [416989425, 0], [416989425, 1], [416989425, 2], [416989425, 3], [416989681, 0], [416989681, 1], [416989681, 2], [416989681, 3], [416989937, 0], [416989937, 1], [416989937, 2], [416989937, 3], [416990193, 0], [416990193, 1], [416990193, 2], [416990193, 3], [416990449, 0], [416990449, 1], [416990449, 2], [416990449, 3], [416990705, 0], [416990705, 1], [416990705, 2], [416990705, 3], [416990961, 0], [416990961, 1], [416990961, 2], [416990961, 3], [416991217, 0], [416991217, 1], [416991217, 2], [416991217, 3], [416991473, 0], [416991473, 1], [416991473, 2], [416991473, 3], [416991729, 0], [416991729, 1], [416991729, 2], [416991729, 3], [416991985, 0], [416991985, 1], [416991985, 2], [416991985, 3], [416992241, 0], [416992241, 1], [416992241, 2], [416992241, 3], [416992497, 0], [416992497, 1], [416992497, 2], [416992497, 3], [416992753, 0], [416992753, 1], [416992753, 2], [416992753, 3], [416993009, 0], [416993009, 1], [416993009, 2], [416993009, 3], [416993265, 0], [416993265, 1], [416993265, 2], [416993265, 3], [416993521, 0], [416993521, 1], [416993521, 2], [416993521, 3], [416993777, 0], [416993777, 1], [416993777, 2], [416993777, 3], [416994033, 0], [416994033, 1], [416994033, 2], [416994033, 3], [416994289, 0], [416994289, 1], [416994289, 2], [416994289, 3], [416994545, 0], [416994545, 1], [416994545, 2], [416994545, 3], [416994801, 0], [416994801, 1], [416994801, 2], [416994801, 3], [416995057, 0], [416995057, 1], [416995057, 2], [416995057, 3], [416995313, 0], [416995313, 1], [416995313, 2], [416995313, 3], [416995569, 0], [416995569, 1], [416995569, 2], [416995569, 3], [416995825, 0], [416995825, 1], [416995825, 2], [416995825, 3], [416996081, 0], [416996081, 1], [416996081, 2], [416996081, 3], [416996337, 0], [416996337, 1], [416996337, 2], [416996337, 3], [416996593, 0], [416996593, 1], [416996593, 2], [416996593, 3], [416996849, 0], [416996849, 1], [416996849, 2], [416996849, 3], [416997105, 0], [416997105, 1], [416997105, 2], [416997105, 3], [416997361, 0], [416997361, 1], [416997361, 2], [416997361, 3], [416997617, 0], [416997617, 1], [416997617, 2], [416997617, 3], [416997873, 0], [416997873, 1], [416997873, 2], [416997873, 3], [416998129, 0], [416998129, 1], [416998129, 2], [416998129, 3], [416998385, 0], [416998385, 1], [416998385, 2], [416998385, 3], [416998641, 0], [416998641, 1], [416998641, 2], [416998641, 3], [416998897, 0], [416998897, 1], [416998897, 2], [416998897, 3], [416999153, 0], [416999153, 1], [416999153, 2], [416999153, 3], [416999409, 0], [416999409, 1], [416999409, 2], [416999409, 3], [416999665, 0], [416999665, 1], [416999665, 2], [416999665, 3], [416999921, 0], [416999921, 1], [416999921, 2], [416999921, 3], [417000177, 0], [417000177, 1], [417000177, 2], [417000177, 3], [417000433, 0], [417000433, 1], [417000433, 2], [417000433, 3], [417000689, 0], [417000689, 1], [417000689, 2], [417000689, 3], [417000945, 0], [417000945, 1], [417000945, 2], [417000945, 3], [417001201, 0], [417001201, 1], [417001201, 2], [417001201, 3], [417001457, 0], [417001457, 1], [417001457, 2], [417001457, 3], [417001713, 0], [417001713, 1], [417001713, 2], [417001713, 3], [417001969, 0], [417001969, 1], [417001969, 2], [417001969, 3], [417002225, 0], [417002225, 1], [417002225, 2], [417002225, 3], [417002481, 0], [417002481, 1], [417002481, 2], [417002481, 3], [417002737, 0], [417002737, 1], [417002737, 2], [417002737, 3], [417002993, 0], [417002993, 1], [417002993, 2], [417002993, 3], [417003249, 0], [417003249, 1], [417003249, 2], [417003249, 3], [417003505, 0], [417003505, 1], [417003505, 2], [417003505, 3], [417003761, 0], [417003761, 1], [417003761, 2], [417003761, 3], [417004017, 0], [417004017, 1], [417004017, 2], [417004017, 3], [417004273, 0], [417004273, 1], [417004273, 2], [417004273, 3], [417004529, 0], [417004529, 1], [417004529, 2], [417004529, 3], [417004785, 0], [417004785, 1], [417004785, 2], [417004785, 3], [417005041, 0], [417005041, 1], [417005041, 2], [417005041, 3], [417005297, 0], [417005297, 1], [417005297, 2], [417005297, 3], [417005553, 0], [417005553, 1], [417005553, 2], [417005553, 3], [417005809, 0], [417005809, 1], [417005809, 2], [417005809, 3], [417006065, 0], [417006065, 1], [417006065, 2], [417006065, 3], [417006321, 0], [417006321, 1], [417006321, 2], [417006321, 3], [417006577, 0], [417006577, 1], [417006577, 2], [417006577, 3], [417006833, 0], [417006833, 1], [417006833, 2], [417006833, 3], [417007089, 0], [417007089, 1], [417007089, 2], [417007089, 3], [417007345, 0], [417007345, 1], [417007345, 2], [417007345, 3], [417007601, 0], [417007601, 1], [417007601, 2], [417007601, 3], [417007857, 0], [417007857, 1], [417007857, 2], [417007857, 3], [417008113, 0], [417008113, 1], [417008113, 2], [417008113, 3], [417008369, 0], [417008369, 1], [417008369, 2], [417008369, 3], [417008625, 0], [417008625, 1], [417008625, 2], [417008625, 3], [417008881, 0], [417008881, 1], [417008881, 2], [417008881, 3], [417009137, 0], [417009137, 1], [417009137, 2], [417009137, 3], [417009393, 0], [417009393, 1], [417009393, 2], [417009393, 3], [417009649, 0], [417009649, 1], [417009649, 2], [417009649, 3], [417009905, 0], [417009905, 1], [417009905, 2], [417009905, 3], [417010161, 0], [417010161, 1], [417010161, 2], [417010161, 3], [417010417, 0], [417010417, 1], [417010417, 2], [417010417, 3], [417010673, 0], [417010673, 1], [417010673, 2], [417010673, 3], [417010929, 0], [417010929, 1], [417010929, 2], [417010929, 3], [417011185, 0], [417011185, 1], [417011185, 2], [417011185, 3], [417011441, 0], [417011441, 1], [417011441, 2], [417011441, 3], [417011697, 0], [417011697, 1], [417011697, 2], [417011697, 3], [417011953, 0], [417011953, 1], [417011953, 2], [417011953, 3], [417012209, 0], [417012209, 1], [417012209, 2], [417012209, 3], [417012465, 0], [417012465, 1], [417012465, 2], [417012465, 3], [417012721, 0], [417012721, 1], [417012721, 2], [417012721, 3], [417012977, 0], [417012977, 1], [417012977, 2], [417012977, 3], [417013233, 0], [417013233, 1], [417013233, 2], [417013233, 3], [417013489, 0], [417013489, 1], [417013489, 2], [417013489, 3], [417013745, 0], [417013745, 1], [417013745, 2], [417013745, 3], [417014001, 0], [417014001, 1], [417014001, 2], [417014001, 3], [417014257, 0], [417014257, 1], [417014257, 2], [417014257, 3], [417014513, 0], [417014513, 1], [417014513, 2], [417014513, 3], [417014769, 0], [417014769, 1], [417014769, 2], [417014769, 3], [417015025, 0], [417015025, 1], [417015025, 2], [417015025, 3], [417015281, 0], [417015281, 1], [417015281, 2], [417015281, 3], [417015537, 0], [417015537, 1], [417015537, 2], [417015537, 3], [417015793, 0], [417015793, 1], [417015793, 2], [417015793, 3], [417016049, 0], [417016049, 1], [417016049, 2], [417016049, 3], [417016305, 0], [417016305, 1], [417016305, 2], [417016305, 3], [417016561, 0], [417016561, 1], [417016561, 2], [417016561, 3], [417016817, 0], [417016817, 1], [417016817, 2], [417016817, 3], [417017073, 0], [417017073, 1], [417017073, 2], [417017073, 3], [417017329, 0], [417017329, 1], [417017329, 2], [417017329, 3], [417017585, 0], [417017585, 1], [417017585, 2], [417017585, 3], [417017841, 0], [417017841, 1], [417017841, 2], [417017841, 3], [417018097, 0], [417018097, 1], [417018097, 2], [417018097, 3], [417018353, 0], [417018353, 1], [417018353, 2], [417018353, 3], [417018609, 0], [417018609, 1], [417018609, 2], [417018609, 3], [417018865, 0], [417018865, 1], [417018865, 2], [417018865, 3], [417019121, 0], [417019121, 1], [417019121, 2], [417019121, 3], [417019377, 0], [417019377, 1], [417019377, 2], [417019377, 3], [417019633, 0], [417019633, 1], [417019633, 2], [417019633, 3], [417019889, 0], [417019889, 1], [417019889, 2], [417019889, 3], [417020145, 0], [417020145, 1], [417020145, 2], [417020145, 3], [417020401, 0], [417020401, 1], [417020401, 2], [417020401, 3], [417020657, 0], [417020657, 1], [417020657, 2], [417020657, 3], [417020913, 0], [417020913, 1], [417020913, 2], [417020913, 3], [417021169, 0], [417021169, 1], [417021169, 2], [417021169, 3], [417021425, 0], [417021425, 1], [417021425, 2], [417021425, 3], [417021681, 0], [417021681, 1], [417021681, 2], [417021681, 3], [417021937, 0], [417021937, 1], [417021937, 2], [417021937, 3], [417022193, 0], [417022193, 1], [417022193, 2], [417022193, 3], [417022449, 0], [417022449, 1], [417022449, 2], [417022449, 3], [417022705, 0], [417022705, 1], [417022705, 2], [417022705, 3], [417022961, 0], [417022961, 1], [417022961, 2], [417022961, 3], [417023217, 0], [417023217, 1], [417023217, 2], [417023217, 3], [417023473, 0], [417023473, 1], [417023473, 2], [417023473, 3], [417023729, 0], [417023729, 1], [417023729, 2], [417023729, 3], [417023985, 0], [417023985, 1], [417023985, 2], [417023985, 3], [417024241, 0], [417024241, 1], [417024241, 2], [417024241, 3], [417024497, 0], [417024497, 1], [417024497, 2], [417024497, 3], [417024753, 0], [417024753, 1], [417024753, 2], [417024753, 3], [417025009, 0], [417025009, 1], [417025009, 2], [417025009, 3], [417025265, 0], [417025265, 1], [417025265, 2], [417025265, 3], [417025521, 0], [417025521, 1], [417025521, 2], [417025521, 3], [417025777, 0], [417025777, 1], [417025777, 2], [417025777, 3], [417026033, 0], [417026033, 1], [417026033, 2], [417026033, 3], [417026289, 0], [417026289, 1], [417026289, 2], [417026289, 3], [417026545, 0], [417026545, 1], [417026545, 2], [417026545, 3], [417026801, 0], [417026801, 1], [417026801, 2], [417026801, 3], [417027057, 0], [417027057, 1], [417027057, 2], [417027057, 3], [417027313, 0], [417027313, 1], [417027313, 2], [417027313, 3], [417027569, 0], [417027569, 1], [417027569, 2], [417027569, 3], [417027825, 0], [417027825, 1], [417027825, 2], [417027825, 3], [417028081, 0], [417028081, 1], [417028081, 2], [417028081, 3], [417028337, 0], [417028337, 1], [417028337, 2], [417028337, 3], [417028593, 0], [417028593, 1], [417028593, 2], [417028593, 3], [417028849, 0], [417028849, 1], [417028849, 2], [417028849, 3], [417029105, 0], [417029105, 1], [417029105, 2], [417029105, 3], [417029361, 0], [417029361, 1], [417029361, 2], [417029361, 3], [417029617, 0], [417029617, 1], [417029617, 2], [417029617, 3], [417029873, 0], [417029873, 1], [417029873, 2], [417029873, 3], [417030129, 0], [417030129, 1], [417030129, 2], [417030129, 3], [417030385, 0], [417030385, 1], [417030385, 2], [417030385, 3], [417030641, 0], [417030641, 1], [417030641, 2], [417030641, 3], [417030897, 0], [417030897, 1], [417030897, 2], [417030897, 3], [417031153, 0], [417031153, 1], [417031153, 2], [417031153, 3], [417031409, 0], [417031409, 1], [417031409, 2], [417031409, 3], [417031665, 0], [417031665, 1], [417031665, 2], [417031665, 3], [417031921, 0], [417031921, 1], [417031921, 2], [417031921, 3], [417032177, 0], [417032177, 1], [417032177, 2], [417032177, 3], [417032433, 0], [417032433, 1], [417032433, 2], [417032433, 3], [417032689, 0], [417032689, 1], [417032689, 2], [417032689, 3], [417032945, 0], [417032945, 1], [417032945, 2], [417032945, 3], [417033201, 0], [417033201, 1], [417033201, 2], [417033201, 3], [417033457, 0], [417033457, 1], [417033457, 2], [417033457, 3], [417033713, 0], [417033713, 1], [417033713, 2], [417033713, 3], [417033969, 0], [417033969, 1], [417033969, 2], [417033969, 3], [417034225, 0], [417034225, 1], [417034225, 2], [417034225, 3], [417034481, 0], [417034481, 1], [417034481, 2], [417034481, 3], [417034737, 0], [417034737, 1], [417034737, 2], [417034737, 3], [417034993, 0], [417034993, 1], [417034993, 2], [417034993, 3], [417035249, 0], [417035249, 1], [417035249, 2], [417035249, 3], [417035505, 0], [417035505, 1], [417035505, 2], [417035505, 3], [417035761, 0], [417035761, 1], [417035761, 2], [417035761, 3], [417036017, 0], [417036017, 1], [417036017, 2], [417036017, 3], [417036273, 0], [417036273, 1], [417036273, 2], [417036273, 3], [417036529, 0], [417036529, 1], [417036529, 2], [417036529, 3], [417036785, 0], [417036785, 1], [417036785, 2], [417036785, 3], [417037041, 0], [417037041, 1], [417037041, 2], [417037041, 3], [417037297, 0], [417037297, 1], [417037297, 2], [417037297, 3], [417037553, 0], [417037553, 1], [417037553, 2], [417037553, 3], [417037809, 0], [417037809, 1], [417037809, 2], [417037809, 3], [417038065, 0], [417038065, 1], [417038065, 2], [417038065, 3], [417038321, 0], [417038321, 1], [417038321, 2], [417038321, 3], [417038577, 0], [417038577, 1], [417038577, 2], [417038577, 3], [417038833, 0], [417038833, 1], [417038833, 2], [417038833, 3], [417039089, 0], [417039089, 1], [417039089, 2], [417039089, 3], [417039345, 0], [417039345, 1], [417039345, 2], [417039345, 3], [417039601, 0], [417039601, 1], [417039601, 2], [417039601, 3], [417039857, 0], [417039857, 1], [417039857, 2], [417039857, 3], [417040113, 0], [417040113, 1], [417040113, 2], [417040113, 3], [417040369, 0], [417040369, 1], [417040369, 2], [417040369, 3], [417040625, 0], [417040625, 1], [417040625, 2], [417040625, 3], [417040881, 0], [417040881, 1], [417040881, 2], [417040881, 3], [417041137, 0], [417041137, 1], [417041137, 2], [417041137, 3], [417041393, 0], [417041393, 1], [417041393, 2], [417041393, 3], [417041649, 0], [417041649, 1], [417041649, 2], [417041649, 3], [417041905, 0], [417041905, 1], [417041905, 2], [417041905, 3], [417042161, 0], [417042161, 1], [417042161, 2], [417042161, 3], [417042417, 0], [417042417, 1], [417042417, 2], [417042417, 3], [417042673, 0], [417042673, 1], [417042673, 2], [417042673, 3], [417042929, 0], [417042929, 1], [417042929, 2], [417042929, 3], [417043185, 0], [417043185, 1], [417043185, 2], [417043185, 3], [417043441, 0], [417043441, 1], [417043441, 2], [417043441, 3], [417043697, 0], [417043697, 1], [417043697, 2], [417043697, 3], [417043953, 0], [417043953, 1], [417043953, 2], [417043953, 3], [417044209, 0], [417044209, 1], [417044209, 2], [417044209, 3], [417044465, 0], [417044465, 1], [417044465, 2], [417044465, 3], [417044721, 0], [417044721, 1], [417044721, 2], [417044721, 3], [417044977, 0], [417044977, 1], [417044977, 2], [417044977, 3], [417045233, 0], [417045233, 1], [417045233, 2], [417045233, 3], [417045489, 0], [417045489, 1], [417045489, 2], [417045489, 3], [417045745, 0], [417045745, 1], [417045745, 2], [417045745, 3], [417046001, 0], [417046001, 1], [417046001, 2], [417046001, 3], [417046257, 0], [417046257, 1], [417046257, 2], [417046257, 3], [417046513, 0], [417046513, 1], [417046513, 2], [417046513, 3], [417046769, 0], [417046769, 1], [417046769, 2], [417046769, 3], [417047025, 0], [417047025, 1], [417047025, 2], [417047025, 3], [417047281, 0], [417047281, 1], [417047281, 2], [417047281, 3], [417047537, 0], [417047537, 1], [417047537, 2], [417047537, 3], [417047793, 0], [417047793, 1], [417047793, 2], [417047793, 3], [417048049, 0], [417048049, 1], [417048049, 2], [417048049, 3], [417048305, 0], [417048305, 1], [417048305, 2], [417048305, 3], [417048561, 0], [417048561, 1], [417048561, 2], [417048561, 3], [417048817, 0], [417048817, 1], [417048817, 2], [417048817, 3], [417049073, 0], [417049073, 1], [417049073, 2], [417049073, 3], [417049329, 0], [417049329, 1], [417049329, 2], [417049329, 3], [417049585, 0], [417049585, 1], [417049585, 2], [417049585, 3], [417049841, 0], [417049841, 1], [417049841, 2], [417049841, 3], [417050097, 0], [417050097, 1], [417050097, 2], [417050097, 3], [417050353, 0], [417050353, 1], [417050353, 2], [417050353, 3], [417050609, 0], [417050609, 1], [417050609, 2], [417050609, 3], [417050865, 0], [417050865, 1], [417050865, 2], [417050865, 3], [417051121, 0], [417051121, 1], [417051121, 2], [417051121, 3], [417051377, 0], [417051377, 1], [417051377, 2], [417051377, 3], [417051633, 0], [417051633, 1], [417051633, 2], [417051633, 3], [417051889, 0], [417051889, 1], [417051889, 2], [417051889, 3], [417052145, 0], [417052145, 1], [417052145, 2], [417052145, 3], [417052401, 0], [417052401, 1], [417052401, 2], [417052401, 3], [417052657, 0], [417052657, 1], [417052657, 2], [417052657, 3], [417052913, 0], [417052913, 1], [417052913, 2], [417052913, 3], [417053169, 0], [417053169, 1], [417053169, 2], [417053169, 3], [417053425, 0], [417053425, 1], [417053425, 2], [417053425, 3], [417053681, 0], [417053681, 1], [417053681, 2], [417053681, 3], [417053937, 0], [417053937, 1], [417053937, 2], [417053937, 3], [417054193, 0], [417054193, 1], [417054193, 2], [417054193, 3], [417054449, 0], [417054449, 1], [417054449, 2], [417054449, 3], [417054705, 0], [417054705, 1], [417054705, 2], [417054705, 3], [417054961, 0], [417054961, 1], [417054961, 2], [417054961, 3], [417055217, 0], [417055217, 1], [417055217, 2], [417055217, 3], [417055473, 0], [417055473, 1], [417055473, 2], [417055473, 3], [417055729, 0], [417055729, 1], [417055729, 2], [417055729, 3], [417055985, 0], [417055985, 1], [417055985, 2], [417055985, 3], [417056241, 0], [417056241, 1], [417056241, 2], [417056241, 3], [417056497, 0], [417056497, 1], [417056497, 2], [417056497, 3], [417056753, 0], [417056753, 1], [417056753, 2], [417056753, 3], [417057009, 0], [417057009, 1], [417057009, 2], [417057009, 3], [417057265, 0], [417057265, 1], [417057265, 2], [417057265, 3], [417057521, 0], [417057521, 1], [417057521, 2], [417057521, 3], [417057777, 0], [417057777, 1], [417057777, 2], [417057777, 3], [417058033, 0], [417058033, 1], [417058033, 2], [417058033, 3], [417058289, 0], [417058289, 1], [417058289, 2], [417058289, 3], [417058545, 0], [417058545, 1], [417058545, 2], [417058545, 3], [417058801, 0], [417058801, 1], [417058801, 2], [417058801, 3], [417059057, 0], [417059057, 1], [417059057, 2], [417059057, 3], [417059313, 0], [417059313, 1], [417059313, 2], [417059313, 3], [417059569, 0], [417059569, 1], [417059569, 2], [417059569, 3], [417059825, 0], [417059825, 1], [417059825, 2], [417059825, 3], [417060081, 0], [417060081, 1], [417060081, 2], [417060081, 3], [417060337, 0], [417060337, 1], [417060337, 2], [417060337, 3], [417060593, 0], [417060593, 1], [417060593, 2], [417060593, 3], [417060849, 0], [417060849, 1], [417060849, 2], [417060849, 3], [417061105, 0], [417061105, 1], [417061105, 2], [417061105, 3], [417061361, 0], [417061361, 1], [417061361, 2], [417061361, 3], [417061617, 0], [417061617, 1], [417061617, 2], [417061617, 3], [417061873, 0], [417061873, 1], [417061873, 2], [417061873, 3], [417062129, 0], [417062129, 1], [417062129, 2], [417062129, 3], [417062385, 0], [417062385, 1], [417062385, 2], [417062385, 3], [417062641, 0], [417062641, 1], [417062641, 2], [417062641, 3], [417062897, 0], [417062897, 1], [417062897, 2], [417062897, 3], [417063153, 0], [417063153, 1], [417063153, 2], [417063153, 3], [417063409, 0], [417063409, 1], [417063409, 2], [417063409, 3], [417063665, 0], [417063665, 1], [417063665, 2], [417063665, 3], [417063921, 0], [417063921, 1], [417063921, 2], [417063921, 3], [417064177, 0], [417064177, 1], [417064177, 2], [417064177, 3], [417064433, 0], [417064433, 1], [417064433, 2], [417064433, 3], [417064689, 0], [417064689, 1], [417064689, 2], [417064689, 3], [417064945, 0], [417064945, 1], [417064945, 2], [417064945, 3], [417065201, 0], [417065201, 1], [417065201, 2], [417065201, 3], [417065457, 0], [417065457, 1], [417065457, 2], [417065457, 3], [417065713, 0], [417065713, 1], [417065713, 2], [417065713, 3], [417065969, 0], [417065969, 1], [417065969, 2], [417065969, 3], [417066225, 0], [417066225, 1], [417066225, 2], [417066225, 3], [417066481, 0], [417066481, 1], [417066481, 2], [417066481, 3], [417066737, 0], [417066737, 1], [417066737, 2], [417066737, 3], [417066993, 0], [417066993, 1], [417066993, 2], [417066993, 3], [417067249, 0], [417067249, 1], [417067249, 2], [417067249, 3], [417067505, 0], [417067505, 1], [417067505, 2], [417067505, 3], [417067761, 0], [417067761, 1], [417067761, 2], [417067761, 3], [417068017, 0], [417068017, 1], [417068017, 2], [417068017, 3], [417068273, 0], [417068273, 1], [417068273, 2], [417068273, 3], [417068529, 0], [417068529, 1], [417068529, 2], [417068529, 3], [417068785, 0], [417068785, 1], [417068785, 2], [417068785, 3], [417069041, 0], [417069041, 1], [417069041, 2], [417069041, 3], [417069297, 0], [417069297, 1], [417069297, 2], [417069297, 3], [417069553, 0], [417069553, 1], [417069553, 2], [417069553, 3], [417069809, 0], [417069809, 1], [417069809, 2], [417069809, 3], [417070065, 0], [417070065, 1], [417070065, 2], [417070065, 3], [417070321, 0], [417070321, 1], [417070321, 2], [417070321, 3], [417070577, 0], [417070577, 1], [417070577, 2], [417070577, 3], [417070833, 0], [417070833, 1], [417070833, 2], [417070833, 3], [417071089, 0], [417071089, 1], [417071089, 2], [417071089, 3], [13056, 0], [13056, 1], [13056, 2], [13056, 3], [13057, 0], [13057, 1], [13057, 2], [13057, 3], [13058, 0], [13058, 1], [13058, 2], [13058, 3], [13059, 0], [13059, 1], [13059, 2], [13059, 3], [13060, 0], [13060, 1], [13060, 2], [13060, 3], [13061, 0], [13061, 1], [13061, 2], [13061, 3], [13062, 0], [13062, 1], [13062, 2], [13062, 3], [13063, 0], [13063, 1], [13063, 2], [13063, 3], [13064, 0], [13064, 1], [13064, 2], [13064, 3], [13065, 0], [13065, 1], [13065, 2], [13065, 3], [13066, 0], [13066, 1], [13066, 2], [13066, 3], [13067, 0], [13067, 1], [13067, 2], [13067, 3], [13068, 0], [13068, 1], [13068, 2], [13068, 3], [13069, 0], [13069, 1], [13069, 2], [13069, 3], [13070, 0], [13070, 1], [13070, 2], [13070, 3], [13071, 0], [13071, 1], [13071, 2], [13071, 3], [13072, 0], [13072, 1], [13072, 2], [13072, 3], [13073, 0], [13073, 1], [13073, 2], [13073, 3], [13074, 0], [13074, 1], [13074, 2], [13074, 3], [13075, 0], [13075, 1], [13075, 2], [13075, 3], [13076, 0], [13076, 1], [13076, 2], [13076, 3], [13077, 0], [13077, 1], [13077, 2], [13077, 3], [13078, 0], [13078, 1], [13078, 2], [13078, 3], [13079, 0], [13079, 1], [13079, 2], [13079, 3], [13080, 0], [13080, 1], [13080, 2], [13080, 3], [13081, 0], [13081, 1], [13081, 2], [13081, 3], [13082, 0], [13082, 1], [13082, 2], [13082, 3], [13083, 0], [13083, 1], [13083, 2], [13083, 3], [13084, 0], [13084, 1], [13084, 2], [13084, 3], [13085, 0], [13085, 1], [13085, 2], [13085, 3], [13086, 0], [13086, 1], [13086, 2], [13086, 3], [13087, 0], [13087, 1], [13087, 2], [13087, 3], [13088, 0], [13088, 1], [13088, 2], [13088, 3], [13089, 0], [13089, 1], [13089, 2], [13089, 3], [13090, 0], [13090, 1], [13090, 2], [13090, 3], [13091, 0], [13091, 1], [13091, 2], [13091, 3], [13092, 0], [13092, 1], [13092, 2], [13092, 3], [13093, 0], [13093, 1], [13093, 2], [13093, 3], [13094, 0], [13094, 1], [13094, 2], [13094, 3], [13095, 0], [13095, 1], [13095, 2], [13095, 3], [13096, 0], [13096, 1], [13096, 2], [13096, 3], [13097, 0], [13097, 1], [13097, 2], [13097, 3], [13098, 0], [13098, 1], [13098, 2], [13098, 3], [13099, 0], [13099, 1], [13099, 2], [13099, 3], [13100, 0], [13100, 1], [13100, 2], [13100, 3], [13101, 0], [13101, 1], [13101, 2], [13101, 3], [13102, 0], [13102, 1], [13102, 2], [13102, 3], [13103, 0], [13103, 1], [13103, 2], [13103, 3], [13104, 0], [13104, 1], [13104, 2], [13104, 3], [13105, 0], [13105, 1], [13105, 2], [13105, 3], [13106, 0], [13106, 1], [13106, 2], [13106, 3], [13107, 0], [13107, 1], [13107, 2], [13107, 3], [13108, 0], [13108, 1], [13108, 2], [13108, 3], [13109, 0], [13109, 1], [13109, 2], [13109, 3], [13110, 0], [13110, 1], [13110, 2], [13110, 3], [13111, 0], [13111, 1], [13111, 2], [13111, 3], [13112, 0], [13112, 1], [13112, 2], [13112, 3], [13113, 0], [13113, 1], [13113, 2], [13113, 3], [13114, 0], [13114, 1], [13114, 2], [13114, 3], [13115, 0], [13115, 1], [13115, 2], [13115, 3], [13116, 0], [13116, 1], [13116, 2], [13116, 3], [13117, 0], [13117, 1], [13117, 2], [13117, 3], [13118, 0], [13118, 1], [13118, 2], [13118, 3], [13119, 0], [13119, 1], [13119, 2], [13119, 3], [13120, 0], [13120, 1], [13120, 2], [13120, 3], [13121, 0], [13121, 1], [13121, 2], [13121, 3], [13122, 0], [13122, 1], [13122, 2], [13122, 3], [13123, 0], [13123, 1], [13123, 2], [13123, 3], [13124, 0], [13124, 1], [13124, 2], [13124, 3], [13125, 0], [13125, 1], [13125, 2], [13125, 3], [13126, 0], [13126, 1], [13126, 2], [13126, 3], [13127, 0], [13127, 1], [13127, 2], [13127, 3], [13128, 0], [13128, 1], [13128, 2], [13128, 3], [13129, 0], [13129, 1], [13129, 2], [13129, 3], [13130, 0], [13130, 1], [13130, 2], [13130, 3], [13131, 0], [13131, 1], [13131, 2], [13131, 3], [13132, 0], [13132, 1], [13132, 2], [13132, 3], [13133, 0], [13133, 1], [13133, 2], [13133, 3], [13134, 0], [13134, 1], [13134, 2], [13134, 3], [13135, 0], [13135, 1], [13135, 2], [13135, 3], [13136, 0], [13136, 1], [13136, 2], [13136, 3], [13137, 0], [13137, 1], [13137, 2], [13137, 3], [13138, 0], [13138, 1], [13138, 2], [13138, 3], [13139, 0], [13139, 1], [13139, 2], [13139, 3], [13140, 0], [13140, 1], [13140, 2], [13140, 3], [13141, 0], [13141, 1], [13141, 2], [13141, 3], [13142, 0], [13142, 1], [13142, 2], [13142, 3], [13143, 0], [13143, 1], [13143, 2], [13143, 3], [13144, 0], [13144, 1], [13144, 2], [13144, 3], [13145, 0], [13145, 1], [13145, 2], [13145, 3], [13146, 0], [13146, 1], [13146, 2], [13146, 3], [13147, 0], [13147, 1], [13147, 2], [13147, 3], [13148, 0], [13148, 1], [13148, 2], [13148, 3], [13149, 0], [13149, 1], [13149, 2], [13149, 3], [13150, 0], [13150, 1], [13150, 2], [13150, 3], [13151, 0], [13151, 1], [13151, 2], [13151, 3], [13152, 0], [13152, 1], [13152, 2], [13152, 3], [13153, 0], [13153, 1], [13153, 2], [13153, 3], [13154, 0], [13154, 1], [13154, 2], [13154, 3], [13155, 0], [13155, 1], [13155, 2], [13155, 3], [13156, 0], [13156, 1], [13156, 2], [13156, 3], [13157, 0], [13157, 1], [13157, 2], [13157, 3], [13158, 0], [13158, 1], [13158, 2], [13158, 3], [13159, 0], [13159, 1], [13159, 2], [13159, 3], [13160, 0], [13160, 1], [13160, 2], [13160, 3], [13161, 0], [13161, 1], [13161, 2], [13161, 3], [13162, 0], [13162, 1], [13162, 2], [13162, 3], [13163, 0], [13163, 1], [13163, 2], [13163, 3], [13164, 0], [13164, 1], [13164, 2], [13164, 3], [13165, 0], [13165, 1], [13165, 2], [13165, 3], [13166, 0], [13166, 1], [13166, 2], [13166, 3], [13167, 0], [13167, 1], [13167, 2], [13167, 3], [13168, 0], [13168, 1], [13168, 2], [13168, 3], [13169, 0], [13169, 1], [13169, 2], [13169, 3], [13170, 0], [13170, 1], [13170, 2], [13170, 3], [13171, 0], [13171, 1], [13171, 2], [13171, 3], [13172, 0], [13172, 1], [13172, 2], [13172, 3], [13173, 0], [13173, 1], [13173, 2], [13173, 3], [13174, 0], [13174, 1], [13174, 2], [13174, 3], [13175, 0], [13175, 1], [13175, 2], [13175, 3], [13176, 0], [13176, 1], [13176, 2], [13176, 3], [13177, 0], [13177, 1], [13177, 2], [13177, 3], [13178, 0], [13178, 1], [13178, 2], [13178, 3], [13179, 0], [13179, 1], [13179, 2], [13179, 3], [13180, 0], [13180, 1], [13180, 2], [13180, 3], [13181, 0], [13181, 1], [13181, 2], [13181, 3], [13182, 0], [13182, 1], [13182, 2], [13182, 3], [13183, 0], [13183, 1], [13183, 2], [13183, 3], [13184, 0], [13184, 1], [13184, 2], [13184, 3], [13185, 0], [13185, 1], [13185, 2], [13185, 3], [13186, 0], [13186, 1], [13186, 2], [13186, 3], [13187, 0], [13187, 1], [13187, 2], [13187, 3], [13188, 0], [13188, 1], [13188, 2], [13188, 3], [13189, 0], [13189, 1], [13189, 2], [13189, 3], [13190, 0], [13190, 1], [13190, 2], [13190, 3], [13191, 0], [13191, 1], [13191, 2], [13191, 3], [13192, 0], [13192, 1], [13192, 2], [13192, 3], [13193, 0], [13193, 1], [13193, 2], [13193, 3], [13194, 0], [13194, 1], [13194, 2], [13194, 3], [13195, 0], [13195, 1], [13195, 2], [13195, 3], [13196, 0], [13196, 1], [13196, 2], [13196, 3], [13197, 0], [13197, 1], [13197, 2], [13197, 3], [13198, 0], [13198, 1], [13198, 2], [13198, 3], [13199, 0], [13199, 1], [13199, 2], [13199, 3], [13200, 0], [13200, 1], [13200, 2], [13200, 3], [13201, 0], [13201, 1], [13201, 2], [13201, 3], [13202, 0], [13202, 1], [13202, 2], [13202, 3], [13203, 0], [13203, 1], [13203, 2], [13203, 3], [13204, 0], [13204, 1], [13204, 2], [13204, 3], [13205, 0], [13205, 1], [13205, 2], [13205, 3], [13206, 0], [13206, 1], [13206, 2], [13206, 3], [13207, 0], [13207, 1], [13207, 2], [13207, 3], [13208, 0], [13208, 1], [13208, 2], [13208, 3], [13209, 0], [13209, 1], [13209, 2], [13209, 3], [13210, 0], [13210, 1], [13210, 2], [13210, 3], [13211, 0], [13211, 1], [13211, 2], [13211, 3], [13212, 0], [13212, 1], [13212, 2], [13212, 3], [13213, 0], [13213, 1], [13213, 2], [13213, 3], [13214, 0], [13214, 1], [13214, 2], [13214, 3], [13215, 0], [13215, 1], [13215, 2], [13215, 3], [13216, 0], [13216, 1], [13216, 2], [13216, 3], [13217, 0], [13217, 1], [13217, 2], [13217, 3], [13218, 0], [13218, 1], [13218, 2], [13218, 3], [13219, 0], [13219, 1], [13219, 2], [13219, 3], [13220, 0], [13220, 1], [13220, 2], [13220, 3], [13221, 0], [13221, 1], [13221, 2], [13221, 3], [13222, 0], [13222, 1], [13222, 2], [13222, 3], [13223, 0], [13223, 1], [13223, 2], [13223, 3], [13224, 0], [13224, 1], [13224, 2], [13224, 3], [13225, 0], [13225, 1], [13225, 2], [13225, 3], [13226, 0], [13226, 1], [13226, 2], [13226, 3], [13227, 0], [13227, 1], [13227, 2], [13227, 3], [13228, 0], [13228, 1], [13228, 2], [13228, 3], [13229, 0], [13229, 1], [13229, 2], [13229, 3], [13230, 0], [13230, 1], [13230, 2], [13230, 3], [13231, 0], [13231, 1], [13231, 2], [13231, 3], [13232, 0], [13232, 1], [13232, 2], [13232, 3], [13233, 0], [13233, 1], [13233, 2], [13233, 3], [13234, 0], [13234, 1], [13234, 2], [13234, 3], [13235, 0], [13235, 1], [13235, 2], [13235, 3], [13236, 0], [13236, 1], [13236, 2], [13236, 3], [13237, 0], [13237, 1], [13237, 2], [13237, 3], [13238, 0], [13238, 1], [13238, 2], [13238, 3], [13239, 0], [13239, 1], [13239, 2], [13239, 3], [13240, 0], [13240, 1], [13240, 2], [13240, 3], [13241, 0], [13241, 1], [13241, 2], [13241, 3], [13242, 0], [13242, 1], [13242, 2], [13242, 3], [13243, 0], [13243, 1], [13243, 2], [13243, 3], [13244, 0], [13244, 1], [13244, 2], [13244, 3], [13245, 0], [13245, 1], [13245, 2], [13245, 3], [13246, 0], [13246, 1], [13246, 2], [13246, 3], [13247, 0], [13247, 1], [13247, 2], [13247, 3], [13248, 0], [13248, 1], [13248, 2], [13248, 3], [13249, 0], [13249, 1], [13249, 2], [13249, 3], [13250, 0], [13250, 1], [13250, 2], [13250, 3], [13251, 0], [13251, 1], [13251, 2], [13251, 3], [13252, 0], [13252, 1], [13252, 2], [13252, 3], [13253, 0], [13253, 1], [13253, 2], [13253, 3], [13254, 0], [13254, 1], [13254, 2], [13254, 3], [13255, 0], [13255, 1], [13255, 2], [13255, 3], [13256, 0], [13256, 1], [13256, 2], [13256, 3], [13257, 0], [13257, 1], [13257, 2], [13257, 3], [13258, 0], [13258, 1], [13258, 2], [13258, 3], [13259, 0], [13259, 1], [13259, 2], [13259, 3], [13260, 0], [13260, 1], [13260, 2], [13260, 3], [13261, 0], [13261, 1], [13261, 2], [13261, 3], [13262, 0], [13262, 1], [13262, 2], [13262, 3], [13263, 0], [13263, 1], [13263, 2], [13263, 3], [13264, 0], [13264, 1], [13264, 2], [13264, 3], [13265, 0], [13265, 1], [13265, 2], [13265, 3], [13266, 0], [13266, 1], [13266, 2], [13266, 3], [13267, 0], [13267, 1], [13267, 2], [13267, 3], [13268, 0], [13268, 1], [13268, 2], [13268, 3], [13269, 0], [13269, 1], [13269, 2], [13269, 3], [13270, 0], [13270, 1], [13270, 2], [13270, 3], [13271, 0], [13271, 1], [13271, 2], [13271, 3], [13272, 0], [13272, 1], [13272, 2], [13272, 3], [13273, 0], [13273, 1], [13273, 2], [13273, 3], [13274, 0], [13274, 1], [13274, 2], [13274, 3], [13275, 0], [13275, 1], [13275, 2], [13275, 3], [13276, 0], [13276, 1], [13276, 2], [13276, 3], [13277, 0], [13277, 1], [13277, 2], [13277, 3], [13278, 0], [13278, 1], [13278, 2], [13278, 3], [13279, 0], [13279, 1], [13279, 2], [13279, 3], [13280, 0], [13280, 1], [13280, 2], [13280, 3], [13281, 0], [13281, 1], [13281, 2], [13281, 3], [13282, 0], [13282, 1], [13282, 2], [13282, 3], [13283, 0], [13283, 1], [13283, 2], [13283, 3], [13284, 0], [13284, 1], [13284, 2], [13284, 3], [13285, 0], [13285, 1], [13285, 2], [13285, 3], [13286, 0], [13286, 1], [13286, 2], [13286, 3], [13287, 0], [13287, 1], [13287, 2], [13287, 3], [13288, 0], [13288, 1], [13288, 2], [13288, 3], [13289, 0], [13289, 1], [13289, 2], [13289, 3], [13290, 0], [13290, 1], [13290, 2], [13290, 3], [13291, 0], [13291, 1], [13291, 2], [13291, 3], [13292, 0], [13292, 1], [13292, 2], [13292, 3], [13293, 0], [13293, 1], [13293, 2], [13293, 3], [13294, 0], [13294, 1], [13294, 2], [13294, 3], [13295, 0], [13295, 1], [13295, 2], [13295, 3], [13296, 0], [13296, 1], [13296, 2], [13296, 3], [13297, 0], [13297, 1], [13297, 2], [13297, 3], [13298, 0], [13298, 1], [13298, 2], [13298, 3], [13299, 0], [13299, 1], [13299, 2], [13299, 3], [13300, 0], [13300, 1], [13300, 2], [13300, 3], [13301, 0], [13301, 1], [13301, 2], [13301, 3], [13302, 0], [13302, 1], [13302, 2], [13302, 3], [13303, 0], [13303, 1], [13303, 2], [13303, 3], [13304, 0], [13304, 1], [13304, 2], [13304, 3], [13305, 0], [13305, 1], [13305, 2], [13305, 3], [13306, 0], [13306, 1], [13306, 2], [13306, 3], [13307, 0], [13307, 1], [13307, 2], [13307, 3], [13308, 0], [13308, 1], [13308, 2], [13308, 3], [13309, 0], [13309, 1], [13309, 2], [13309, 3], [13310, 0], [13310, 1], [13310, 2], [13310, 3], [13311, 0], [13311, 1], [13311, 2], [13311, 3]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_default_controls_not_allowed()[source]
test_spam_can_buses()[source]
test_tx_hook_on_wrong_safety_mode()[source]
class panda.tests.safety.test_defaults.TestAllOutputPassthrough(methodName='runTest')[source]

Bases: TestAllOutput

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_defaults.TestDefaultRxHookBase(methodName='runTest')[source]

Bases: PandaSafetyTest

test_rx_hook()[source]
class panda.tests.safety.test_defaults.TestNoOutput(methodName='runTest')[source]

Bases: TestDefaultRxHookBase

TX_MSGS: list[list[int]] | None = []
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_defaults.TestSilent(methodName='runTest')[source]

Bases: TestNoOutput

SILENT uses same hooks as NOOUTPUT

setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_elm327 module

class panda.tests.safety.test_elm327.TestElm327(methodName='runTest')[source]

Bases: TestDefaultRxHookBase

TX_MSGS: list[list[int]] | None = [[587, 0], [587, 1], [587, 2], [587, 3], [1536, 0], [1536, 1], [1536, 2], [1536, 3], [1537, 0], [1537, 1], [1537, 2], [1537, 3], [1538, 0], [1538, 1], [1538, 2], [1538, 3], [1539, 0], [1539, 1], [1539, 2], [1539, 3], [1540, 0], [1540, 1], [1540, 2], [1540, 3], [1541, 0], [1541, 1], [1541, 2], [1541, 3], [1542, 0], [1542, 1], [1542, 2], [1542, 3], [1543, 0], [1543, 1], [1543, 2], [1543, 3], [1544, 0], [1544, 1], [1544, 2], [1544, 3], [1545, 0], [1545, 1], [1545, 2], [1545, 3], [1546, 0], [1546, 1], [1546, 2], [1546, 3], [1547, 0], [1547, 1], [1547, 2], [1547, 3], [1548, 0], [1548, 1], [1548, 2], [1548, 3], [1549, 0], [1549, 1], [1549, 2], [1549, 3], [1550, 0], [1550, 1], [1550, 2], [1550, 3], [1551, 0], [1551, 1], [1551, 2], [1551, 3], [1552, 0], [1552, 1], [1552, 2], [1552, 3], [1553, 0], [1553, 1], [1553, 2], [1553, 3], [1554, 0], [1554, 1], [1554, 2], [1554, 3], [1555, 0], [1555, 1], [1555, 2], [1555, 3], [1556, 0], [1556, 1], [1556, 2], [1556, 3], [1557, 0], [1557, 1], [1557, 2], [1557, 3], [1558, 0], [1558, 1], [1558, 2], [1558, 3], [1559, 0], [1559, 1], [1559, 2], [1559, 3], [1560, 0], [1560, 1], [1560, 2], [1560, 3], [1561, 0], [1561, 1], [1561, 2], [1561, 3], [1562, 0], [1562, 1], [1562, 2], [1562, 3], [1563, 0], [1563, 1], [1563, 2], [1563, 3], [1564, 0], [1564, 1], [1564, 2], [1564, 3], [1565, 0], [1565, 1], [1565, 2], [1565, 3], [1566, 0], [1566, 1], [1566, 2], [1566, 3], [1567, 0], [1567, 1], [1567, 2], [1567, 3], [1568, 0], [1568, 1], [1568, 2], [1568, 3], [1569, 0], [1569, 1], [1569, 2], [1569, 3], [1570, 0], [1570, 1], [1570, 2], [1570, 3], [1571, 0], [1571, 1], [1571, 2], [1571, 3], [1572, 0], [1572, 1], [1572, 2], [1572, 3], [1573, 0], [1573, 1], [1573, 2], [1573, 3], [1574, 0], [1574, 1], [1574, 2], [1574, 3], [1575, 0], [1575, 1], [1575, 2], [1575, 3], [1576, 0], [1576, 1], [1576, 2], [1576, 3], [1577, 0], [1577, 1], [1577, 2], [1577, 3], [1578, 0], [1578, 1], [1578, 2], [1578, 3], [1579, 0], [1579, 1], [1579, 2], [1579, 3], [1580, 0], [1580, 1], [1580, 2], [1580, 3], [1581, 0], [1581, 1], [1581, 2], [1581, 3], [1582, 0], [1582, 1], [1582, 2], [1582, 3], [1583, 0], [1583, 1], [1583, 2], [1583, 3], [1584, 0], [1584, 1], [1584, 2], [1584, 3], [1585, 0], [1585, 1], [1585, 2], [1585, 3], [1586, 0], [1586, 1], [1586, 2], [1586, 3], [1587, 0], [1587, 1], [1587, 2], [1587, 3], [1588, 0], [1588, 1], [1588, 2], [1588, 3], [1589, 0], [1589, 1], [1589, 2], [1589, 3], [1590, 0], [1590, 1], [1590, 2], [1590, 3], [1591, 0], [1591, 1], [1591, 2], [1591, 3], [1592, 0], [1592, 1], [1592, 2], [1592, 3], [1593, 0], [1593, 1], [1593, 2], [1593, 3], [1594, 0], [1594, 1], [1594, 2], [1594, 3], [1595, 0], [1595, 1], [1595, 2], [1595, 3], [1596, 0], [1596, 1], [1596, 2], [1596, 3], [1597, 0], [1597, 1], [1597, 2], [1597, 3], [1598, 0], [1598, 1], [1598, 2], [1598, 3], [1599, 0], [1599, 1], [1599, 2], [1599, 3], [1600, 0], [1600, 1], [1600, 2], [1600, 3], [1601, 0], [1601, 1], [1601, 2], [1601, 3], [1602, 0], [1602, 1], [1602, 2], [1602, 3], [1603, 0], [1603, 1], [1603, 2], [1603, 3], [1604, 0], [1604, 1], [1604, 2], [1604, 3], [1605, 0], [1605, 1], [1605, 2], [1605, 3], [1606, 0], [1606, 1], [1606, 2], [1606, 3], [1607, 0], [1607, 1], [1607, 2], [1607, 3], [1608, 0], [1608, 1], [1608, 2], [1608, 3], [1609, 0], [1609, 1], [1609, 2], [1609, 3], [1610, 0], [1610, 1], [1610, 2], [1610, 3], [1611, 0], [1611, 1], [1611, 2], [1611, 3], [1612, 0], [1612, 1], [1612, 2], [1612, 3], [1613, 0], [1613, 1], [1613, 2], [1613, 3], [1614, 0], [1614, 1], [1614, 2], [1614, 3], [1615, 0], [1615, 1], [1615, 2], [1615, 3], [1616, 0], [1616, 1], [1616, 2], [1616, 3], [1617, 0], [1617, 1], [1617, 2], [1617, 3], [1618, 0], [1618, 1], [1618, 2], [1618, 3], [1619, 0], [1619, 1], [1619, 2], [1619, 3], [1620, 0], [1620, 1], [1620, 2], [1620, 3], [1621, 0], [1621, 1], [1621, 2], [1621, 3], [1622, 0], [1622, 1], [1622, 2], [1622, 3], [1623, 0], [1623, 1], [1623, 2], [1623, 3], [1624, 0], [1624, 1], [1624, 2], [1624, 3], [1625, 0], [1625, 1], [1625, 2], [1625, 3], [1626, 0], [1626, 1], [1626, 2], [1626, 3], [1627, 0], [1627, 1], [1627, 2], [1627, 3], [1628, 0], [1628, 1], [1628, 2], [1628, 3], [1629, 0], [1629, 1], [1629, 2], [1629, 3], [1630, 0], [1630, 1], [1630, 2], [1630, 3], [1631, 0], [1631, 1], [1631, 2], [1631, 3], [1632, 0], [1632, 1], [1632, 2], [1632, 3], [1633, 0], [1633, 1], [1633, 2], [1633, 3], [1634, 0], [1634, 1], [1634, 2], [1634, 3], [1635, 0], [1635, 1], [1635, 2], [1635, 3], [1636, 0], [1636, 1], [1636, 2], [1636, 3], [1637, 0], [1637, 1], [1637, 2], [1637, 3], [1638, 0], [1638, 1], [1638, 2], [1638, 3], [1639, 0], [1639, 1], [1639, 2], [1639, 3], [1640, 0], [1640, 1], [1640, 2], [1640, 3], [1641, 0], [1641, 1], [1641, 2], [1641, 3], [1642, 0], [1642, 1], [1642, 2], [1642, 3], [1643, 0], [1643, 1], [1643, 2], [1643, 3], [1644, 0], [1644, 1], [1644, 2], [1644, 3], [1645, 0], [1645, 1], [1645, 2], [1645, 3], [1646, 0], [1646, 1], [1646, 2], [1646, 3], [1647, 0], [1647, 1], [1647, 2], [1647, 3], [1648, 0], [1648, 1], [1648, 2], [1648, 3], [1649, 0], [1649, 1], [1649, 2], [1649, 3], [1650, 0], [1650, 1], [1650, 2], [1650, 3], [1651, 0], [1651, 1], [1651, 2], [1651, 3], [1652, 0], [1652, 1], [1652, 2], [1652, 3], [1653, 0], [1653, 1], [1653, 2], [1653, 3], [1654, 0], [1654, 1], [1654, 2], [1654, 3], [1655, 0], [1655, 1], [1655, 2], [1655, 3], [1656, 0], [1656, 1], [1656, 2], [1656, 3], [1657, 0], [1657, 1], [1657, 2], [1657, 3], [1658, 0], [1658, 1], [1658, 2], [1658, 3], [1659, 0], [1659, 1], [1659, 2], [1659, 3], [1660, 0], [1660, 1], [1660, 2], [1660, 3], [1661, 0], [1661, 1], [1661, 2], [1661, 3], [1662, 0], [1662, 1], [1662, 2], [1662, 3], [1663, 0], [1663, 1], [1663, 2], [1663, 3], [1664, 0], [1664, 1], [1664, 2], [1664, 3], [1665, 0], [1665, 1], [1665, 2], [1665, 3], [1666, 0], [1666, 1], [1666, 2], [1666, 3], [1667, 0], [1667, 1], [1667, 2], [1667, 3], [1668, 0], [1668, 1], [1668, 2], [1668, 3], [1669, 0], [1669, 1], [1669, 2], [1669, 3], [1670, 0], [1670, 1], [1670, 2], [1670, 3], [1671, 0], [1671, 1], [1671, 2], [1671, 3], [1672, 0], [1672, 1], [1672, 2], [1672, 3], [1673, 0], [1673, 1], [1673, 2], [1673, 3], [1674, 0], [1674, 1], [1674, 2], [1674, 3], [1675, 0], [1675, 1], [1675, 2], [1675, 3], [1676, 0], [1676, 1], [1676, 2], [1676, 3], [1677, 0], [1677, 1], [1677, 2], [1677, 3], [1678, 0], [1678, 1], [1678, 2], [1678, 3], [1679, 0], [1679, 1], [1679, 2], [1679, 3], [1680, 0], [1680, 1], [1680, 2], [1680, 3], [1681, 0], [1681, 1], [1681, 2], [1681, 3], [1682, 0], [1682, 1], [1682, 2], [1682, 3], [1683, 0], [1683, 1], [1683, 2], [1683, 3], [1684, 0], [1684, 1], [1684, 2], [1684, 3], [1685, 0], [1685, 1], [1685, 2], [1685, 3], [1686, 0], [1686, 1], [1686, 2], [1686, 3], [1687, 0], [1687, 1], [1687, 2], [1687, 3], [1688, 0], [1688, 1], [1688, 2], [1688, 3], [1689, 0], [1689, 1], [1689, 2], [1689, 3], [1690, 0], [1690, 1], [1690, 2], [1690, 3], [1691, 0], [1691, 1], [1691, 2], [1691, 3], [1692, 0], [1692, 1], [1692, 2], [1692, 3], [1693, 0], [1693, 1], [1693, 2], [1693, 3], [1694, 0], [1694, 1], [1694, 2], [1694, 3], [1695, 0], [1695, 1], [1695, 2], [1695, 3], [1696, 0], [1696, 1], [1696, 2], [1696, 3], [1697, 0], [1697, 1], [1697, 2], [1697, 3], [1698, 0], [1698, 1], [1698, 2], [1698, 3], [1699, 0], [1699, 1], [1699, 2], [1699, 3], [1700, 0], [1700, 1], [1700, 2], [1700, 3], [1701, 0], [1701, 1], [1701, 2], [1701, 3], [1702, 0], [1702, 1], [1702, 2], [1702, 3], [1703, 0], [1703, 1], [1703, 2], [1703, 3], [1704, 0], [1704, 1], [1704, 2], [1704, 3], [1705, 0], [1705, 1], [1705, 2], [1705, 3], [1706, 0], [1706, 1], [1706, 2], [1706, 3], [1707, 0], [1707, 1], [1707, 2], [1707, 3], [1708, 0], [1708, 1], [1708, 2], [1708, 3], [1709, 0], [1709, 1], [1709, 2], [1709, 3], [1710, 0], [1710, 1], [1710, 2], [1710, 3], [1711, 0], [1711, 1], [1711, 2], [1711, 3], [1712, 0], [1712, 1], [1712, 2], [1712, 3], [1713, 0], [1713, 1], [1713, 2], [1713, 3], [1714, 0], [1714, 1], [1714, 2], [1714, 3], [1715, 0], [1715, 1], [1715, 2], [1715, 3], [1716, 0], [1716, 1], [1716, 2], [1716, 3], [1717, 0], [1717, 1], [1717, 2], [1717, 3], [1718, 0], [1718, 1], [1718, 2], [1718, 3], [1719, 0], [1719, 1], [1719, 2], [1719, 3], [1720, 0], [1720, 1], [1720, 2], [1720, 3], [1721, 0], [1721, 1], [1721, 2], [1721, 3], [1722, 0], [1722, 1], [1722, 2], [1722, 3], [1723, 0], [1723, 1], [1723, 2], [1723, 3], [1724, 0], [1724, 1], [1724, 2], [1724, 3], [1725, 0], [1725, 1], [1725, 2], [1725, 3], [1726, 0], [1726, 1], [1726, 2], [1726, 3], [1727, 0], [1727, 1], [1727, 2], [1727, 3], [1728, 0], [1728, 1], [1728, 2], [1728, 3], [1729, 0], [1729, 1], [1729, 2], [1729, 3], [1730, 0], [1730, 1], [1730, 2], [1730, 3], [1731, 0], [1731, 1], [1731, 2], [1731, 3], [1732, 0], [1732, 1], [1732, 2], [1732, 3], [1733, 0], [1733, 1], [1733, 2], [1733, 3], [1734, 0], [1734, 1], [1734, 2], [1734, 3], [1735, 0], [1735, 1], [1735, 2], [1735, 3], [1736, 0], [1736, 1], [1736, 2], [1736, 3], [1737, 0], [1737, 1], [1737, 2], [1737, 3], [1738, 0], [1738, 1], [1738, 2], [1738, 3], [1739, 0], [1739, 1], [1739, 2], [1739, 3], [1740, 0], [1740, 1], [1740, 2], [1740, 3], [1741, 0], [1741, 1], [1741, 2], [1741, 3], [1742, 0], [1742, 1], [1742, 2], [1742, 3], [1743, 0], [1743, 1], [1743, 2], [1743, 3], [1744, 0], [1744, 1], [1744, 2], [1744, 3], [1745, 0], [1745, 1], [1745, 2], [1745, 3], [1746, 0], [1746, 1], [1746, 2], [1746, 3], [1747, 0], [1747, 1], [1747, 2], [1747, 3], [1748, 0], [1748, 1], [1748, 2], [1748, 3], [1749, 0], [1749, 1], [1749, 2], [1749, 3], [1750, 0], [1750, 1], [1750, 2], [1750, 3], [1751, 0], [1751, 1], [1751, 2], [1751, 3], [1752, 0], [1752, 1], [1752, 2], [1752, 3], [1753, 0], [1753, 1], [1753, 2], [1753, 3], [1754, 0], [1754, 1], [1754, 2], [1754, 3], [1755, 0], [1755, 1], [1755, 2], [1755, 3], [1756, 0], [1756, 1], [1756, 2], [1756, 3], [1757, 0], [1757, 1], [1757, 2], [1757, 3], [1758, 0], [1758, 1], [1758, 2], [1758, 3], [1759, 0], [1759, 1], [1759, 2], [1759, 3], [1760, 0], [1760, 1], [1760, 2], [1760, 3], [1761, 0], [1761, 1], [1761, 2], [1761, 3], [1762, 0], [1762, 1], [1762, 2], [1762, 3], [1763, 0], [1763, 1], [1763, 2], [1763, 3], [1764, 0], [1764, 1], [1764, 2], [1764, 3], [1765, 0], [1765, 1], [1765, 2], [1765, 3], [1766, 0], [1766, 1], [1766, 2], [1766, 3], [1767, 0], [1767, 1], [1767, 2], [1767, 3], [1768, 0], [1768, 1], [1768, 2], [1768, 3], [1769, 0], [1769, 1], [1769, 2], [1769, 3], [1770, 0], [1770, 1], [1770, 2], [1770, 3], [1771, 0], [1771, 1], [1771, 2], [1771, 3], [1772, 0], [1772, 1], [1772, 2], [1772, 3], [1773, 0], [1773, 1], [1773, 2], [1773, 3], [1774, 0], [1774, 1], [1774, 2], [1774, 3], [1775, 0], [1775, 1], [1775, 2], [1775, 3], [1776, 0], [1776, 1], [1776, 2], [1776, 3], [1777, 0], [1777, 1], [1777, 2], [1777, 3], [1778, 0], [1778, 1], [1778, 2], [1778, 3], [1779, 0], [1779, 1], [1779, 2], [1779, 3], [1780, 0], [1780, 1], [1780, 2], [1780, 3], [1781, 0], [1781, 1], [1781, 2], [1781, 3], [1782, 0], [1782, 1], [1782, 2], [1782, 3], [1783, 0], [1783, 1], [1783, 2], [1783, 3], [1784, 0], [1784, 1], [1784, 2], [1784, 3], [1785, 0], [1785, 1], [1785, 2], [1785, 3], [1786, 0], [1786, 1], [1786, 2], [1786, 3], [1787, 0], [1787, 1], [1787, 2], [1787, 3], [1788, 0], [1788, 1], [1788, 2], [1788, 3], [1789, 0], [1789, 1], [1789, 2], [1789, 3], [1790, 0], [1790, 1], [1790, 2], [1790, 3], [1791, 0], [1791, 1], [1791, 2], [1791, 3], [1792, 0], [1792, 1], [1792, 2], [1792, 3], [1793, 0], [1793, 1], [1793, 2], [1793, 3], [1794, 0], [1794, 1], [1794, 2], [1794, 3], [1795, 0], [1795, 1], [1795, 2], [1795, 3], [1796, 0], [1796, 1], [1796, 2], [1796, 3], [1797, 0], [1797, 1], [1797, 2], [1797, 3], [1798, 0], [1798, 1], [1798, 2], [1798, 3], [1799, 0], [1799, 1], [1799, 2], [1799, 3], [1800, 0], [1800, 1], [1800, 2], [1800, 3], [1801, 0], [1801, 1], [1801, 2], [1801, 3], [1802, 0], [1802, 1], [1802, 2], [1802, 3], [1803, 0], [1803, 1], [1803, 2], [1803, 3], [1804, 0], [1804, 1], [1804, 2], [1804, 3], [1805, 0], [1805, 1], [1805, 2], [1805, 3], [1806, 0], [1806, 1], [1806, 2], [1806, 3], [1807, 0], [1807, 1], [1807, 2], [1807, 3], [1808, 0], [1808, 1], [1808, 2], [1808, 3], [1809, 0], [1809, 1], [1809, 2], [1809, 3], [1810, 0], [1810, 1], [1810, 2], [1810, 3], [1811, 0], [1811, 1], [1811, 2], [1811, 3], [1812, 0], [1812, 1], [1812, 2], [1812, 3], [1813, 0], [1813, 1], [1813, 2], [1813, 3], [1814, 0], [1814, 1], [1814, 2], [1814, 3], [1815, 0], [1815, 1], [1815, 2], [1815, 3], [1816, 0], [1816, 1], [1816, 2], [1816, 3], [1817, 0], [1817, 1], [1817, 2], [1817, 3], [1818, 0], [1818, 1], [1818, 2], [1818, 3], [1819, 0], [1819, 1], [1819, 2], [1819, 3], [1820, 0], [1820, 1], [1820, 2], [1820, 3], [1821, 0], [1821, 1], [1821, 2], [1821, 3], [1822, 0], [1822, 1], [1822, 2], [1822, 3], [1823, 0], [1823, 1], [1823, 2], [1823, 3], [1824, 0], [1824, 1], [1824, 2], [1824, 3], [1825, 0], [1825, 1], [1825, 2], [1825, 3], [1826, 0], [1826, 1], [1826, 2], [1826, 3], [1827, 0], [1827, 1], [1827, 2], [1827, 3], [1828, 0], [1828, 1], [1828, 2], [1828, 3], [1829, 0], [1829, 1], [1829, 2], [1829, 3], [1830, 0], [1830, 1], [1830, 2], [1830, 3], [1831, 0], [1831, 1], [1831, 2], [1831, 3], [1832, 0], [1832, 1], [1832, 2], [1832, 3], [1833, 0], [1833, 1], [1833, 2], [1833, 3], [1834, 0], [1834, 1], [1834, 2], [1834, 3], [1835, 0], [1835, 1], [1835, 2], [1835, 3], [1836, 0], [1836, 1], [1836, 2], [1836, 3], [1837, 0], [1837, 1], [1837, 2], [1837, 3], [1838, 0], [1838, 1], [1838, 2], [1838, 3], [1839, 0], [1839, 1], [1839, 2], [1839, 3], [1840, 0], [1840, 1], [1840, 2], [1840, 3], [1841, 0], [1841, 1], [1841, 2], [1841, 3], [1842, 0], [1842, 1], [1842, 2], [1842, 3], [1843, 0], [1843, 1], [1843, 2], [1843, 3], [1844, 0], [1844, 1], [1844, 2], [1844, 3], [1845, 0], [1845, 1], [1845, 2], [1845, 3], [1846, 0], [1846, 1], [1846, 2], [1846, 3], [1847, 0], [1847, 1], [1847, 2], [1847, 3], [1848, 0], [1848, 1], [1848, 2], [1848, 3], [1849, 0], [1849, 1], [1849, 2], [1849, 3], [1850, 0], [1850, 1], [1850, 2], [1850, 3], [1851, 0], [1851, 1], [1851, 2], [1851, 3], [1852, 0], [1852, 1], [1852, 2], [1852, 3], [1853, 0], [1853, 1], [1853, 2], [1853, 3], [1854, 0], [1854, 1], [1854, 2], [1854, 3], [1855, 0], [1855, 1], [1855, 2], [1855, 3], [1856, 0], [1856, 1], [1856, 2], [1856, 3], [1857, 0], [1857, 1], [1857, 2], [1857, 3], [1858, 0], [1858, 1], [1858, 2], [1858, 3], [1859, 0], [1859, 1], [1859, 2], [1859, 3], [1860, 0], [1860, 1], [1860, 2], [1860, 3], [1861, 0], [1861, 1], [1861, 2], [1861, 3], [1862, 0], [1862, 1], [1862, 2], [1862, 3], [1863, 0], [1863, 1], [1863, 2], [1863, 3], [1864, 0], [1864, 1], [1864, 2], [1864, 3], [1865, 0], [1865, 1], [1865, 2], [1865, 3], [1866, 0], [1866, 1], [1866, 2], [1866, 3], [1867, 0], [1867, 1], [1867, 2], [1867, 3], [1868, 0], [1868, 1], [1868, 2], [1868, 3], [1869, 0], [1869, 1], [1869, 2], [1869, 3], [1870, 0], [1870, 1], [1870, 2], [1870, 3], [1871, 0], [1871, 1], [1871, 2], [1871, 3], [1872, 0], [1872, 1], [1872, 2], [1872, 3], [1873, 0], [1873, 1], [1873, 2], [1873, 3], [1874, 0], [1874, 1], [1874, 2], [1874, 3], [1875, 0], [1875, 1], [1875, 2], [1875, 3], [1876, 0], [1876, 1], [1876, 2], [1876, 3], [1877, 0], [1877, 1], [1877, 2], [1877, 3], [1878, 0], [1878, 1], [1878, 2], [1878, 3], [1879, 0], [1879, 1], [1879, 2], [1879, 3], [1880, 0], [1880, 1], [1880, 2], [1880, 3], [1881, 0], [1881, 1], [1881, 2], [1881, 3], [1882, 0], [1882, 1], [1882, 2], [1882, 3], [1883, 0], [1883, 1], [1883, 2], [1883, 3], [1884, 0], [1884, 1], [1884, 2], [1884, 3], [1885, 0], [1885, 1], [1885, 2], [1885, 3], [1886, 0], [1886, 1], [1886, 2], [1886, 3], [1887, 0], [1887, 1], [1887, 2], [1887, 3], [1888, 0], [1888, 1], [1888, 2], [1888, 3], [1889, 0], [1889, 1], [1889, 2], [1889, 3], [1890, 0], [1890, 1], [1890, 2], [1890, 3], [1891, 0], [1891, 1], [1891, 2], [1891, 3], [1892, 0], [1892, 1], [1892, 2], [1892, 3], [1893, 0], [1893, 1], [1893, 2], [1893, 3], [1894, 0], [1894, 1], [1894, 2], [1894, 3], [1895, 0], [1895, 1], [1895, 2], [1895, 3], [1896, 0], [1896, 1], [1896, 2], [1896, 3], [1897, 0], [1897, 1], [1897, 2], [1897, 3], [1898, 0], [1898, 1], [1898, 2], [1898, 3], [1899, 0], [1899, 1], [1899, 2], [1899, 3], [1900, 0], [1900, 1], [1900, 2], [1900, 3], [1901, 0], [1901, 1], [1901, 2], [1901, 3], [1902, 0], [1902, 1], [1902, 2], [1902, 3], [1903, 0], [1903, 1], [1903, 2], [1903, 3], [1904, 0], [1904, 1], [1904, 2], [1904, 3], [1905, 0], [1905, 1], [1905, 2], [1905, 3], [1906, 0], [1906, 1], [1906, 2], [1906, 3], [1907, 0], [1907, 1], [1907, 2], [1907, 3], [1908, 0], [1908, 1], [1908, 2], [1908, 3], [1909, 0], [1909, 1], [1909, 2], [1909, 3], [1910, 0], [1910, 1], [1910, 2], [1910, 3], [1911, 0], [1911, 1], [1911, 2], [1911, 3], [1912, 0], [1912, 1], [1912, 2], [1912, 3], [1913, 0], [1913, 1], [1913, 2], [1913, 3], [1914, 0], [1914, 1], [1914, 2], [1914, 3], [1915, 0], [1915, 1], [1915, 2], [1915, 3], [1916, 0], [1916, 1], [1916, 2], [1916, 3], [1917, 0], [1917, 1], [1917, 2], [1917, 3], [1918, 0], [1918, 1], [1918, 2], [1918, 3], [1919, 0], [1919, 1], [1919, 2], [1919, 3], [1920, 0], [1920, 1], [1920, 2], [1920, 3], [1921, 0], [1921, 1], [1921, 2], [1921, 3], [1922, 0], [1922, 1], [1922, 2], [1922, 3], [1923, 0], [1923, 1], [1923, 2], [1923, 3], [1924, 0], [1924, 1], [1924, 2], [1924, 3], [1925, 0], [1925, 1], [1925, 2], [1925, 3], [1926, 0], [1926, 1], [1926, 2], [1926, 3], [1927, 0], [1927, 1], [1927, 2], [1927, 3], [1928, 0], [1928, 1], [1928, 2], [1928, 3], [1929, 0], [1929, 1], [1929, 2], [1929, 3], [1930, 0], [1930, 1], [1930, 2], [1930, 3], [1931, 0], [1931, 1], [1931, 2], [1931, 3], [1932, 0], [1932, 1], [1932, 2], [1932, 3], [1933, 0], [1933, 1], [1933, 2], [1933, 3], [1934, 0], [1934, 1], [1934, 2], [1934, 3], [1935, 0], [1935, 1], [1935, 2], [1935, 3], [1936, 0], [1936, 1], [1936, 2], [1936, 3], [1937, 0], [1937, 1], [1937, 2], [1937, 3], [1938, 0], [1938, 1], [1938, 2], [1938, 3], [1939, 0], [1939, 1], [1939, 2], [1939, 3], [1940, 0], [1940, 1], [1940, 2], [1940, 3], [1941, 0], [1941, 1], [1941, 2], [1941, 3], [1942, 0], [1942, 1], [1942, 2], [1942, 3], [1943, 0], [1943, 1], [1943, 2], [1943, 3], [1944, 0], [1944, 1], [1944, 2], [1944, 3], [1945, 0], [1945, 1], [1945, 2], [1945, 3], [1946, 0], [1946, 1], [1946, 2], [1946, 3], [1947, 0], [1947, 1], [1947, 2], [1947, 3], [1948, 0], [1948, 1], [1948, 2], [1948, 3], [1949, 0], [1949, 1], [1949, 2], [1949, 3], [1950, 0], [1950, 1], [1950, 2], [1950, 3], [1951, 0], [1951, 1], [1951, 2], [1951, 3], [1952, 0], [1952, 1], [1952, 2], [1952, 3], [1953, 0], [1953, 1], [1953, 2], [1953, 3], [1954, 0], [1954, 1], [1954, 2], [1954, 3], [1955, 0], [1955, 1], [1955, 2], [1955, 3], [1956, 0], [1956, 1], [1956, 2], [1956, 3], [1957, 0], [1957, 1], [1957, 2], [1957, 3], [1958, 0], [1958, 1], [1958, 2], [1958, 3], [1959, 0], [1959, 1], [1959, 2], [1959, 3], [1960, 0], [1960, 1], [1960, 2], [1960, 3], [1961, 0], [1961, 1], [1961, 2], [1961, 3], [1962, 0], [1962, 1], [1962, 2], [1962, 3], [1963, 0], [1963, 1], [1963, 2], [1963, 3], [1964, 0], [1964, 1], [1964, 2], [1964, 3], [1965, 0], [1965, 1], [1965, 2], [1965, 3], [1966, 0], [1966, 1], [1966, 2], [1966, 3], [1967, 0], [1967, 1], [1967, 2], [1967, 3], [1968, 0], [1968, 1], [1968, 2], [1968, 3], [1969, 0], [1969, 1], [1969, 2], [1969, 3], [1970, 0], [1970, 1], [1970, 2], [1970, 3], [1971, 0], [1971, 1], [1971, 2], [1971, 3], [1972, 0], [1972, 1], [1972, 2], [1972, 3], [1973, 0], [1973, 1], [1973, 2], [1973, 3], [1974, 0], [1974, 1], [1974, 2], [1974, 3], [1975, 0], [1975, 1], [1975, 2], [1975, 3], [1976, 0], [1976, 1], [1976, 2], [1976, 3], [1977, 0], [1977, 1], [1977, 2], [1977, 3], [1978, 0], [1978, 1], [1978, 2], [1978, 3], [1979, 0], [1979, 1], [1979, 2], [1979, 3], [1980, 0], [1980, 1], [1980, 2], [1980, 3], [1981, 0], [1981, 1], [1981, 2], [1981, 3], [1982, 0], [1982, 1], [1982, 2], [1982, 3], [1983, 0], [1983, 1], [1983, 2], [1983, 3], [1984, 0], [1984, 1], [1984, 2], [1984, 3], [1985, 0], [1985, 1], [1985, 2], [1985, 3], [1986, 0], [1986, 1], [1986, 2], [1986, 3], [1987, 0], [1987, 1], [1987, 2], [1987, 3], [1988, 0], [1988, 1], [1988, 2], [1988, 3], [1989, 0], [1989, 1], [1989, 2], [1989, 3], [1990, 0], [1990, 1], [1990, 2], [1990, 3], [1991, 0], [1991, 1], [1991, 2], [1991, 3], [1992, 0], [1992, 1], [1992, 2], [1992, 3], [1993, 0], [1993, 1], [1993, 2], [1993, 3], [1994, 0], [1994, 1], [1994, 2], [1994, 3], [1995, 0], [1995, 1], [1995, 2], [1995, 3], [1996, 0], [1996, 1], [1996, 2], [1996, 3], [1997, 0], [1997, 1], [1997, 2], [1997, 3], [1998, 0], [1998, 1], [1998, 2], [1998, 3], [1999, 0], [1999, 1], [1999, 2], [1999, 3], [2000, 0], [2000, 1], [2000, 2], [2000, 3], [2001, 0], [2001, 1], [2001, 2], [2001, 3], [2002, 0], [2002, 1], [2002, 2], [2002, 3], [2003, 0], [2003, 1], [2003, 2], [2003, 3], [2004, 0], [2004, 1], [2004, 2], [2004, 3], [2005, 0], [2005, 1], [2005, 2], [2005, 3], [2006, 0], [2006, 1], [2006, 2], [2006, 3], [2007, 0], [2007, 1], [2007, 2], [2007, 3], [2008, 0], [2008, 1], [2008, 2], [2008, 3], [2009, 0], [2009, 1], [2009, 2], [2009, 3], [2010, 0], [2010, 1], [2010, 2], [2010, 3], [2011, 0], [2011, 1], [2011, 2], [2011, 3], [2012, 0], [2012, 1], [2012, 2], [2012, 3], [2013, 0], [2013, 1], [2013, 2], [2013, 3], [2014, 0], [2014, 1], [2014, 2], [2014, 3], [2015, 0], [2015, 1], [2015, 2], [2015, 3], [2016, 0], [2016, 1], [2016, 2], [2016, 3], [2017, 0], [2017, 1], [2017, 2], [2017, 3], [2018, 0], [2018, 1], [2018, 2], [2018, 3], [2019, 0], [2019, 1], [2019, 2], [2019, 3], [2020, 0], [2020, 1], [2020, 2], [2020, 3], [2021, 0], [2021, 1], [2021, 2], [2021, 3], [2022, 0], [2022, 1], [2022, 2], [2022, 3], [2023, 0], [2023, 1], [2023, 2], [2023, 3], [2024, 0], [2024, 1], [2024, 2], [2024, 3], [2025, 0], [2025, 1], [2025, 2], [2025, 3], [2026, 0], [2026, 1], [2026, 2], [2026, 3], [2027, 0], [2027, 1], [2027, 2], [2027, 3], [2028, 0], [2028, 1], [2028, 2], [2028, 3], [2029, 0], [2029, 1], [2029, 2], [2029, 3], [2030, 0], [2030, 1], [2030, 2], [2030, 3], [2031, 0], [2031, 1], [2031, 2], [2031, 3], [2032, 0], [2032, 1], [2032, 2], [2032, 3], [2033, 0], [2033, 1], [2033, 2], [2033, 3], [2034, 0], [2034, 1], [2034, 2], [2034, 3], [2035, 0], [2035, 1], [2035, 2], [2035, 3], [2036, 0], [2036, 1], [2036, 2], [2036, 3], [2037, 0], [2037, 1], [2037, 2], [2037, 3], [2038, 0], [2038, 1], [2038, 2], [2038, 3], [2039, 0], [2039, 1], [2039, 2], [2039, 3], [2040, 0], [2040, 1], [2040, 2], [2040, 3], [2041, 0], [2041, 1], [2041, 2], [2041, 3], [2042, 0], [2042, 1], [2042, 2], [2042, 3], [2043, 0], [2043, 1], [2043, 2], [2043, 3], [2044, 0], [2044, 1], [2044, 2], [2044, 3], [2045, 0], [2045, 1], [2045, 2], [2045, 3], [2046, 0], [2046, 1], [2046, 2], [2046, 3], [2047, 0], [2047, 1], [2047, 2], [2047, 3], [416940273, 0], [416940273, 1], [416940273, 2], [416940273, 3], [416940529, 0], [416940529, 1], [416940529, 2], [416940529, 3], [416940785, 0], [416940785, 1], [416940785, 2], [416940785, 3], [416941041, 0], [416941041, 1], [416941041, 2], [416941041, 3], [416941297, 0], [416941297, 1], [416941297, 2], [416941297, 3], [416941553, 0], [416941553, 1], [416941553, 2], [416941553, 3], [416941809, 0], [416941809, 1], [416941809, 2], [416941809, 3], [416942065, 0], [416942065, 1], [416942065, 2], [416942065, 3], [416942321, 0], [416942321, 1], [416942321, 2], [416942321, 3], [416942577, 0], [416942577, 1], [416942577, 2], [416942577, 3], [416942833, 0], [416942833, 1], [416942833, 2], [416942833, 3], [416943089, 0], [416943089, 1], [416943089, 2], [416943089, 3], [416943345, 0], [416943345, 1], [416943345, 2], [416943345, 3], [416943601, 0], [416943601, 1], [416943601, 2], [416943601, 3], [416943857, 0], [416943857, 1], [416943857, 2], [416943857, 3], [416944113, 0], [416944113, 1], [416944113, 2], [416944113, 3], [416944369, 0], [416944369, 1], [416944369, 2], [416944369, 3], [416944625, 0], [416944625, 1], [416944625, 2], [416944625, 3], [416944881, 0], [416944881, 1], [416944881, 2], [416944881, 3], [416945137, 0], [416945137, 1], [416945137, 2], [416945137, 3], [416945393, 0], [416945393, 1], [416945393, 2], [416945393, 3], [416945649, 0], [416945649, 1], [416945649, 2], [416945649, 3], [416945905, 0], [416945905, 1], [416945905, 2], [416945905, 3], [416946161, 0], [416946161, 1], [416946161, 2], [416946161, 3], [416946417, 0], [416946417, 1], [416946417, 2], [416946417, 3], [416946673, 0], [416946673, 1], [416946673, 2], [416946673, 3], [416946929, 0], [416946929, 1], [416946929, 2], [416946929, 3], [416947185, 0], [416947185, 1], [416947185, 2], [416947185, 3], [416947441, 0], [416947441, 1], [416947441, 2], [416947441, 3], [416947697, 0], [416947697, 1], [416947697, 2], [416947697, 3], [416947953, 0], [416947953, 1], [416947953, 2], [416947953, 3], [416948209, 0], [416948209, 1], [416948209, 2], [416948209, 3], [416948465, 0], [416948465, 1], [416948465, 2], [416948465, 3], [416948721, 0], [416948721, 1], [416948721, 2], [416948721, 3], [416948977, 0], [416948977, 1], [416948977, 2], [416948977, 3], [416949233, 0], [416949233, 1], [416949233, 2], [416949233, 3], [416949489, 0], [416949489, 1], [416949489, 2], [416949489, 3], [416949745, 0], [416949745, 1], [416949745, 2], [416949745, 3], [416950001, 0], [416950001, 1], [416950001, 2], [416950001, 3], [416950257, 0], [416950257, 1], [416950257, 2], [416950257, 3], [416950513, 0], [416950513, 1], [416950513, 2], [416950513, 3], [416950769, 0], [416950769, 1], [416950769, 2], [416950769, 3], [416951025, 0], [416951025, 1], [416951025, 2], [416951025, 3], [416951281, 0], [416951281, 1], [416951281, 2], [416951281, 3], [416951537, 0], [416951537, 1], [416951537, 2], [416951537, 3], [416951793, 0], [416951793, 1], [416951793, 2], [416951793, 3], [416952049, 0], [416952049, 1], [416952049, 2], [416952049, 3], [416952305, 0], [416952305, 1], [416952305, 2], [416952305, 3], [416952561, 0], [416952561, 1], [416952561, 2], [416952561, 3], [416952817, 0], [416952817, 1], [416952817, 2], [416952817, 3], [416953073, 0], [416953073, 1], [416953073, 2], [416953073, 3], [416953329, 0], [416953329, 1], [416953329, 2], [416953329, 3], [416953585, 0], [416953585, 1], [416953585, 2], [416953585, 3], [416953841, 0], [416953841, 1], [416953841, 2], [416953841, 3], [416954097, 0], [416954097, 1], [416954097, 2], [416954097, 3], [416954353, 0], [416954353, 1], [416954353, 2], [416954353, 3], [416954609, 0], [416954609, 1], [416954609, 2], [416954609, 3], [416954865, 0], [416954865, 1], [416954865, 2], [416954865, 3], [416955121, 0], [416955121, 1], [416955121, 2], [416955121, 3], [416955377, 0], [416955377, 1], [416955377, 2], [416955377, 3], [416955633, 0], [416955633, 1], [416955633, 2], [416955633, 3], [416955889, 0], [416955889, 1], [416955889, 2], [416955889, 3], [416956145, 0], [416956145, 1], [416956145, 2], [416956145, 3], [416956401, 0], [416956401, 1], [416956401, 2], [416956401, 3], [416956657, 0], [416956657, 1], [416956657, 2], [416956657, 3], [416956913, 0], [416956913, 1], [416956913, 2], [416956913, 3], [416957169, 0], [416957169, 1], [416957169, 2], [416957169, 3], [416957425, 0], [416957425, 1], [416957425, 2], [416957425, 3], [416957681, 0], [416957681, 1], [416957681, 2], [416957681, 3], [416957937, 0], [416957937, 1], [416957937, 2], [416957937, 3], [416958193, 0], [416958193, 1], [416958193, 2], [416958193, 3], [416958449, 0], [416958449, 1], [416958449, 2], [416958449, 3], [416958705, 0], [416958705, 1], [416958705, 2], [416958705, 3], [416958961, 0], [416958961, 1], [416958961, 2], [416958961, 3], [416959217, 0], [416959217, 1], [416959217, 2], [416959217, 3], [416959473, 0], [416959473, 1], [416959473, 2], [416959473, 3], [416959729, 0], [416959729, 1], [416959729, 2], [416959729, 3], [416959985, 0], [416959985, 1], [416959985, 2], [416959985, 3], [416960241, 0], [416960241, 1], [416960241, 2], [416960241, 3], [416960497, 0], [416960497, 1], [416960497, 2], [416960497, 3], [416960753, 0], [416960753, 1], [416960753, 2], [416960753, 3], [416961009, 0], [416961009, 1], [416961009, 2], [416961009, 3], [416961265, 0], [416961265, 1], [416961265, 2], [416961265, 3], [416961521, 0], [416961521, 1], [416961521, 2], [416961521, 3], [416961777, 0], [416961777, 1], [416961777, 2], [416961777, 3], [416962033, 0], [416962033, 1], [416962033, 2], [416962033, 3], [416962289, 0], [416962289, 1], [416962289, 2], [416962289, 3], [416962545, 0], [416962545, 1], [416962545, 2], [416962545, 3], [416962801, 0], [416962801, 1], [416962801, 2], [416962801, 3], [416963057, 0], [416963057, 1], [416963057, 2], [416963057, 3], [416963313, 0], [416963313, 1], [416963313, 2], [416963313, 3], [416963569, 0], [416963569, 1], [416963569, 2], [416963569, 3], [416963825, 0], [416963825, 1], [416963825, 2], [416963825, 3], [416964081, 0], [416964081, 1], [416964081, 2], [416964081, 3], [416964337, 0], [416964337, 1], [416964337, 2], [416964337, 3], [416964593, 0], [416964593, 1], [416964593, 2], [416964593, 3], [416964849, 0], [416964849, 1], [416964849, 2], [416964849, 3], [416965105, 0], [416965105, 1], [416965105, 2], [416965105, 3], [416965361, 0], [416965361, 1], [416965361, 2], [416965361, 3], [416965617, 0], [416965617, 1], [416965617, 2], [416965617, 3], [416965873, 0], [416965873, 1], [416965873, 2], [416965873, 3], [416966129, 0], [416966129, 1], [416966129, 2], [416966129, 3], [416966385, 0], [416966385, 1], [416966385, 2], [416966385, 3], [416966641, 0], [416966641, 1], [416966641, 2], [416966641, 3], [416966897, 0], [416966897, 1], [416966897, 2], [416966897, 3], [416967153, 0], [416967153, 1], [416967153, 2], [416967153, 3], [416967409, 0], [416967409, 1], [416967409, 2], [416967409, 3], [416967665, 0], [416967665, 1], [416967665, 2], [416967665, 3], [416967921, 0], [416967921, 1], [416967921, 2], [416967921, 3], [416968177, 0], [416968177, 1], [416968177, 2], [416968177, 3], [416968433, 0], [416968433, 1], [416968433, 2], [416968433, 3], [416968689, 0], [416968689, 1], [416968689, 2], [416968689, 3], [416968945, 0], [416968945, 1], [416968945, 2], [416968945, 3], [416969201, 0], [416969201, 1], [416969201, 2], [416969201, 3], [416969457, 0], [416969457, 1], [416969457, 2], [416969457, 3], [416969713, 0], [416969713, 1], [416969713, 2], [416969713, 3], [416969969, 0], [416969969, 1], [416969969, 2], [416969969, 3], [416970225, 0], [416970225, 1], [416970225, 2], [416970225, 3], [416970481, 0], [416970481, 1], [416970481, 2], [416970481, 3], [416970737, 0], [416970737, 1], [416970737, 2], [416970737, 3], [416970993, 0], [416970993, 1], [416970993, 2], [416970993, 3], [416971249, 0], [416971249, 1], [416971249, 2], [416971249, 3], [416971505, 0], [416971505, 1], [416971505, 2], [416971505, 3], [416971761, 0], [416971761, 1], [416971761, 2], [416971761, 3], [416972017, 0], [416972017, 1], [416972017, 2], [416972017, 3], [416972273, 0], [416972273, 1], [416972273, 2], [416972273, 3], [416972529, 0], [416972529, 1], [416972529, 2], [416972529, 3], [416972785, 0], [416972785, 1], [416972785, 2], [416972785, 3], [416973041, 0], [416973041, 1], [416973041, 2], [416973041, 3], [416973297, 0], [416973297, 1], [416973297, 2], [416973297, 3], [416973553, 0], [416973553, 1], [416973553, 2], [416973553, 3], [416973809, 0], [416973809, 1], [416973809, 2], [416973809, 3], [416974065, 0], [416974065, 1], [416974065, 2], [416974065, 3], [416974321, 0], [416974321, 1], [416974321, 2], [416974321, 3], [416974577, 0], [416974577, 1], [416974577, 2], [416974577, 3], [416974833, 0], [416974833, 1], [416974833, 2], [416974833, 3], [416975089, 0], [416975089, 1], [416975089, 2], [416975089, 3], [416975345, 0], [416975345, 1], [416975345, 2], [416975345, 3], [416975601, 0], [416975601, 1], [416975601, 2], [416975601, 3], [416975857, 0], [416975857, 1], [416975857, 2], [416975857, 3], [416976113, 0], [416976113, 1], [416976113, 2], [416976113, 3], [416976369, 0], [416976369, 1], [416976369, 2], [416976369, 3], [416976625, 0], [416976625, 1], [416976625, 2], [416976625, 3], [416976881, 0], [416976881, 1], [416976881, 2], [416976881, 3], [416977137, 0], [416977137, 1], [416977137, 2], [416977137, 3], [416977393, 0], [416977393, 1], [416977393, 2], [416977393, 3], [416977649, 0], [416977649, 1], [416977649, 2], [416977649, 3], [416977905, 0], [416977905, 1], [416977905, 2], [416977905, 3], [416978161, 0], [416978161, 1], [416978161, 2], [416978161, 3], [416978417, 0], [416978417, 1], [416978417, 2], [416978417, 3], [416978673, 0], [416978673, 1], [416978673, 2], [416978673, 3], [416978929, 0], [416978929, 1], [416978929, 2], [416978929, 3], [416979185, 0], [416979185, 1], [416979185, 2], [416979185, 3], [416979441, 0], [416979441, 1], [416979441, 2], [416979441, 3], [416979697, 0], [416979697, 1], [416979697, 2], [416979697, 3], [416979953, 0], [416979953, 1], [416979953, 2], [416979953, 3], [416980209, 0], [416980209, 1], [416980209, 2], [416980209, 3], [416980465, 0], [416980465, 1], [416980465, 2], [416980465, 3], [416980721, 0], [416980721, 1], [416980721, 2], [416980721, 3], [416980977, 0], [416980977, 1], [416980977, 2], [416980977, 3], [416981233, 0], [416981233, 1], [416981233, 2], [416981233, 3], [416981489, 0], [416981489, 1], [416981489, 2], [416981489, 3], [416981745, 0], [416981745, 1], [416981745, 2], [416981745, 3], [416982001, 0], [416982001, 1], [416982001, 2], [416982001, 3], [416982257, 0], [416982257, 1], [416982257, 2], [416982257, 3], [416982513, 0], [416982513, 1], [416982513, 2], [416982513, 3], [416982769, 0], [416982769, 1], [416982769, 2], [416982769, 3], [416983025, 0], [416983025, 1], [416983025, 2], [416983025, 3], [416983281, 0], [416983281, 1], [416983281, 2], [416983281, 3], [416983537, 0], [416983537, 1], [416983537, 2], [416983537, 3], [416983793, 0], [416983793, 1], [416983793, 2], [416983793, 3], [416984049, 0], [416984049, 1], [416984049, 2], [416984049, 3], [416984305, 0], [416984305, 1], [416984305, 2], [416984305, 3], [416984561, 0], [416984561, 1], [416984561, 2], [416984561, 3], [416984817, 0], [416984817, 1], [416984817, 2], [416984817, 3], [416985073, 0], [416985073, 1], [416985073, 2], [416985073, 3], [416985329, 0], [416985329, 1], [416985329, 2], [416985329, 3], [416985585, 0], [416985585, 1], [416985585, 2], [416985585, 3], [416985841, 0], [416985841, 1], [416985841, 2], [416985841, 3], [416986097, 0], [416986097, 1], [416986097, 2], [416986097, 3], [416986353, 0], [416986353, 1], [416986353, 2], [416986353, 3], [416986609, 0], [416986609, 1], [416986609, 2], [416986609, 3], [416986865, 0], [416986865, 1], [416986865, 2], [416986865, 3], [416987121, 0], [416987121, 1], [416987121, 2], [416987121, 3], [416987377, 0], [416987377, 1], [416987377, 2], [416987377, 3], [416987633, 0], [416987633, 1], [416987633, 2], [416987633, 3], [416987889, 0], [416987889, 1], [416987889, 2], [416987889, 3], [416988145, 0], [416988145, 1], [416988145, 2], [416988145, 3], [416988401, 0], [416988401, 1], [416988401, 2], [416988401, 3], [416988657, 0], [416988657, 1], [416988657, 2], [416988657, 3], [416988913, 0], [416988913, 1], [416988913, 2], [416988913, 3], [416989169, 0], [416989169, 1], [416989169, 2], [416989169, 3], [416989425, 0], [416989425, 1], [416989425, 2], [416989425, 3], [416989681, 0], [416989681, 1], [416989681, 2], [416989681, 3], [416989937, 0], [416989937, 1], [416989937, 2], [416989937, 3], [416990193, 0], [416990193, 1], [416990193, 2], [416990193, 3], [416990449, 0], [416990449, 1], [416990449, 2], [416990449, 3], [416990705, 0], [416990705, 1], [416990705, 2], [416990705, 3], [416990961, 0], [416990961, 1], [416990961, 2], [416990961, 3], [416991217, 0], [416991217, 1], [416991217, 2], [416991217, 3], [416991473, 0], [416991473, 1], [416991473, 2], [416991473, 3], [416991729, 0], [416991729, 1], [416991729, 2], [416991729, 3], [416991985, 0], [416991985, 1], [416991985, 2], [416991985, 3], [416992241, 0], [416992241, 1], [416992241, 2], [416992241, 3], [416992497, 0], [416992497, 1], [416992497, 2], [416992497, 3], [416992753, 0], [416992753, 1], [416992753, 2], [416992753, 3], [416993009, 0], [416993009, 1], [416993009, 2], [416993009, 3], [416993265, 0], [416993265, 1], [416993265, 2], [416993265, 3], [416993521, 0], [416993521, 1], [416993521, 2], [416993521, 3], [416993777, 0], [416993777, 1], [416993777, 2], [416993777, 3], [416994033, 0], [416994033, 1], [416994033, 2], [416994033, 3], [416994289, 0], [416994289, 1], [416994289, 2], [416994289, 3], [416994545, 0], [416994545, 1], [416994545, 2], [416994545, 3], [416994801, 0], [416994801, 1], [416994801, 2], [416994801, 3], [416995057, 0], [416995057, 1], [416995057, 2], [416995057, 3], [416995313, 0], [416995313, 1], [416995313, 2], [416995313, 3], [416995569, 0], [416995569, 1], [416995569, 2], [416995569, 3], [416995825, 0], [416995825, 1], [416995825, 2], [416995825, 3], [416996081, 0], [416996081, 1], [416996081, 2], [416996081, 3], [416996337, 0], [416996337, 1], [416996337, 2], [416996337, 3], [416996593, 0], [416996593, 1], [416996593, 2], [416996593, 3], [416996849, 0], [416996849, 1], [416996849, 2], [416996849, 3], [416997105, 0], [416997105, 1], [416997105, 2], [416997105, 3], [416997361, 0], [416997361, 1], [416997361, 2], [416997361, 3], [416997617, 0], [416997617, 1], [416997617, 2], [416997617, 3], [416997873, 0], [416997873, 1], [416997873, 2], [416997873, 3], [416998129, 0], [416998129, 1], [416998129, 2], [416998129, 3], [416998385, 0], [416998385, 1], [416998385, 2], [416998385, 3], [416998641, 0], [416998641, 1], [416998641, 2], [416998641, 3], [416998897, 0], [416998897, 1], [416998897, 2], [416998897, 3], [416999153, 0], [416999153, 1], [416999153, 2], [416999153, 3], [416999409, 0], [416999409, 1], [416999409, 2], [416999409, 3], [416999665, 0], [416999665, 1], [416999665, 2], [416999665, 3], [416999921, 0], [416999921, 1], [416999921, 2], [416999921, 3], [417000177, 0], [417000177, 1], [417000177, 2], [417000177, 3], [417000433, 0], [417000433, 1], [417000433, 2], [417000433, 3], [417000689, 0], [417000689, 1], [417000689, 2], [417000689, 3], [417000945, 0], [417000945, 1], [417000945, 2], [417000945, 3], [417001201, 0], [417001201, 1], [417001201, 2], [417001201, 3], [417001457, 0], [417001457, 1], [417001457, 2], [417001457, 3], [417001713, 0], [417001713, 1], [417001713, 2], [417001713, 3], [417001969, 0], [417001969, 1], [417001969, 2], [417001969, 3], [417002225, 0], [417002225, 1], [417002225, 2], [417002225, 3], [417002481, 0], [417002481, 1], [417002481, 2], [417002481, 3], [417002737, 0], [417002737, 1], [417002737, 2], [417002737, 3], [417002993, 0], [417002993, 1], [417002993, 2], [417002993, 3], [417003249, 0], [417003249, 1], [417003249, 2], [417003249, 3], [417003505, 0], [417003505, 1], [417003505, 2], [417003505, 3], [417003761, 0], [417003761, 1], [417003761, 2], [417003761, 3], [417004017, 0], [417004017, 1], [417004017, 2], [417004017, 3], [417004273, 0], [417004273, 1], [417004273, 2], [417004273, 3], [417004529, 0], [417004529, 1], [417004529, 2], [417004529, 3], [417004785, 0], [417004785, 1], [417004785, 2], [417004785, 3], [417005041, 0], [417005041, 1], [417005041, 2], [417005041, 3], [417005297, 0], [417005297, 1], [417005297, 2], [417005297, 3], [417005553, 0], [417005553, 1], [417005553, 2], [417005553, 3], [417018865, 0], [417018865, 1], [417018865, 2], [417018865, 3]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_tx_hook()[source]
test_tx_hook_on_wrong_safety_mode()[source]

panda.tests.safety.test_ford module

class panda.tests.safety.test_ford.Buttons[source]

Bases: object

CANCEL = 0
RESUME = 1
TJA_TOGGLE = 2
class panda.tests.safety.test_ford.TestFordCANFDLongitudinalSafety(methodName='runTest')[source]

Bases: TestFordLongitudinalSafetyBase

STEER_MESSAGE = 982
TX_MSGS: list[list[int]] | None = [[131, 0], [131, 2], [390, 0], [394, 0], [970, 0], [982, 0], [984, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_ford.TestFordCANFDStockSafety(methodName='runTest')[source]

Bases: TestFordSafetyBase

STEER_MESSAGE = 982
TX_MSGS: list[list[int]] | None = [[131, 0], [131, 2], [394, 0], [970, 0], [982, 0], [984, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_ford.TestFordLongitudinalSafety(methodName='runTest')[source]

Bases: TestFordLongitudinalSafetyBase

STEER_MESSAGE = 979
TX_MSGS: list[list[int]] | None = [[131, 0], [131, 2], [390, 0], [394, 0], [970, 0], [979, 0], [984, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_ford.TestFordLongitudinalSafetyBase(methodName='runTest')[source]

Bases: TestFordSafetyBase

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [390, 394, 970, 979, 982, 984]}
INACTIVE_ACCEL = 0.0
INACTIVE_GAS = -5.0
MAX_ACCEL = 2.0
MAX_GAS = 2.0
MIN_ACCEL = -3.5
MIN_GAS = -0.5
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (390, 394, 970, 979, 982, 984)}
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_brake_safety_check()[source]
test_gas_safety_check()[source]
test_stock_aeb()[source]
class panda.tests.safety.test_ford.TestFordSafetyBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest

ANGLE_RATE_BP = [5.0, 25.0, 25.0]
ANGLE_RATE_DOWN = [0.000225, 0.00015, 0.00015]
ANGLE_RATE_UP = [0.0002, 0.0001, 0.0001]
CURVATURE_ERROR_MIN_SPEED = 10.0
DEG_TO_CAN = 50000
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [394, 970, 979, 982, 984]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
MAX_CURVATURE = 0.02
MAX_CURVATURE_ERROR = 0.002
MAX_SPEED_DELTA = 2.0
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (394, 970, 979, 982, 984)}
STANDSTILL_THRESHOLD: float | None = 1
STEER_MESSAGE = 0
cnt_speed = 0
cnt_speed_2 = 0
cnt_yaw_rate = 0
packer: CANPackerPanda
safety: Panda
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_acc_buttons()[source]
test_angle_measurements()[source]

Tests rx hook correctly parses the curvature measurement from the vehicle speed and yaw rate

test_curvature_rate_limit_down()[source]
test_curvature_rate_limit_up()[source]

When the curvature error is exceeded, commanded curvature must start moving towards meas respecting rate limits. Since panda allows higher rate limits to avoid false positives, we need to allow a lower rate to move towards meas.

test_prevent_lkas_action()[source]
test_rx_hook()[source]
test_rx_hook_speed_mismatch()[source]
test_steer_allowed()[source]
class panda.tests.safety.test_ford.TestFordStockSafety(methodName='runTest')[source]

Bases: TestFordSafetyBase

STEER_MESSAGE = 979
TX_MSGS: list[list[int]] | None = [[131, 0], [131, 2], [394, 0], [970, 0], [979, 0], [984, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_ford.checksum(msg)[source]

panda.tests.safety.test_gm module

class panda.tests.safety.test_gm.Buttons[source]

Bases: object

CANCEL = 6
DECEL_SET = 3
RES_ACCEL = 2
UNPRESS = 1
class panda.tests.safety.test_gm.GmLongitudinalBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest, LongitudinalGasBrakeSafetyTest

MAX_BRAKE: int | None = 400
MAX_POSSIBLE_BRAKE: int | None = 4096
MAX_POSSIBLE_GAS: int | None = 4096
PCM_CRUISE = False
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (384, 715)}
test_cancel_button()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_enable_control_allowed_from_cruise()[source]
test_set_resume_buttons()[source]

SET and RESUME enter controls allowed on their falling and rising edges, respectively.

class panda.tests.safety.test_gm.TestGmAscmSafety(methodName='runTest')[source]

Bases: GmLongitudinalBase, TestGmSafetyBase

BRAKE_BUS = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {}
FWD_BUS_LOOKUP: dict[int, int] = {}
INACTIVE_GAS = 1404
MAX_GAS: int | None = 3072
MIN_GAS: int = 1404
TX_MSGS: list[list[int]] | None = [[384, 0], [1033, 0], [1034, 0], [715, 0], [880, 0], [161, 1], [774, 1], [776, 1], [784, 1], [789, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_gm.TestGmCameraLongitudinalSafety(methodName='runTest')[source]

Bases: GmLongitudinalBase, TestGmCameraSafetyBase

BUTTONS_BUS = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {0: [388], 2: [384, 715, 880, 789]}
INACTIVE_GAS = 1554
MAX_GAS: int | None = 3400
MIN_GAS: int = 1514
TX_MSGS: list[list[int]] | None = [[384, 0], [789, 0], [715, 0], [880, 0], [388, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_gm.TestGmCameraSafety(methodName='runTest')[source]

Bases: TestGmCameraSafetyBase

BUTTONS_BUS = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {0: [388], 2: [384]}
TX_MSGS: list[list[int]] | None = [[384, 0], [388, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_buttons()[source]
class panda.tests.safety.test_gm.TestGmCameraSafetyBase(methodName='runTest')[source]

Bases: TestGmSafetyBase

FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

class panda.tests.safety.test_gm.TestGmSafetyBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest, DriverTorqueSteeringSafetyTest

BRAKE_BUS = 0
BUTTONS_BUS = 0
DRIVER_TORQUE_ALLOWANCE = 65
DRIVER_TORQUE_FACTOR = 4
MAX_RATE_DOWN = 15
MAX_RATE_UP = 10
MAX_RT_DELTA = 128
MAX_TORQUE = 300
PCM_CRUISE = True
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (384,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0.311
setUp()[source]

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

panda.tests.safety.test_honda module

class panda.tests.safety.test_honda.Btn[source]

Bases: object

CANCEL = 2
MAIN = 1
NONE = 0
RESUME = 4
SET = 3
class panda.tests.safety.test_honda.HondaBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest

BUTTONS_BUS: int | None = None
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
MAX_BRAKE = 255
PT_BUS: int | None = None
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (228, 404)}
STANDSTILL_THRESHOLD: float | None = 0
STEER_BUS: int | None = None
cnt_acc_state = 0
cnt_brake = 0
cnt_button = 0
cnt_powertrain_data = 0
cnt_speed = 0
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_disengage_on_brake()[source]
test_steer_safety_check()[source]
class panda.tests.safety.test_honda.HondaButtonEnableBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest

test_buttons_with_main_off()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_disengage_on_main()[source]
test_enable_control_allowed_from_cruise()[source]
test_main_cancel_buttons()[source]

Both MAIN and CANCEL should exit controls immediately.

test_rx_hook()[source]
test_set_resume_buttons()[source]

Both SET and RES should enter controls allowed on their falling edge.

class panda.tests.safety.test_honda.HondaPcmEnableBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest

test_buttons()[source]

Buttons should only cancel in this configuration, since our state is tied to the PCM’s cruise state.

class panda.tests.safety.test_honda.TestHondaBoschAltBrakeSafety(methodName='runTest')[source]

Bases: HondaPcmEnableBase, TestHondaBoschAltBrakeSafetyBase

Covers the Honda Bosch safety mode with stock longitudinal and an alternate brake message

class panda.tests.safety.test_honda.TestHondaBoschAltBrakeSafetyBase(methodName='runTest')[source]

Bases: TestHondaBoschSafetyBase

Base Bosch safety test class with an alternate brake message

setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_alt_brake_rx_hook()[source]
class panda.tests.safety.test_honda.TestHondaBoschLongSafety(methodName='runTest')[source]

Bases: HondaButtonEnableBase, TestHondaBoschSafetyBase

Covers the Honda Bosch safety mode with longitudinal control

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [228, 229, 829, 13274, 13275]}
MAX_ACCEL = 2.0
MAX_GAS = 2000
MIN_ACCEL = -3.5
NO_GAS = -30000
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (228, 404), 1: (479,)}
STEER_BUS: int | None = 1
TX_MSGS: list[list[int]] | None = [[228, 1], [479, 1], [495, 1], [506, 1], [780, 1], [829, 1], [13274, 1], [13275, 1], [927, 1], [416985329, 1]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_brake_safety_check()[source]
test_diagnostics()[source]
test_gas_safety_check()[source]
test_spam_cancel_safety_check()[source]
class panda.tests.safety.test_honda.TestHondaBoschRadarlessAltBrakeSafety(methodName='runTest')[source]

Bases: HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase, TestHondaBoschAltBrakeSafetyBase

Covers the Honda Bosch Radarless safety mode with stock longitudinal and an alternate brake message

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_honda.TestHondaBoschRadarlessLongSafety(methodName='runTest')[source]

Bases: LongitudinalAccelSafetyTest, HondaButtonEnableBase, TestHondaBoschRadarlessSafetyBase

Covers the Honda Bosch Radarless safety mode with longitudinal control

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [228, 229, 829, 13274, 13275, 456, 780]}
TX_MSGS: list[list[int]] | None = [[228, 0], [829, 0], [456, 0], [780, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_spam_cancel_safety_check()[source]
class panda.tests.safety.test_honda.TestHondaBoschRadarlessSafety(methodName='runTest')[source]

Bases: HondaPcmEnableBase, TestHondaBoschRadarlessSafetyBase

Covers the Honda Bosch Radarless safety mode with stock longitudinal

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_honda.TestHondaBoschRadarlessSafetyBase(methodName='runTest')[source]

Bases: TestHondaBoschSafetyBase

Base class for radarless Honda Bosch

BUTTONS_BUS: int | None = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [228, 229, 829, 13274, 13275]}
PT_BUS: int | None = 0
STEER_BUS: int | None = 0
TX_MSGS: list[list[int]] | None = [[228, 0], [662, 2], [829, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_honda.TestHondaBoschSafety(methodName='runTest')[source]

Bases: HondaPcmEnableBase, TestHondaBoschSafetyBase

Covers the Honda Bosch safety mode with stock longitudinal

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_honda.TestHondaBoschSafetyBase(methodName='runTest')[source]

Bases: HondaBase

BUTTONS_BUS: int | None = 1
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [228, 229, 829, 13274, 13275]}
PT_BUS: int | None = 1
STEER_BUS: int | None = 0
TX_MSGS: list[list[int]] | None = [[228, 0], [229, 0], [662, 1], [829, 0], [13274, 0], [13275, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_alt_disengage_on_brake()[source]
test_spam_cancel_safety_check()[source]
class panda.tests.safety.test_honda.TestHondaNidecPcmAltSafety(methodName='runTest')[source]

Bases: TestHondaNidecPcmSafety

Covers the Honda Nidec safety mode with alt SCM messages

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_honda.TestHondaNidecPcmSafety(methodName='runTest')[source]

Bases: HondaPcmEnableBase, TestHondaNidecSafetyBase

Covers the Honda Nidec safety mode

test_disable_control_allowed_from_cruise()[source]
class panda.tests.safety.test_honda.TestHondaNidecSafetyBase(methodName='runTest')[source]

Bases: HondaBase

BUTTONS_BUS: int | None = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [228, 404, 829, 780]}
MAX_GAS = 198
PT_BUS: int | None = 0
STEER_BUS: int | None = 0
TX_MSGS: list[list[int]] | None = [[228, 0], [404, 0], [506, 0], [780, 0], [829, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_acc_hud_safety_check()[source]
test_brake_safety_check()[source]
test_fwd_hook()[source]
test_honda_fwd_brake_latching()[source]

panda.tests.safety.test_hyundai module

class panda.tests.safety.test_hyundai.TestHyundaiLegacySafety(methodName='runTest')[source]

Bases: TestHyundaiSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai.TestHyundaiLegacySafetyEV(methodName='runTest')[source]

Bases: TestHyundaiSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai.TestHyundaiLegacySafetyHEV(methodName='runTest')[source]

Bases: TestHyundaiSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai.TestHyundaiLongitudinalSafety(methodName='runTest')[source]

Bases: HyundaiLongitudinalBase, TestHyundaiSafety

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (1057, 0)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (2000, 0)
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (832, 1057)}
TX_MSGS: list[list[int]] | None = [[832, 0], [1265, 0], [1157, 0], [1056, 0], [1057, 0], [1290, 0], [905, 0], [1186, 0], [909, 0], [1155, 0], [2000, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_no_aeb_fca11()[source]
test_no_aeb_scc12()[source]
class panda.tests.safety.test_hyundai.TestHyundaiSafety(methodName='runTest')[source]

Bases: HyundaiButtonBase, PandaCarSafetyTest, DriverTorqueSteeringSafetyTest, SteerRequestCutSafetyTest

DRIVER_TORQUE_ALLOWANCE = 50
DRIVER_TORQUE_FACTOR = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [832, 1157]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
MAX_INVALID_STEERING_FRAMES: int = 2
MAX_RATE_DOWN = 7
MAX_RATE_UP = 3
MAX_RT_DELTA = 112
MAX_TORQUE = 384
MIN_VALID_STEERING_FRAMES: int = 89
MIN_VALID_STEERING_RT_INTERVAL: int = 810000
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (832,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 12
TX_MSGS: list[list[int]] | None = [[832, 0], [1265, 0], [1157, 0]]
cnt_brake = 0
cnt_button = 0
cnt_cruise = 0
cnt_gas = 0
cnt_speed = 0
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai.TestHyundaiSafetyAltLimits(methodName='runTest')[source]

Bases: TestHyundaiSafety

MAX_RATE_DOWN = 3
MAX_RATE_UP = 2
MAX_TORQUE = 270
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai.TestHyundaiSafetyCameraSCC(methodName='runTest')[source]

Bases: TestHyundaiSafety

BUTTONS_TX_BUS = 2
SCC_BUS = 2
setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_hyundai.checksum(msg)[source]

panda.tests.safety.test_hyundai_canfd module

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdBase(methodName='runTest')[source]

Bases: HyundaiButtonBase, PandaCarSafetyTest, DriverTorqueSteeringSafetyTest, SteerRequestCutSafetyTest

BUTTONS_TX_BUS = 1
DRIVER_TORQUE_ALLOWANCE = 250
DRIVER_TORQUE_FACTOR = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [80, 676]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
GAS_MSG = ('', '')
MAX_INVALID_STEERING_FRAMES: int = 2
MAX_RATE_DOWN = 3
MAX_RATE_UP = 2
MAX_RT_DELTA = 112
MAX_TORQUE = 270
MIN_VALID_STEERING_FRAMES: int = 89
MIN_VALID_STEERING_RT_INTERVAL: int = 810000
PT_BUS = 0
RT_INTERVAL = 250000
SCC_BUS = 2
STANDSTILL_THRESHOLD: float | None = 12
STEER_BUS = 0
STEER_MSG = ''
TX_MSGS: list[list[int]] | None = [[80, 0], [463, 1], [676, 0]]
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1(methodName='runTest')[source]

Bases: TestHyundaiCanfdHDA1Base

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons(methodName='runTest')[source]

Bases: TestHyundaiCanfdHDA1Base

SAFETY_PARAM: int
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_0(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR_BRAKE_ALT', 'ACCELERATOR_PEDAL_PRESSED')
SAFETY_PARAM: int = 4
SCC_BUS = 0
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_1(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 5
SCC_BUS = 0
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_2(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR_ALT', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 6
SCC_BUS = 0
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_3(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR_BRAKE_ALT', 'ACCELERATOR_PEDAL_PRESSED')
SAFETY_PARAM: int = 8
SCC_BUS = 2
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_4(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 9
SCC_BUS = 2
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1AltButtons_5(methodName='runTest')

Bases: TestHyundaiCanfdHDA1AltButtons

GAS_MSG = ('ACCELERATOR_ALT', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 10
SCC_BUS = 2
setUp()

Hook method for setting up the test fixture before exercising it.

test_button_sends()

No button send allowed with alt buttons.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1Base(methodName='runTest')[source]

Bases: TestHyundaiCanfdBase

BUTTONS_TX_BUS = 2
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [298, 480]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (298,)}
SAFETY_PARAM: int
STEER_MSG = 'LFA'
TX_MSGS: list[list[int]] | None = [[298, 0], [416, 1], [463, 0], [480, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1Long(methodName='runTest')[source]

Bases: HyundaiLongitudinalBase, TestHyundaiCanfdHDA1Base

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (416, 0)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (1840, 1)
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [298, 480, 416]}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (298, 416)}
SCC_BUS = 2
STEER_BUS = 0
STEER_MSG = 'LFA'
setUp()[source]

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1Long_0(methodName='runTest')

Bases: TestHyundaiCanfdHDA1Long

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (416, 0)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (1840, 1)
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [298, 480, 416]}
GAS_MSG = ('ACCELERATOR_BRAKE_ALT', 'ACCELERATOR_PEDAL_PRESSED')
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (298, 416)}
SAFETY_PARAM: int = 4
SCC_BUS = 2
STEER_BUS = 0
STEER_MSG = 'LFA'
setUp()

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()

Hook method for setting up class fixture before running tests in the class.

test_tester_present_allowed()

Ensure tester present diagnostic message is allowed to keep ECU knocked out for longitudinal control.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1Long_1(methodName='runTest')

Bases: TestHyundaiCanfdHDA1Long

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (416, 0)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (1840, 1)
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [298, 480, 416]}
GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (298, 416)}
SAFETY_PARAM: int = 5
SCC_BUS = 2
STEER_BUS = 0
STEER_MSG = 'LFA'
setUp()

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()

Hook method for setting up class fixture before running tests in the class.

test_tester_present_allowed()

Ensure tester present diagnostic message is allowed to keep ECU knocked out for longitudinal control.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1Long_2(methodName='runTest')

Bases: TestHyundaiCanfdHDA1Long

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (416, 0)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (1840, 1)
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [298, 480, 416]}
GAS_MSG = ('ACCELERATOR_ALT', 'ACCELERATOR_PEDAL')
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (298, 416)}
SAFETY_PARAM: int = 6
SCC_BUS = 2
STEER_BUS = 0
STEER_MSG = 'LFA'
setUp()

Hook method for setting up the test fixture before exercising it.

classmethod setUpClass()

Hook method for setting up class fixture before running tests in the class.

test_tester_present_allowed()

Ensure tester present diagnostic message is allowed to keep ECU knocked out for longitudinal control.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_0(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR_BRAKE_ALT', 'ACCELERATOR_PEDAL_PRESSED')
SAFETY_PARAM: int = 4
SCC_BUS = 0
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_1(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 5
SCC_BUS = 0
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_2(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR_ALT', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 6
SCC_BUS = 0
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_3(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR_BRAKE_ALT', 'ACCELERATOR_PEDAL_PRESSED')
SAFETY_PARAM: int = 8
SCC_BUS = 2
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_4(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 9
SCC_BUS = 2
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA1_5(methodName='runTest')

Bases: TestHyundaiCanfdHDA1

GAS_MSG = ('ACCELERATOR_ALT', 'ACCELERATOR_PEDAL')
SAFETY_PARAM: int = 10
SCC_BUS = 2
class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA2EV(methodName='runTest')[source]

Bases: TestHyundaiCanfdBase

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [80, 676]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
PT_BUS = 1
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (80,)}
SCC_BUS = 1
STEER_MSG = 'LKAS'
TX_MSGS: list[list[int]] | None = [[80, 0], [463, 1], [676, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA2EVAltSteering(methodName='runTest')[source]

Bases: TestHyundaiCanfdBase

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [272, 866]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
PT_BUS = 1
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (272,)}
SCC_BUS = 1
STEER_MSG = 'LKAS_ALT'
TX_MSGS: list[list[int]] | None = [[272, 0], [463, 1], [866, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_hyundai_canfd.TestHyundaiCanfdHDA2LongEV(methodName='runTest')[source]

Bases: HyundaiLongitudinalBase, TestHyundaiCanfdHDA2EV

DISABLED_ECU_ACTUATION_MSG: tuple[int, int] = (416, 1)
DISABLED_ECU_UDS_MSG: tuple[int, int] = (1840, 1)
GAS_MSG = ('ACCELERATOR', 'ACCELERATOR_PEDAL')
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (80,), 1: (416,)}
STEER_BUS = 1
STEER_MSG = 'LFA'
TX_MSGS: list[list[int]] | None = [[80, 0], [463, 1], [676, 0], [81, 0], [1840, 1], [298, 1], [352, 1], [480, 1], [416, 1], [490, 1], [512, 1], [837, 1], [474, 1]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_mazda module

class panda.tests.safety.test_mazda.TestMazdaSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, DriverTorqueSteeringSafetyTest

DRIVER_TORQUE_ALLOWANCE = 15
DRIVER_TORQUE_FACTOR = 1
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [579, 1088]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
MAX_RATE_DOWN = 25
MAX_RATE_UP = 10
MAX_RT_DELTA = 300
MAX_TORQUE = 800
NO_STEER_REQ_BIT = True
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (579,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0.1
TX_MSGS: list[list[int]] | None = [[579, 0], [157, 0], [1088, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_buttons()[source]

panda.tests.safety.test_nissan module

class panda.tests.safety.test_nissan.TestNissanLeafSafety(methodName='runTest')[source]

Bases: TestNissanSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_acc_buttons()[source]
class panda.tests.safety.test_nissan.TestNissanSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, AngleSteeringSafetyTest

ANGLE_RATE_BP: list[float] = [0.0, 5.0, 15.0]
ANGLE_RATE_DOWN: list[float] = [5.0, 3.5, 0.4]
ANGLE_RATE_UP: list[float] = [5.0, 0.8, 0.15]
CRUISE_BUS = 2
DEG_TO_CAN: float = 100
EPS_BUS = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {0: [640], 2: [361, 689, 1228]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
GAS_PRESSED_THRESHOLD = 3
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (361,)}
STANDSTILL_THRESHOLD: float | None = 0
TX_MSGS: list[list[int]] | None = [[361, 0], [689, 0], [1228, 0], [523, 2], [640, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_acc_buttons()[source]
class panda.tests.safety.test_nissan.TestNissanSafetyAltEpsBus(methodName='runTest')[source]

Bases: TestNissanSafety

Altima uses different buses

CRUISE_BUS = 1
EPS_BUS = 1
setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_subaru module

class panda.tests.safety.test_subaru.SubaruMsg(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: IntEnum

Brake_Status = 316
CruiseControl = 576
ES_Brake = 544
ES_DashStatus = 801
ES_Distance = 545
ES_HighBeamAssist = 289
ES_Infotainment = 803
ES_LKAS = 290
ES_LKAS_ANGLE = 292
ES_LKAS_State = 802
ES_STATIC_1 = 554
ES_STATIC_2 = 805
ES_Status = 546
ES_UDS_Request = 1927
Steering_Torque = 281
Throttle = 64
Wheel_Speeds = 314
class panda.tests.safety.test_subaru.TestSubaruGen1LongitudinalSafety(methodName='runTest')[source]

Bases: TestSubaruLongitudinalSafetyBase, TestSubaruTorqueSafetyBase

FLAGS = 2
TX_MSGS: list[list[int]] | None = [[SubaruMsg.ES_LKAS, 0], [SubaruMsg.ES_Distance, 0], [SubaruMsg.ES_DashStatus, 0], [SubaruMsg.ES_LKAS_State, 0], [SubaruMsg.ES_Infotainment, 0], [SubaruMsg.ES_Brake, 0], [SubaruMsg.ES_Status, 0]]
class panda.tests.safety.test_subaru.TestSubaruGen1TorqueStockLongitudinalSafety(methodName='runTest')[source]

Bases: TestSubaruStockLongitudinalSafetyBase, TestSubaruTorqueSafetyBase

FLAGS = 0
TX_MSGS: list[list[int]] | None = [[SubaruMsg.ES_LKAS, 0], [SubaruMsg.ES_Distance, 0], [SubaruMsg.ES_DashStatus, 0], [SubaruMsg.ES_LKAS_State, 0], [SubaruMsg.ES_Infotainment, 0]]
class panda.tests.safety.test_subaru.TestSubaruGen2LongitudinalSafety(methodName='runTest')[source]

Bases: TestSubaruLongitudinalSafetyBase, TestSubaruGen2TorqueSafetyBase

FLAGS = 3
TX_MSGS: list[list[int]] | None = [[SubaruMsg.ES_LKAS, 0], [SubaruMsg.ES_Distance, 1], [SubaruMsg.ES_DashStatus, 0], [SubaruMsg.ES_LKAS_State, 0], [SubaruMsg.ES_Infotainment, 0], [SubaruMsg.ES_Brake, 1], [SubaruMsg.ES_Status, 1], [SubaruMsg.ES_UDS_Request, 2], [SubaruMsg.ES_HighBeamAssist, 0], [SubaruMsg.ES_STATIC_1, 0], [SubaruMsg.ES_STATIC_2, 0]]
test_es_uds_message()[source]
class panda.tests.safety.test_subaru.TestSubaruGen2TorqueSafetyBase(methodName='runTest')[source]

Bases: TestSubaruTorqueSafetyBase

ALT_CAM_BUS = 1
ALT_MAIN_BUS = 1
MAX_RATE_DOWN = 40
MAX_RATE_UP = 40
MAX_TORQUE = 1000
class panda.tests.safety.test_subaru.TestSubaruGen2TorqueStockLongitudinalSafety(methodName='runTest')[source]

Bases: TestSubaruStockLongitudinalSafetyBase, TestSubaruGen2TorqueSafetyBase

FLAGS = 1
TX_MSGS: list[list[int]] | None = [[SubaruMsg.ES_LKAS, 0], [SubaruMsg.ES_Distance, 1], [SubaruMsg.ES_DashStatus, 0], [SubaruMsg.ES_LKAS_State, 0], [SubaruMsg.ES_Infotainment, 0]]
class panda.tests.safety.test_subaru.TestSubaruLongitudinalSafetyBase(methodName='runTest')[source]

Bases: TestSubaruSafetyBase, LongitudinalGasBrakeSafetyTest

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [SubaruMsg.ES_LKAS, SubaruMsg.ES_Brake, SubaruMsg.ES_Distance, SubaruMsg.ES_Status, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State, SubaruMsg.ES_Infotainment]}
INACTIVE_GAS = 1818
MAX_BRAKE: int | None = 600
MAX_GAS: int | None = 3400
MAX_POSSIBLE_BRAKE: int | None = 65536
MAX_POSSIBLE_GAS: int | None = 8192
MAX_POSSIBLE_RPM = 8192
MAX_RPM = 3600
MIN_BRAKE: int = 0
MIN_GAS: int = 808
MIN_RPM = 0
test_rpm_safety_check()[source]
class panda.tests.safety.test_subaru.TestSubaruSafetyBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest

ALT_CAM_BUS = 2
ALT_MAIN_BUS = 0
DEG_TO_CAN = 100
DRIVER_TORQUE_ALLOWANCE = 60
DRIVER_TORQUE_FACTOR = 50
FLAGS = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [SubaruMsg.ES_LKAS, SubaruMsg.ES_DashStatus, SubaruMsg.ES_LKAS_State, SubaruMsg.ES_Infotainment]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
INACTIVE_GAS = 1818
MAX_RT_DELTA = 940
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (SubaruMsg.ES_LKAS,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_subaru.TestSubaruStockLongitudinalSafetyBase(methodName='runTest')[source]

Bases: TestSubaruSafetyBase

test_cancel_message()[source]
class panda.tests.safety.test_subaru.TestSubaruTorqueSafetyBase(methodName='runTest')[source]

Bases: TestSubaruSafetyBase, DriverTorqueSteeringSafetyTest, SteerRequestCutSafetyTest

MAX_INVALID_STEERING_FRAMES: int = 1
MAX_RATE_DOWN = 70
MAX_RATE_UP = 50
MAX_TORQUE = 2047
MIN_VALID_STEERING_FRAMES: int = 7
MIN_VALID_STEERING_RT_INTERVAL: int = 144000
panda.tests.safety.test_subaru.fwd_blacklisted_addr(lkas_msg=SubaruMsg.ES_LKAS)[source]
panda.tests.safety.test_subaru.gen2_long_additional_tx_msgs()[source]
panda.tests.safety.test_subaru.lkas_tx_msgs(alt_bus, lkas_msg=SubaruMsg.ES_LKAS)[source]
panda.tests.safety.test_subaru.long_tx_msgs(alt_bus)[source]

panda.tests.safety.test_subaru_preglobal module

class panda.tests.safety.test_subaru_preglobal.TestSubaruPreglobalReversedDriverTorqueSafety(methodName='runTest')[source]

Bases: TestSubaruPreglobalSafety

DBC = 'subaru_outback_2019_generated'
FLAGS = 1
class panda.tests.safety.test_subaru_preglobal.TestSubaruPreglobalSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, DriverTorqueSteeringSafetyTest

DBC = 'subaru_outback_2015_generated'
DRIVER_TORQUE_ALLOWANCE = 75
DRIVER_TORQUE_FACTOR = 10
FLAGS = 0
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [353, 356]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
MAX_RATE_DOWN = 70
MAX_RATE_UP = 50
MAX_RT_DELTA = 940
MAX_TORQUE = 2047
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (356,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0
TX_MSGS: list[list[int]] | None = [[353, 0], [356, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_tesla module

class panda.tests.safety.test_tesla.CONTROL_LEVER_STATE[source]

Bases: object

DN_1ST = 32
DN_2ND = 8
FWD = 1
IDLE = 0
RWD = 2
UP_1ST = 16
UP_2ND = 4
class panda.tests.safety.test_tesla.TestTeslaChassisLongitudinalSafety(methodName='runTest')[source]

Bases: TestTeslaLongitudinalSafety

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [697, 1160]}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (1160,)}
TX_MSGS: list[list[int]] | None = [[1160, 0], [69, 0], [69, 2], [697, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_tesla.TestTeslaLongitudinalSafety(methodName='runTest')[source]

Bases: TestTeslaSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_acc_accel_limits()[source]
test_no_aeb()[source]
test_stock_aeb_passthrough()[source]
class panda.tests.safety.test_tesla.TestTeslaPTLongitudinalSafety(methodName='runTest')[source]

Bases: TestTeslaLongitudinalSafety

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [703]}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (703,)}
TX_MSGS: list[list[int]] | None = [[703, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_tesla.TestTeslaRavenSteeringSafety(methodName='runTest')[source]

Bases: TestTeslaSteeringSafety

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_tesla.TestTeslaSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest

FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
GAS_PRESSED_THRESHOLD = 3
STANDSTILL_THRESHOLD: float | None = 0
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_tesla.TestTeslaSteeringSafety(methodName='runTest')[source]

Bases: TestTeslaSafety, AngleSteeringSafetyTest

ANGLE_RATE_BP: list[float] = [0.0, 5.0, 15.0]
ANGLE_RATE_DOWN: list[float] = [10.0, 7.0, 0.8]
ANGLE_RATE_UP: list[float] = [10.0, 1.6, 0.3]
DEG_TO_CAN: float = 10
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [1160]}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (1160,)}
TX_MSGS: list[list[int]] | None = [[1160, 0], [69, 0], [69, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_acc_buttons()[source]

FWD (cancel) always allowed.

panda.tests.safety.test_toyota module

class panda.tests.safety.test_toyota.TestToyotaAltBrakeSafety(methodName='runTest')[source]

Bases: TestToyotaSafetyTorque

setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_lta_steer_cmd()[source]
class panda.tests.safety.test_toyota.TestToyotaSafetyAngle(methodName='runTest')[source]

Bases: TestToyotaSafetyBase, AngleSteeringSafetyTest

ANGLE_RATE_BP: list[float] = [5.0, 25.0, 25.0]
ANGLE_RATE_DOWN: list[float] = [0.36, 0.26, 0.26]
ANGLE_RATE_UP: list[float] = [0.3, 0.15, 0.15]
DEG_TO_CAN: float = 17.452007
MAX_LTA_ANGLE = 94.9461
MAX_LTA_DRIVER_TORQUE = 150
MAX_MEAS_TORQUE = 1500
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_angle_cmd_when_enabled(max_angle=None)[source]
test_angle_measurements()[source]
  • Tests angle meas quality flag dictates whether angle measurement is parsed, and if rx is valid

  • Tests rx hook correctly clips the angle measurement, since it is to be compared to LTA cmd when inactive

test_lka_steer_cmd()[source]
test_lta_steer_cmd()[source]

Tests the LTA steering command message controls_allowed: * STEER_REQUEST and STEER_REQUEST_2 do not mismatch * TORQUE_WIND_DOWN is only set to 0 or 100 when STEER_REQUEST and STEER_REQUEST_2 are both 1 * Full torque messages are blocked if either EPS torque or driver torque is above the threshold

not controls_allowed: * STEER_REQUEST, STEER_REQUEST_2, and TORQUE_WIND_DOWN are all 0

test_steering_angle_measurements(max_angle=None)[source]
class panda.tests.safety.test_toyota.TestToyotaSafetyBase(methodName='runTest')[source]

Bases: PandaCarSafetyTest, LongitudinalAccelSafetyTest

EPS_SCALE = 73
FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [740, 1042, 401, 835]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (740, 835)}
STANDSTILL_THRESHOLD: float | None = 0
TX_MSGS: list[list[int]] | None = [[740, 0], [401, 0], [1042, 0], [835, 0], [466, 0], [643, 0], [742, 0], [743, 0], [830, 0], [836, 0], [869, 0], [870, 0], [1227, 0], [296, 1], [321, 1], [352, 1], [353, 1], [1136, 1], [1041, 0], [1872, 0]]
packer: CANPackerPanda
safety: Panda
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_block_aeb(stock_longitudinal: bool = False)[source]
test_diagnostics(stock_longitudinal: bool = False)[source]
test_lta_steer_cmd()[source]
test_rx_hook()[source]
class panda.tests.safety.test_toyota.TestToyotaSafetyTorque(methodName='runTest')[source]

Bases: TestToyotaSafetyBase, MotorTorqueSteeringSafetyTest, SteerRequestCutSafetyTest

MAX_INVALID_STEERING_FRAMES: int = 1
MAX_RATE_DOWN = 25
MAX_RATE_UP = 15
MAX_RT_DELTA = 450
MAX_TORQUE = 1500
MAX_TORQUE_ERROR = 350
MIN_VALID_STEERING_FRAMES: int = 18
MIN_VALID_STEERING_RT_INTERVAL: int = 170000
RT_INTERVAL = 250000
TORQUE_MEAS_TOLERANCE = 1
setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_toyota.TestToyotaStockLongitudinalAngle(methodName='runTest')[source]

Bases: TestToyotaStockLongitudinalBase, TestToyotaSafetyAngle

setUp()[source]

Hook method for setting up the test fixture before exercising it.

class panda.tests.safety.test_toyota.TestToyotaStockLongitudinalBase(methodName='runTest')[source]

Bases: TestToyotaSafetyBase

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [740, 1042, 401]}
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (740,)}
TX_MSGS: list[list[int]] | None = [[740, 0], [401, 0], [1042, 0], [835, 0], [466, 0]]
test_acc_cancel()[source]

Regardless of controls allowed, never allow ACC_CONTROL if cancel bit isn’t set

test_accel_actuation_limits(stock_longitudinal=True)[source]
test_block_aeb(stock_longitudinal: bool = True)[source]
test_diagnostics(stock_longitudinal: bool = True)[source]
class panda.tests.safety.test_toyota.TestToyotaStockLongitudinalTorque(methodName='runTest')[source]

Bases: TestToyotaStockLongitudinalBase, TestToyotaSafetyTorque

setUp()[source]

Hook method for setting up the test fixture before exercising it.

panda.tests.safety.test_volkswagen_mqb module

class panda.tests.safety.test_volkswagen_mqb.TestVolkswagenMqbLongSafety(methodName='runTest')[source]

Bases: TestVolkswagenMqbSafety

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {0: [159], 2: [294, 919, 780, 290, 302]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
INACTIVE_ACCEL = 3.01
TX_MSGS: list[list[int]] | None = [[294, 0], [919, 0], [159, 2], [780, 0], [290, 0], [302, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_accel_safety_check()[source]
test_cancel_button()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_enable_control_allowed_from_cruise()[source]
test_main_switch()[source]
test_set_and_resume_buttons()[source]
class panda.tests.safety.test_volkswagen_mqb.TestVolkswagenMqbSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, DriverTorqueSteeringSafetyTest

DRIVER_TORQUE_ALLOWANCE = 80
DRIVER_TORQUE_FACTOR = 3
MAX_RATE_DOWN = 10
MAX_RATE_UP = 4
MAX_RT_DELTA = 75
MAX_TORQUE = 300
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (294,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_redundant_brake_signals()[source]
test_torque_measurements()[source]
class panda.tests.safety.test_volkswagen_mqb.TestVolkswagenMqbStockSafety(methodName='runTest')[source]

Bases: TestVolkswagenMqbSafety

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {0: [159], 2: [294, 919]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
TX_MSGS: list[list[int]] | None = [[294, 0], [919, 0], [159, 2], [299, 0], [299, 2]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_spam_cancel_safety_check()[source]

panda.tests.safety.test_volkswagen_pq module

class panda.tests.safety.test_volkswagen_pq.TestVolkswagenPqLongSafety(methodName='runTest')[source]

Bases: TestVolkswagenPqSafety, LongitudinalAccelSafetyTest

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [210, 1470, 872, 1386]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
INACTIVE_ACCEL: float = 3.01
TX_MSGS: list[list[int]] | None = [[210, 0], [1470, 0], [872, 0], [1386, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_cancel_button()[source]
test_cruise_engaged_prev()[source]
test_disable_control_allowed_from_cruise()[source]
test_enable_control_allowed_from_cruise()[source]
test_main_switch()[source]
test_set_and_resume_buttons()[source]
test_torque_cmd_enable_variants()[source]
class panda.tests.safety.test_volkswagen_pq.TestVolkswagenPqSafety(methodName='runTest')[source]

Bases: PandaCarSafetyTest, DriverTorqueSteeringSafetyTest

DRIVER_TORQUE_ALLOWANCE = 80
DRIVER_TORQUE_FACTOR = 3
MAX_RATE_DOWN = 10
MAX_RATE_UP = 6
MAX_RT_DELTA = 113
MAX_TORQUE = 300
RELAY_MALFUNCTION_ADDRS: dict[int, tuple[int, ...]] | None = {0: (210,)}
RT_INTERVAL = 250000
STANDSTILL_THRESHOLD: float | None = 0
cruise_engaged = False
classmethod setUpClass()[source]

Hook method for setting up class fixture before running tests in the class.

test_torque_measurements()[source]
class panda.tests.safety.test_volkswagen_pq.TestVolkswagenPqStockSafety(methodName='runTest')[source]

Bases: TestVolkswagenPqSafety

FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {2: [210, 1470]}
FWD_BUS_LOOKUP: dict[int, int] = {0: 2, 2: 0}
TX_MSGS: list[list[int]] | None = [[210, 0], [906, 0], [906, 2], [1470, 0]]
setUp()[source]

Hook method for setting up the test fixture before exercising it.

test_spam_cancel_safety_check()[source]

Module contents