From f234fe0a0886bfcb9d69d29120d988c55dea6872 Mon Sep 17 00:00:00 2001 From: Flummi Date: Wed, 12 Jul 2023 18:38:42 +0200 Subject: [PATCH 1/3] uff --- package-lock.json | 6 ++++++ package.json | 1 + src/inc/handranker.mjs | 2 +- src/index.mjs | 29 ++++++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 981bc14..14b6c0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,9 +12,15 @@ ], "license": "ISC", "dependencies": { + "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } }, + "node_modules/@xpressit/winning-poker-hand-rank": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@xpressit/winning-poker-hand-rank/-/winning-poker-hand-rank-0.1.6.tgz", + "integrity": "sha512-l7b8GAKOT6k79qKF/SesCgQLvCjHZkhihf5QhgcL9w3hiya2JeCVyg07TVayoyO8PzDq56MH+yKk5rcbDMYScw==" + }, "node_modules/cuffeo": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cuffeo/-/cuffeo-1.2.2.tgz", diff --git a/package.json b/package.json index 8a04c1b..0c6dd72 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "author": "Flummi", "license": "ISC", "dependencies": { + "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } } diff --git a/src/inc/handranker.mjs b/src/inc/handranker.mjs index 3c913a4..8c4456e 100644 --- a/src/inc/handranker.mjs +++ b/src/inc/handranker.mjs @@ -35,7 +35,7 @@ export default new class handranker { p = this.#ranks.readUInt32LE(p * 4); return { - handType: p >> 12, + //handType: p >> 12, handRank: p & 0x00000fff, value: p, handName: this.handtypes[p >> 12] diff --git a/src/index.mjs b/src/index.mjs index c305bbf..bec3f2d 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,5 +1,6 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; +import { rankHands } from '@xpressit/winning-poker-hand-rank'; import helper from './inc/helper.mjs'; const cfg = helper.config; @@ -47,6 +48,32 @@ bot.on("message", async e => { await e.write(`PRIVMSG ${e.user.nick} ${command}`); } } + if(e.message.startsWith(".cards ")) { + let cards = []; + try { + cards = JSON.parse(e.message.slice(7)); + } catch(err) { + return e.reply('das ist kein Array du Pflaumennase'); + } + + const all = cards; + const hand = cards.slice(0, 2); + const board = cards.slice(2); + + let oldrank; + let newrank; + + try { + oldrank = rankHands('texas', board, [hand])[0]; + newrank = handranker.evalHand(all); + } catch(err) { + return e.reply(JSON.stringify(err)); + } + + e.reply('old: ' + JSON.stringify(oldrank)); + e.reply('new: ' + JSON.stringify(newrank)); + return; + } if(e.message.match(new RegExp(`^${e.self.me.nickname}: Your bank account`))) { env.bank = +e.message.match(/is: (\d+) \(/)[1]; } @@ -149,7 +176,7 @@ bot.on("message", async e => { return e.reply(['huan!', 'f']); if(env.winchance < 6500) { - if(helper.rand(5) === 1 && env.callamount < (helper.rand(6,10) * 10)) { // bad hand, call anyway + if(helper.rand(5) === 1 && env.callamount < (helper.rand(2, 6) * 10)) { // bad hand, call anyway action = 'c'; } else { // bad hand, fold -- 2.50.0 From 6fe4171c002d02f8f3f3662709d60492ee60d499 Mon Sep 17 00:00:00 2001 From: Flummi Date: Thu, 13 Jul 2023 19:07:52 +0200 Subject: [PATCH 2/3] blah --- package.json | 1 - src/inc/constants.mjs | 1410 +++++++++++++++++++++++++++++++++++++++++ src/inc/helper.mjs | 2 +- src/inc/hr.mjs | 136 ++++ src/index.mjs | 52 +- 5 files changed, 1572 insertions(+), 29 deletions(-) create mode 100644 src/inc/constants.mjs create mode 100644 src/inc/hr.mjs diff --git a/package.json b/package.json index 0c6dd72..8a04c1b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,6 @@ "author": "Flummi", "license": "ISC", "dependencies": { - "@xpressit/winning-poker-hand-rank": "^0.1.6", "cuffeo": "^1.2.2" } } diff --git a/src/inc/constants.mjs b/src/inc/constants.mjs new file mode 100644 index 0000000..87f03c0 --- /dev/null +++ b/src/inc/constants.mjs @@ -0,0 +1,1410 @@ +export default { + t7c5: [ + [0, 1, 2, 3, 4, 5, 6], [0, 1, 2, 3, 5, 4, 6], [0, 1, 2, 3, 6, 4, 5], + [0, 1, 2, 4, 5, 3, 6], [0, 1, 2, 4, 6, 3, 5], [0, 1, 2, 5, 6, 3, 4], + [0, 1, 3, 4, 5, 2, 6], [0, 1, 3, 4, 6, 2, 5], [0, 1, 3, 5, 6, 2, 4], + [0, 1, 4, 5, 6, 2, 3], [0, 2, 3, 4, 5, 1, 6], [0, 2, 3, 4, 6, 1, 5], + [0, 2, 3, 5, 6, 1, 4], [0, 2, 4, 5, 6, 1, 3], [0, 3, 4, 5, 6, 1, 2], + [1, 2, 3, 4, 5, 0, 6], [1, 2, 3, 4, 6, 0, 5], [1, 2, 3, 5, 6, 0, 4], + [1, 2, 4, 5, 6, 0, 3], [1, 3, 4, 5, 6, 0, 2], [2, 3, 4, 5, 6, 0, 1] + ], + PRIMES: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41], + + runeToRank: { + '2': 0, '3': 1, '4': 2, '5': 3, + '6': 4, '7': 5, '8': 6, '9': 7, + T: 8, J: 9, Q: 10, K: 11, A: 12, + }, + + rankToRune: { + '12': 'A', '11': 'K', '10': 'Q', + '9': 'J', '8': 'T', '7': '9', + '6': '8', '5': '7', '4': '6', + '3': '5', '2': '4', '1': '3', + '0': '2' + }, + + suitToRune: { '8': 'C', '4': 'D', '2': 'H', '1': 'S' }, + runeToSuit: { S: 1, H: 2, D: 4, C: 8 }, + + fastFlushes: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1599, 0, 0, 0, 0, 0, 0, 0, 1598, 0, 0, 0, 1597, 0, 1596, + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1595, 0, 0, 0, + 0, 0, 0, 0, 1594, 0, 0, 0, 1593, 0, 1592, 1591, 0, 0, 0, 0, 0, 0, + 0, 0, 1590, 0, 0, 0, 1589, 0, 1588, 1587, 0, 0, 0, 0, 1586, 0, + 1585, 1584, 0, 0, 1583, 1582, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1581, 0, 0, 0, 0, 0, 0, 0, 1580, 0, 0, 0, + 1579, 0, 1578, 1577, 0, 0, 0, 0, 0, 0, 0, 0, 1576, 0, 0, 0, 1575, + 0, 1574, 1573, 0, 0, 0, 0, 1572, 0, 1571, 1570, 0, 0, 1569, 1568, + 0, 1567, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1566, 0, 0, 0, 1565, 0, + 1564, 1563, 0, 0, 0, 0, 1562, 0, 1561, 1560, 0, 0, 1559, 1558, 0, + 1557, 0, 0, 0, 0, 0, 0, 1556, 0, 1555, 1554, 0, 0, 1553, 1552, 0, + 1551, 0, 0, 0, 0, 1550, 1549, 0, 1548, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1547, 0, 0, 0, + 0, 0, 0, 0, 1546, 0, 0, 0, 1545, 0, 1544, 1543, 0, 0, 0, 0, 0, 0, + 0, 0, 1542, 0, 0, 0, 1541, 0, 1540, 1539, 0, 0, 0, 0, 1538, 0, + 1537, 1536, 0, 0, 1535, 1534, 0, 1533, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1532, 0, 0, 0, 1531, 0, 1530, 1529, 0, 0, 0, 0, 1528, 0, 1527, + 1526, 0, 0, 1525, 1524, 0, 1523, 0, 0, 0, 0, 0, 0, 1522, 0, 1521, + 1520, 0, 0, 1519, 1518, 0, 1517, 0, 0, 0, 0, 1516, 1515, 0, 1514, + 0, 0, 0, 1513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1512, 0, + 0, 0, 1511, 0, 1510, 1509, 0, 0, 0, 0, 1508, 0, 1507, 1506, 0, 0, + 1505, 1504, 0, 1503, 0, 0, 0, 0, 0, 0, 1502, 0, 1501, 1500, 0, 0, + 1499, 1498, 0, 1497, 0, 0, 0, 0, 1496, 1495, 0, 1494, 0, 0, 0, + 1493, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1492, 0, 1491, 1490, 0, 0, + 1489, 1488, 0, 1487, 0, 0, 0, 0, 1486, 1485, 0, 1484, 0, 0, 0, + 1483, 0, 0, 0, 0, 0, 0, 0, 0, 1482, 1481, 0, 1480, 0, 0, 0, 1479, + 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1478, 0, 0, 0, 0, + 0, 0, 0, 1477, 0, 0, 0, 1476, 0, 1475, 1474, 0, 0, 0, 0, 0, 0, 0, + 0, 1473, 0, 0, 0, 1472, 0, 1471, 1470, 0, 0, 0, 0, 1469, 0, 1468, + 1467, 0, 0, 1466, 1465, 0, 1464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1463, 0, 0, 0, 1462, 0, 1461, 1460, 0, 0, 0, 0, 1459, 0, 1458, + 1457, 0, 0, 1456, 1455, 0, 1454, 0, 0, 0, 0, 0, 0, 1453, 0, 1452, + 1451, 0, 0, 1450, 1449, 0, 1448, 0, 0, 0, 0, 1447, 1446, 0, 1445, + 0, 0, 0, 1444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1443, 0, + 0, 0, 1442, 0, 1441, 1440, 0, 0, 0, 0, 1439, 0, 1438, 1437, 0, 0, + 1436, 1435, 0, 1434, 0, 0, 0, 0, 0, 0, 1433, 0, 1432, 1431, 0, 0, + 1430, 1429, 0, 1428, 0, 0, 0, 0, 1427, 1426, 0, 1425, 0, 0, 0, + 1424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1423, 0, 1422, 1421, 0, 0, + 1420, 1419, 0, 1418, 0, 0, 0, 0, 1417, 1416, 0, 1415, 0, 0, 0, + 1414, 0, 0, 0, 0, 0, 0, 0, 0, 1413, 1412, 0, 1411, 0, 0, 0, 1410, + 0, 0, 0, 0, 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1408, 0, 0, 0, 1407, 0, 1406, 1405, 0, + 0, 0, 0, 1404, 0, 1403, 1402, 0, 0, 1401, 1400, 0, 1399, 0, 0, 0, + 0, 0, 0, 1398, 0, 1397, 1396, 0, 0, 1395, 1394, 0, 1393, 0, 0, 0, + 0, 1392, 1391, 0, 1390, 0, 0, 0, 1389, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1388, 0, 1387, 1386, 0, 0, 1385, 1384, 0, 1383, 0, 0, 0, 0, + 1382, 1381, 0, 1380, 0, 0, 0, 1379, 0, 0, 0, 0, 0, 0, 0, 0, 1378, + 1377, 0, 1376, 0, 0, 0, 1375, 0, 0, 0, 0, 0, 0, 0, 1374, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1373, 0, 1372, 1371, + 0, 0, 1370, 1369, 0, 1368, 0, 0, 0, 0, 1367, 1366, 0, 1365, 0, 0, + 0, 1364, 0, 0, 0, 0, 0, 0, 0, 0, 1363, 1362, 0, 1361, 0, 0, 0, + 1360, 0, 0, 0, 0, 0, 0, 0, 1359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1358, 1357, 0, 1356, 0, 0, 0, 1355, 0, 0, 0, 0, 0, + 0, 0, 1354, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1353, 0, 0, 0, 0, 0, 0, 0, 1352, 0, 0, 0, 1351, 0, 1350, 1349, 0, + 0, 0, 0, 0, 0, 0, 0, 1348, 0, 0, 0, 1347, 0, 1346, 1345, 0, 0, 0, + 0, 1344, 0, 1343, 1342, 0, 0, 1341, 1340, 0, 1339, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1338, 0, 0, 0, 1337, 0, 1336, 1335, 0, 0, 0, 0, + 1334, 0, 1333, 1332, 0, 0, 1331, 1330, 0, 1329, 0, 0, 0, 0, 0, 0, + 1328, 0, 1327, 1326, 0, 0, 1325, 1324, 0, 1323, 0, 0, 0, 0, 1322, + 1321, 0, 1320, 0, 0, 0, 1319, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1318, 0, 0, 0, 1317, 0, 1316, 1315, 0, 0, 0, 0, 1314, 0, + 1313, 1312, 0, 0, 1311, 1310, 0, 1309, 0, 0, 0, 0, 0, 0, 1308, 0, + 1307, 1306, 0, 0, 1305, 1304, 0, 1303, 0, 0, 0, 0, 1302, 1301, 0, + 1300, 0, 0, 0, 1299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1298, 0, 1297, + 1296, 0, 0, 1295, 1294, 0, 1293, 0, 0, 0, 0, 1292, 1291, 0, 1290, + 0, 0, 0, 1289, 0, 0, 0, 0, 0, 0, 0, 0, 1288, 1287, 0, 1286, 0, 0, + 0, 1285, 0, 0, 0, 0, 0, 0, 0, 1284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1283, 0, 0, 0, 1282, 0, 1281, + 1280, 0, 0, 0, 0, 1279, 0, 1278, 1277, 0, 0, 1276, 1275, 0, 1274, + 0, 0, 0, 0, 0, 0, 1273, 0, 1272, 1271, 0, 0, 1270, 1269, 0, 1268, + 0, 0, 0, 0, 1267, 1266, 0, 1265, 0, 0, 0, 1264, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1263, 0, 1262, 1261, 0, 0, 1260, 1259, 0, 1258, 0, 0, + 0, 0, 1257, 1256, 0, 1255, 0, 0, 0, 1254, 0, 0, 0, 0, 0, 0, 0, 0, + 1253, 1252, 0, 1251, 0, 0, 0, 1250, 0, 0, 0, 0, 0, 0, 0, 1249, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1248, 0, 1247, + 1246, 0, 0, 1245, 1244, 0, 1243, 0, 0, 0, 0, 1242, 1241, 0, 1240, + 0, 0, 0, 1239, 0, 0, 0, 0, 0, 0, 0, 0, 1238, 1237, 0, 1236, 0, 0, + 0, 1235, 0, 0, 0, 0, 0, 0, 0, 1234, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1233, 1232, 0, 1231, 0, 0, 0, 1230, 0, 0, 0, 0, + 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1228, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1227, 0, 0, 0, + 1226, 0, 1225, 1224, 0, 0, 0, 0, 1223, 0, 1222, 1221, 0, 0, 1220, + 1219, 0, 1218, 0, 0, 0, 0, 0, 0, 1217, 0, 1216, 1215, 0, 0, 1214, + 1213, 0, 1212, 0, 0, 0, 0, 1211, 1210, 0, 1209, 0, 0, 0, 1208, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1207, 0, 1206, 1205, 0, 0, 1204, 1203, + 0, 1202, 0, 0, 0, 0, 1201, 1200, 0, 1199, 0, 0, 0, 1198, 0, 0, 0, + 0, 0, 0, 0, 0, 1197, 1196, 0, 1195, 0, 0, 0, 1194, 0, 0, 0, 0, 0, + 0, 0, 1193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1192, 0, 1191, 1190, 0, 0, 1189, 1188, 0, 1187, 0, 0, 0, 0, 1186, + 1185, 0, 1184, 0, 0, 0, 1183, 0, 0, 0, 0, 0, 0, 0, 0, 1182, 1181, + 0, 1180, 0, 0, 0, 1179, 0, 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1177, 1176, 0, 1175, 0, 0, 0, + 1174, 0, 0, 0, 0, 0, 0, 0, 1173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1171, 0, + 1170, 1169, 0, 0, 1168, 1167, 0, 1166, 0, 0, 0, 0, 1165, 1164, 0, + 1163, 0, 0, 0, 1162, 0, 0, 0, 0, 0, 0, 0, 0, 1161, 1160, 0, 1159, + 0, 0, 0, 1158, 0, 0, 0, 0, 0, 0, 0, 1157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1156, 1155, 0, 1154, 0, 0, 0, 1153, 0, 0, + 0, 0, 0, 0, 0, 1152, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1150, 1149, 0, 1148, 0, 0, 0, + 1147, 0, 0, 0, 0, 0, 0, 0, 1146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1144, 0, 0, 0, 0, 0, 0, 0, 1143, 0, 0, 0, 1142, + 0, 1141, 1140, 0, 0, 0, 0, 0, 0, 0, 0, 1139, 0, 0, 0, 1138, 0, + 1137, 1136, 0, 0, 0, 0, 1135, 0, 1134, 1133, 0, 0, 1132, 1131, 0, + 1130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1129, 0, 0, 0, 1128, 0, 1127, + 1126, 0, 0, 0, 0, 1125, 0, 1124, 1123, 0, 0, 1122, 1121, 0, 1120, + 0, 0, 0, 0, 0, 0, 1119, 0, 1118, 1117, 0, 0, 1116, 1115, 0, 1114, + 0, 0, 0, 0, 1113, 1112, 0, 1111, 0, 0, 0, 1110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1109, 0, 0, 0, 1108, 0, 1107, 1106, 0, 0, + 0, 0, 1105, 0, 1104, 1103, 0, 0, 1102, 1101, 0, 1100, 0, 0, 0, 0, + 0, 0, 1099, 0, 1098, 1097, 0, 0, 1096, 1095, 0, 1094, 0, 0, 0, 0, + 1093, 1092, 0, 1091, 0, 0, 0, 1090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1089, 0, 1088, 1087, 0, 0, 1086, 1085, 0, 1084, 0, 0, 0, 0, 1083, + 1082, 0, 1081, 0, 0, 0, 1080, 0, 0, 0, 0, 0, 0, 0, 0, 1079, 1078, + 0, 1077, 0, 0, 0, 1076, 0, 0, 0, 0, 0, 0, 0, 1075, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1074, 0, 0, 0, + 1073, 0, 1072, 1071, 0, 0, 0, 0, 1070, 0, 1069, 1068, 0, 0, 1067, + 1066, 0, 1065, 0, 0, 0, 0, 0, 0, 1064, 0, 1063, 1062, 0, 0, 1061, + 1060, 0, 1059, 0, 0, 0, 0, 1058, 1057, 0, 1056, 0, 0, 0, 1055, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1054, 0, 1053, 1052, 0, 0, 1051, 1050, + 0, 1049, 0, 0, 0, 0, 1048, 1047, 0, 1046, 0, 0, 0, 1045, 0, 0, 0, + 0, 0, 0, 0, 0, 1044, 1043, 0, 1042, 0, 0, 0, 1041, 0, 0, 0, 0, 0, + 0, 0, 1040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1039, 0, 1038, 1037, 0, 0, 1036, 1035, 0, 1034, 0, 0, 0, 0, 1033, + 1032, 0, 1031, 0, 0, 0, 1030, 0, 0, 0, 0, 0, 0, 0, 0, 1029, 1028, + 0, 1027, 0, 0, 0, 1026, 0, 0, 0, 0, 0, 0, 0, 1025, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1024, 1023, 0, 1022, 0, 0, 0, + 1021, 0, 0, 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1018, 0, 0, 0, 1017, 0, 1016, 1015, 0, 0, 0, 0, 1014, 0, 1013, + 1012, 0, 0, 1011, 1010, 0, 1009, 0, 0, 0, 0, 0, 0, 1008, 0, 1007, + 1006, 0, 0, 1005, 1004, 0, 1003, 0, 0, 0, 0, 1002, 1001, 0, 1000, + 0, 0, 0, 999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 998, 0, 997, 996, 0, + 0, 995, 994, 0, 993, 0, 0, 0, 0, 992, 991, 0, 990, 0, 0, 0, 989, + 0, 0, 0, 0, 0, 0, 0, 0, 988, 987, 0, 986, 0, 0, 0, 985, 0, 0, 0, + 0, 0, 0, 0, 984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 983, 0, 982, 981, 0, 0, 980, 979, 0, 978, 0, 0, 0, 0, 977, + 976, 0, 975, 0, 0, 0, 974, 0, 0, 0, 0, 0, 0, 0, 0, 973, 972, 0, + 971, 0, 0, 0, 970, 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 968, 967, 0, 966, 0, 0, 0, 965, 0, 0, + 0, 0, 0, 0, 0, 964, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 963, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 962, 0, 961, 960, 0, 0, + 959, 958, 0, 957, 0, 0, 0, 0, 956, 955, 0, 954, 0, 0, 0, 953, 0, + 0, 0, 0, 0, 0, 0, 0, 952, 951, 0, 950, 0, 0, 0, 949, 0, 0, 0, 0, + 0, 0, 0, 948, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 946, 0, 945, 0, 0, 0, 944, 0, 0, 0, 0, 0, 0, 0, 943, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 942, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 941, 940, 0, 939, 0, 0, 0, 938, 0, 0, 0, 0, 0, 0, 0, + 937, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 936, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 935, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 934, 0, 0, 0, 933, 0, 932, + 931, 0, 0, 0, 0, 930, 0, 929, 928, 0, 0, 927, 926, 0, 925, 0, 0, + 0, 0, 0, 0, 924, 0, 923, 922, 0, 0, 921, 920, 0, 919, 0, 0, 0, 0, + 918, 917, 0, 916, 0, 0, 0, 915, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 914, 0, 913, 912, 0, 0, 911, 910, 0, 909, 0, 0, 0, 0, 908, 907, + 0, 906, 0, 0, 0, 905, 0, 0, 0, 0, 0, 0, 0, 0, 904, 903, 0, 902, + 0, 0, 0, 901, 0, 0, 0, 0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 899, 0, 898, 897, 0, 0, 896, 895, + 0, 894, 0, 0, 0, 0, 893, 892, 0, 891, 0, 0, 0, 890, 0, 0, 0, 0, + 0, 0, 0, 0, 889, 888, 0, 887, 0, 0, 0, 886, 0, 0, 0, 0, 0, 0, 0, + 885, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 884, 883, 0, + 882, 0, 0, 0, 881, 0, 0, 0, 0, 0, 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 879, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 878, 0, 877, 876, 0, 0, 875, 874, 0, 873, 0, 0, 0, 0, 872, 871, + 0, 870, 0, 0, 0, 869, 0, 0, 0, 0, 0, 0, 0, 0, 868, 867, 0, 866, + 0, 0, 0, 865, 0, 0, 0, 0, 0, 0, 0, 864, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 863, 862, 0, 861, 0, 0, 0, 860, 0, 0, 0, + 0, 0, 0, 0, 859, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 858, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 857, 856, 0, 855, 0, 0, 0, + 854, 0, 0, 0, 0, 0, 0, 0, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 852, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 851, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 850, 0, 849, + 848, 0, 0, 847, 846, 0, 845, 0, 0, 0, 0, 844, 843, 0, 842, 0, 0, + 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, 840, 839, 0, 838, 0, 0, 0, 837, + 0, 0, 0, 0, 0, 0, 0, 836, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 835, 834, 0, 833, 0, 0, 0, 832, 0, 0, 0, 0, 0, 0, 0, + 831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 830, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 829, 828, 0, 827, 0, 0, 0, 826, 0, 0, 0, 0, + 0, 0, 0, 825, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 824, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 823, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 822, 821, 0, 820, 0, 0, 0, 819, 0, 0, + 0, 0, 0, 0, 0, 818, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 817, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 816, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 815, 0, 0, 0, 814, 0, 813, 812, 0, 0, 0, + 0, 0, 0, 0, 0, 811, 0, 0, 0, 810, 0, 809, 808, 0, 0, 0, 0, 807, + 0, 806, 805, 0, 0, 804, 803, 0, 802, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 801, 0, 0, 0, 800, 0, 799, 798, 0, 0, 0, 0, 797, 0, 796, 795, + 0, 0, 794, 793, 0, 792, 0, 0, 0, 0, 0, 0, 791, 0, 790, 789, 0, 0, + 788, 787, 0, 786, 0, 0, 0, 0, 785, 784, 0, 783, 0, 0, 0, 782, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 0, 0, 0, 780, 0, 779, + 778, 0, 0, 0, 0, 777, 0, 776, 775, 0, 0, 774, 773, 0, 772, 0, 0, + 0, 0, 0, 0, 771, 0, 770, 769, 0, 0, 768, 767, 0, 766, 0, 0, 0, 0, + 765, 764, 0, 763, 0, 0, 0, 762, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 761, 0, 760, 759, 0, 0, 758, 757, 0, 756, 0, 0, 0, 0, 755, 754, + 0, 753, 0, 0, 0, 752, 0, 0, 0, 0, 0, 0, 0, 0, 751, 750, 0, 749, + 0, 0, 0, 748, 0, 0, 0, 0, 0, 0, 0, 747, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 746, 0, 0, 0, 745, 0, + 744, 743, 0, 0, 0, 0, 742, 0, 741, 740, 0, 0, 739, 738, 0, 737, + 0, 0, 0, 0, 0, 0, 736, 0, 735, 734, 0, 0, 733, 732, 0, 731, 0, 0, + 0, 0, 730, 729, 0, 728, 0, 0, 0, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 726, 0, 725, 724, 0, 0, 723, 722, 0, 721, 0, 0, 0, 0, 720, + 719, 0, 718, 0, 0, 0, 717, 0, 0, 0, 0, 0, 0, 0, 0, 716, 715, 0, + 714, 0, 0, 0, 713, 0, 0, 0, 0, 0, 0, 0, 712, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 711, 0, 710, 709, 0, 0, 708, + 707, 0, 706, 0, 0, 0, 0, 705, 704, 0, 703, 0, 0, 0, 702, 0, 0, 0, + 0, 0, 0, 0, 0, 701, 700, 0, 699, 0, 0, 0, 698, 0, 0, 0, 0, 0, 0, + 0, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 696, 695, + 0, 694, 0, 0, 0, 693, 0, 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 691, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 690, 0, 0, 0, 689, 0, 688, 687, 0, 0, 0, 0, 686, + 0, 685, 684, 0, 0, 683, 682, 0, 681, 0, 0, 0, 0, 0, 0, 680, 0, + 679, 678, 0, 0, 677, 676, 0, 675, 0, 0, 0, 0, 674, 673, 0, 672, + 0, 0, 0, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 670, 0, 669, 668, 0, + 0, 667, 666, 0, 665, 0, 0, 0, 0, 664, 663, 0, 662, 0, 0, 0, 661, + 0, 0, 0, 0, 0, 0, 0, 0, 660, 659, 0, 658, 0, 0, 0, 657, 0, 0, 0, + 0, 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 655, 0, 654, 653, 0, 0, 652, 651, 0, 650, 0, 0, 0, 0, 649, + 648, 0, 647, 0, 0, 0, 646, 0, 0, 0, 0, 0, 0, 0, 0, 645, 644, 0, + 643, 0, 0, 0, 642, 0, 0, 0, 0, 0, 0, 0, 641, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 640, 639, 0, 638, 0, 0, 0, 637, 0, 0, + 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, 0, 633, 632, 0, 0, + 631, 630, 0, 629, 0, 0, 0, 0, 628, 627, 0, 626, 0, 0, 0, 625, 0, + 0, 0, 0, 0, 0, 0, 0, 624, 623, 0, 622, 0, 0, 0, 621, 0, 0, 0, 0, + 0, 0, 0, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 619, 618, 0, 617, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 615, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 613, 612, 0, 611, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, + 609, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 605, 0, 604, + 603, 0, 0, 0, 0, 602, 0, 601, 600, 0, 0, 599, 598, 0, 597, 0, 0, + 0, 0, 0, 0, 596, 0, 595, 594, 0, 0, 593, 592, 0, 591, 0, 0, 0, 0, + 590, 589, 0, 588, 0, 0, 0, 587, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 586, 0, 585, 584, 0, 0, 583, 582, 0, 581, 0, 0, 0, 0, 580, 579, + 0, 578, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 576, 575, 0, 574, + 0, 0, 0, 573, 0, 0, 0, 0, 0, 0, 0, 572, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 571, 0, 570, 569, 0, 0, 568, 567, + 0, 566, 0, 0, 0, 0, 565, 564, 0, 563, 0, 0, 0, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 561, 560, 0, 559, 0, 0, 0, 558, 0, 0, 0, 0, 0, 0, 0, + 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 556, 555, 0, + 554, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 0, 552, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 551, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 550, 0, 549, 548, 0, 0, 547, 546, 0, 545, 0, 0, 0, 0, 544, 543, + 0, 542, 0, 0, 0, 541, 0, 0, 0, 0, 0, 0, 0, 0, 540, 539, 0, 538, + 0, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 536, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 535, 534, 0, 533, 0, 0, 0, 532, 0, 0, 0, + 0, 0, 0, 0, 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 529, 528, 0, 527, 0, 0, 0, + 526, 0, 0, 0, 0, 0, 0, 0, 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 522, 0, 521, + 520, 0, 0, 519, 518, 0, 517, 0, 0, 0, 0, 516, 515, 0, 514, 0, 0, + 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 512, 511, 0, 510, 0, 0, 0, 509, + 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 507, 506, 0, 505, 0, 0, 0, 504, 0, 0, 0, 0, 0, 0, 0, + 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 500, 0, 499, 0, 0, 0, 498, 0, 0, 0, 0, + 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 496, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 494, 493, 0, 492, 0, 0, 0, 491, 0, 0, + 0, 0, 0, 0, 0, 490, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 489, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 486, 0, 0, 0, 485, 0, + 484, 483, 0, 0, 0, 0, 482, 0, 481, 480, 0, 0, 479, 478, 0, 477, + 0, 0, 0, 0, 0, 0, 476, 0, 475, 474, 0, 0, 473, 472, 0, 471, 0, 0, + 0, 0, 470, 469, 0, 468, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 466, 0, 465, 464, 0, 0, 463, 462, 0, 461, 0, 0, 0, 0, 460, + 459, 0, 458, 0, 0, 0, 457, 0, 0, 0, 0, 0, 0, 0, 0, 456, 455, 0, + 454, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 452, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 451, 0, 450, 449, 0, 0, 448, + 447, 0, 446, 0, 0, 0, 0, 445, 444, 0, 443, 0, 0, 0, 442, 0, 0, 0, + 0, 0, 0, 0, 0, 441, 440, 0, 439, 0, 0, 0, 438, 0, 0, 0, 0, 0, 0, + 0, 437, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 436, 435, + 0, 434, 0, 0, 0, 433, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 430, 0, 429, 428, 0, 0, 427, 426, 0, 425, 0, 0, 0, 0, 424, + 423, 0, 422, 0, 0, 0, 421, 0, 0, 0, 0, 0, 0, 0, 0, 420, 419, 0, + 418, 0, 0, 0, 417, 0, 0, 0, 0, 0, 0, 0, 416, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 415, 414, 0, 413, 0, 0, 0, 412, 0, 0, + 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 410, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 409, 408, 0, 407, 0, 0, 0, + 406, 0, 0, 0, 0, 0, 0, 0, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 404, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 403, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 402, 0, 401, + 400, 0, 0, 399, 398, 0, 397, 0, 0, 0, 0, 396, 395, 0, 394, 0, 0, + 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 392, 391, 0, 390, 0, 0, 0, 389, + 0, 0, 0, 0, 0, 0, 0, 388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 387, 386, 0, 385, 0, 0, 0, 384, 0, 0, 0, 0, 0, 0, 0, + 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 382, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 381, 380, 0, 379, 0, 0, 0, 378, 0, 0, 0, 0, + 0, 0, 0, 377, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 376, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 374, 373, 0, 372, 0, 0, 0, 371, 0, 0, + 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, 365, 364, 0, 0, 363, 362, + 0, 361, 0, 0, 0, 0, 360, 359, 0, 358, 0, 0, 0, 357, 0, 0, 0, 0, + 0, 0, 0, 0, 356, 355, 0, 354, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, + 352, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 351, 350, 0, + 349, 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, + 344, 0, 343, 0, 0, 0, 342, 0, 0, 0, 0, 0, 0, 0, 341, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 338, 337, 0, 336, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 330, 329, 0, 328, 0, 0, 0, 327, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 + ], + fastUnique5: [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1608, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7462, 0, 0, 0, 0, 0, 0, 0, 7461, 0, 0, 0, 7460, 0, + 7459, 1607, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7458, + 0, 0, 0, 0, 0, 0, 0, 7457, 0, 0, 0, 7456, 0, 7455, 7454, 0, 0, 0, + 0, 0, 0, 0, 0, 7453, 0, 0, 0, 7452, 0, 7451, 7450, 0, 0, 0, 0, + 7449, 0, 7448, 7447, 0, 0, 7446, 7445, 0, 1606, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7444, 0, 0, 0, 0, 0, 0, 0, + 7443, 0, 0, 0, 7442, 0, 7441, 7440, 0, 0, 0, 0, 0, 0, 0, 0, 7439, + 0, 0, 0, 7438, 0, 7437, 7436, 0, 0, 0, 0, 7435, 0, 7434, 7433, 0, + 0, 7432, 7431, 0, 7430, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7429, 0, 0, + 0, 7428, 0, 7427, 7426, 0, 0, 0, 0, 7425, 0, 7424, 7423, 0, 0, + 7422, 7421, 0, 7420, 0, 0, 0, 0, 0, 0, 7419, 0, 7418, 7417, 0, 0, + 7416, 7415, 0, 7414, 0, 0, 0, 0, 7413, 7412, 0, 7411, 0, 0, 0, + 1605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7410, 0, 0, 0, 0, 0, 0, 0, 7409, 0, 0, 0, 7408, 0, 7407, + 7406, 0, 0, 0, 0, 0, 0, 0, 0, 7405, 0, 0, 0, 7404, 0, 7403, 7402, + 0, 0, 0, 0, 7401, 0, 7400, 7399, 0, 0, 7398, 7397, 0, 7396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7395, 0, 0, 0, 7394, 0, 7393, 7392, 0, 0, + 0, 0, 7391, 0, 7390, 7389, 0, 0, 7388, 7387, 0, 7386, 0, 0, 0, 0, + 0, 0, 7385, 0, 7384, 7383, 0, 0, 7382, 7381, 0, 7380, 0, 0, 0, 0, + 7379, 7378, 0, 7377, 0, 0, 0, 7376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7375, 0, 0, 0, 7374, 0, 7373, 7372, 0, 0, 0, 0, 7371, + 0, 7370, 7369, 0, 0, 7368, 7367, 0, 7366, 0, 0, 0, 0, 0, 0, 7365, + 0, 7364, 7363, 0, 0, 7362, 7361, 0, 7360, 0, 0, 0, 0, 7359, 7358, + 0, 7357, 0, 0, 0, 7356, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7355, 0, + 7354, 7353, 0, 0, 7352, 7351, 0, 7350, 0, 0, 0, 0, 7349, 7348, 0, + 7347, 0, 0, 0, 7346, 0, 0, 0, 0, 0, 0, 0, 0, 7345, 7344, 0, 7343, + 0, 0, 0, 7342, 0, 0, 0, 0, 0, 0, 0, 1604, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7341, 0, 0, 0, 0, 0, 0, 0, 7340, 0, 0, 0, 7339, 0, 7338, 7337, 0, + 0, 0, 0, 0, 0, 0, 0, 7336, 0, 0, 0, 7335, 0, 7334, 7333, 0, 0, 0, + 0, 7332, 0, 7331, 7330, 0, 0, 7329, 7328, 0, 7327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7326, 0, 0, 0, 7325, 0, 7324, 7323, 0, 0, 0, 0, + 7322, 0, 7321, 7320, 0, 0, 7319, 7318, 0, 7317, 0, 0, 0, 0, 0, 0, + 7316, 0, 7315, 7314, 0, 0, 7313, 7312, 0, 7311, 0, 0, 0, 0, 7310, + 7309, 0, 7308, 0, 0, 0, 7307, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7306, 0, 0, 0, 7305, 0, 7304, 7303, 0, 0, 0, 0, 7302, 0, + 7301, 7300, 0, 0, 7299, 7298, 0, 7297, 0, 0, 0, 0, 0, 0, 7296, 0, + 7295, 7294, 0, 0, 7293, 7292, 0, 7291, 0, 0, 0, 0, 7290, 7289, 0, + 7288, 0, 0, 0, 7287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7286, 0, 7285, + 7284, 0, 0, 7283, 7282, 0, 7281, 0, 0, 0, 0, 7280, 7279, 0, 7278, + 0, 0, 0, 7277, 0, 0, 0, 0, 0, 0, 0, 0, 7276, 7275, 0, 7274, 0, 0, + 0, 7273, 0, 0, 0, 0, 0, 0, 0, 7272, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7271, 0, 0, 0, 7270, 0, 7269, + 7268, 0, 0, 0, 0, 7267, 0, 7266, 7265, 0, 0, 7264, 7263, 0, 7262, + 0, 0, 0, 0, 0, 0, 7261, 0, 7260, 7259, 0, 0, 7258, 7257, 0, 7256, + 0, 0, 0, 0, 7255, 7254, 0, 7253, 0, 0, 0, 7252, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7251, 0, 7250, 7249, 0, 0, 7248, 7247, 0, 7246, 0, 0, + 0, 0, 7245, 7244, 0, 7243, 0, 0, 0, 7242, 0, 0, 0, 0, 0, 0, 0, 0, + 7241, 7240, 0, 7239, 0, 0, 0, 7238, 0, 0, 0, 0, 0, 0, 0, 7237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7236, 0, 7235, + 7234, 0, 0, 7233, 7232, 0, 7231, 0, 0, 0, 0, 7230, 7229, 0, 7228, + 0, 0, 0, 7227, 0, 0, 0, 0, 0, 0, 0, 0, 7226, 7225, 0, 7224, 0, 0, + 0, 7223, 0, 0, 0, 0, 0, 0, 0, 7222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7221, 7220, 0, 7219, 0, 0, 0, 7218, 0, 0, 0, 0, + 0, 0, 0, 7217, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1603, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7216, 0, 0, 0, 0, 0, 0, 0, 7215, 0, 0, 0, 7214, 0, 7213, + 7212, 0, 0, 0, 0, 0, 0, 0, 0, 7211, 0, 0, 0, 7210, 0, 7209, 7208, + 0, 0, 0, 0, 7207, 0, 7206, 7205, 0, 0, 7204, 7203, 0, 7202, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7201, 0, 0, 0, 7200, 0, 7199, 7198, 0, 0, + 0, 0, 7197, 0, 7196, 7195, 0, 0, 7194, 7193, 0, 7192, 0, 0, 0, 0, + 0, 0, 7191, 0, 7190, 7189, 0, 0, 7188, 7187, 0, 7186, 0, 0, 0, 0, + 7185, 7184, 0, 7183, 0, 0, 0, 7182, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7181, 0, 0, 0, 7180, 0, 7179, 7178, 0, 0, 0, 0, 7177, + 0, 7176, 7175, 0, 0, 7174, 7173, 0, 7172, 0, 0, 0, 0, 0, 0, 7171, + 0, 7170, 7169, 0, 0, 7168, 7167, 0, 7166, 0, 0, 0, 0, 7165, 7164, + 0, 7163, 0, 0, 0, 7162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7161, 0, + 7160, 7159, 0, 0, 7158, 7157, 0, 7156, 0, 0, 0, 0, 7155, 7154, 0, + 7153, 0, 0, 0, 7152, 0, 0, 0, 0, 0, 0, 0, 0, 7151, 7150, 0, 7149, + 0, 0, 0, 7148, 0, 0, 0, 0, 0, 0, 0, 7147, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7146, 0, 0, 0, 7145, 0, + 7144, 7143, 0, 0, 0, 0, 7142, 0, 7141, 7140, 0, 0, 7139, 7138, 0, + 7137, 0, 0, 0, 0, 0, 0, 7136, 0, 7135, 7134, 0, 0, 7133, 7132, 0, + 7131, 0, 0, 0, 0, 7130, 7129, 0, 7128, 0, 0, 0, 7127, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7126, 0, 7125, 7124, 0, 0, 7123, 7122, 0, 7121, + 0, 0, 0, 0, 7120, 7119, 0, 7118, 0, 0, 0, 7117, 0, 0, 0, 0, 0, 0, + 0, 0, 7116, 7115, 0, 7114, 0, 0, 0, 7113, 0, 0, 0, 0, 0, 0, 0, + 7112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7111, + 0, 7110, 7109, 0, 0, 7108, 7107, 0, 7106, 0, 0, 0, 0, 7105, 7104, + 0, 7103, 0, 0, 0, 7102, 0, 0, 0, 0, 0, 0, 0, 0, 7101, 7100, 0, + 7099, 0, 0, 0, 7098, 0, 0, 0, 0, 0, 0, 0, 7097, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7096, 7095, 0, 7094, 0, 0, 0, 7093, + 0, 0, 0, 0, 0, 0, 0, 7092, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7090, + 0, 0, 0, 7089, 0, 7088, 7087, 0, 0, 0, 0, 7086, 0, 7085, 7084, 0, + 0, 7083, 7082, 0, 7081, 0, 0, 0, 0, 0, 0, 7080, 0, 7079, 7078, 0, + 0, 7077, 7076, 0, 7075, 0, 0, 0, 0, 7074, 7073, 0, 7072, 0, 0, 0, + 7071, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7070, 0, 7069, 7068, 0, 0, + 7067, 7066, 0, 7065, 0, 0, 0, 0, 7064, 7063, 0, 7062, 0, 0, 0, + 7061, 0, 0, 0, 0, 0, 0, 0, 0, 7060, 7059, 0, 7058, 0, 0, 0, 7057, + 0, 0, 0, 0, 0, 0, 0, 7056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7055, 0, 7054, 7053, 0, 0, 7052, 7051, 0, 7050, 0, + 0, 0, 0, 7049, 7048, 0, 7047, 0, 0, 0, 7046, 0, 0, 0, 0, 0, 0, 0, + 0, 7045, 7044, 0, 7043, 0, 0, 0, 7042, 0, 0, 0, 0, 0, 0, 0, 7041, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7040, 7039, 0, + 7038, 0, 0, 0, 7037, 0, 0, 0, 0, 0, 0, 0, 7036, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 7034, 0, 7033, 7032, 0, 0, 7031, 7030, 0, 7029, 0, 0, 0, 0, + 7028, 7027, 0, 7026, 0, 0, 0, 7025, 0, 0, 0, 0, 0, 0, 0, 0, 7024, + 7023, 0, 7022, 0, 0, 0, 7021, 0, 0, 0, 0, 0, 0, 0, 7020, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7019, 7018, 0, 7017, 0, 0, + 0, 7016, 0, 0, 0, 0, 0, 0, 0, 7015, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7013, 7012, 0, + 7011, 0, 0, 0, 7010, 0, 0, 0, 0, 0, 0, 0, 7009, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 7008, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1602, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7007, 0, 0, 0, 0, 0, 0, 0, + 7006, 0, 0, 0, 7005, 0, 7004, 7003, 0, 0, 0, 0, 0, 0, 0, 0, 7002, + 0, 0, 0, 7001, 0, 7000, 6999, 0, 0, 0, 0, 6998, 0, 6997, 6996, 0, + 0, 6995, 6994, 0, 6993, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6992, 0, 0, + 0, 6991, 0, 6990, 6989, 0, 0, 0, 0, 6988, 0, 6987, 6986, 0, 0, + 6985, 6984, 0, 6983, 0, 0, 0, 0, 0, 0, 6982, 0, 6981, 6980, 0, 0, + 6979, 6978, 0, 6977, 0, 0, 0, 0, 6976, 6975, 0, 6974, 0, 0, 0, + 6973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6972, 0, 0, 0, + 6971, 0, 6970, 6969, 0, 0, 0, 0, 6968, 0, 6967, 6966, 0, 0, 6965, + 6964, 0, 6963, 0, 0, 0, 0, 0, 0, 6962, 0, 6961, 6960, 0, 0, 6959, + 6958, 0, 6957, 0, 0, 0, 0, 6956, 6955, 0, 6954, 0, 0, 0, 6953, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6952, 0, 6951, 6950, 0, 0, 6949, 6948, + 0, 6947, 0, 0, 0, 0, 6946, 6945, 0, 6944, 0, 0, 0, 6943, 0, 0, 0, + 0, 0, 0, 0, 0, 6942, 6941, 0, 6940, 0, 0, 0, 6939, 0, 0, 0, 0, 0, + 0, 0, 6938, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6937, 0, 0, 0, 6936, 0, 6935, 6934, 0, 0, 0, 0, 6933, + 0, 6932, 6931, 0, 0, 6930, 6929, 0, 6928, 0, 0, 0, 0, 0, 0, 6927, + 0, 6926, 6925, 0, 0, 6924, 6923, 0, 6922, 0, 0, 0, 0, 6921, 6920, + 0, 6919, 0, 0, 0, 6918, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6917, 0, + 6916, 6915, 0, 0, 6914, 6913, 0, 6912, 0, 0, 0, 0, 6911, 6910, 0, + 6909, 0, 0, 0, 6908, 0, 0, 0, 0, 0, 0, 0, 0, 6907, 6906, 0, 6905, + 0, 0, 0, 6904, 0, 0, 0, 0, 0, 0, 0, 6903, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6902, 0, 6901, 6900, 0, 0, 6899, + 6898, 0, 6897, 0, 0, 0, 0, 6896, 6895, 0, 6894, 0, 0, 0, 6893, 0, + 0, 0, 0, 0, 0, 0, 0, 6892, 6891, 0, 6890, 0, 0, 0, 6889, 0, 0, 0, + 0, 0, 0, 0, 6888, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6887, 6886, 0, 6885, 0, 0, 0, 6884, 0, 0, 0, 0, 0, 0, 0, 6883, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6882, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6881, 0, 0, 0, 6880, 0, 6879, 6878, + 0, 0, 0, 0, 6877, 0, 6876, 6875, 0, 0, 6874, 6873, 0, 6872, 0, 0, + 0, 0, 0, 0, 6871, 0, 6870, 6869, 0, 0, 6868, 6867, 0, 6866, 0, 0, + 0, 0, 6865, 6864, 0, 6863, 0, 0, 0, 6862, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6861, 0, 6860, 6859, 0, 0, 6858, 6857, 0, 6856, 0, 0, 0, 0, + 6855, 6854, 0, 6853, 0, 0, 0, 6852, 0, 0, 0, 0, 0, 0, 0, 0, 6851, + 6850, 0, 6849, 0, 0, 0, 6848, 0, 0, 0, 0, 0, 0, 0, 6847, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6846, 0, 6845, 6844, + 0, 0, 6843, 6842, 0, 6841, 0, 0, 0, 0, 6840, 6839, 0, 6838, 0, 0, + 0, 6837, 0, 0, 0, 0, 0, 0, 0, 0, 6836, 6835, 0, 6834, 0, 0, 0, + 6833, 0, 0, 0, 0, 0, 0, 0, 6832, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6831, 6830, 0, 6829, 0, 0, 0, 6828, 0, 0, 0, 0, 0, + 0, 0, 6827, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6826, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6825, 0, 6824, 6823, 0, 0, 6822, + 6821, 0, 6820, 0, 0, 0, 0, 6819, 6818, 0, 6817, 0, 0, 0, 6816, 0, + 0, 0, 0, 0, 0, 0, 0, 6815, 6814, 0, 6813, 0, 0, 0, 6812, 0, 0, 0, + 0, 0, 0, 0, 6811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6810, 6809, 0, 6808, 0, 0, 0, 6807, 0, 0, 0, 0, 0, 0, 0, 6806, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6805, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6804, 6803, 0, 6802, 0, 0, 0, 6801, 0, 0, 0, 0, 0, 0, + 0, 6800, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6799, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6797, 0, 0, 0, 6796, 0, + 6795, 6794, 0, 0, 0, 0, 6793, 0, 6792, 6791, 0, 0, 6790, 6789, 0, + 6788, 0, 0, 0, 0, 0, 0, 6787, 0, 6786, 6785, 0, 0, 6784, 6783, 0, + 6782, 0, 0, 0, 0, 6781, 6780, 0, 6779, 0, 0, 0, 6778, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6777, 0, 6776, 6775, 0, 0, 6774, 6773, 0, 6772, + 0, 0, 0, 0, 6771, 6770, 0, 6769, 0, 0, 0, 6768, 0, 0, 0, 0, 0, 0, + 0, 0, 6767, 6766, 0, 6765, 0, 0, 0, 6764, 0, 0, 0, 0, 0, 0, 0, + 6763, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6762, + 0, 6761, 6760, 0, 0, 6759, 6758, 0, 6757, 0, 0, 0, 0, 6756, 6755, + 0, 6754, 0, 0, 0, 6753, 0, 0, 0, 0, 0, 0, 0, 0, 6752, 6751, 0, + 6750, 0, 0, 0, 6749, 0, 0, 0, 0, 0, 0, 0, 6748, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6747, 6746, 0, 6745, 0, 0, 0, 6744, + 0, 0, 0, 0, 0, 0, 0, 6743, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6742, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6741, 0, 6740, + 6739, 0, 0, 6738, 6737, 0, 6736, 0, 0, 0, 0, 6735, 6734, 0, 6733, + 0, 0, 0, 6732, 0, 0, 0, 0, 0, 0, 0, 0, 6731, 6730, 0, 6729, 0, 0, + 0, 6728, 0, 0, 0, 0, 0, 0, 0, 6727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6726, 6725, 0, 6724, 0, 0, 0, 6723, 0, 0, 0, 0, + 0, 0, 0, 6722, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6721, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6720, 6719, 0, 6718, 0, 0, 0, 6717, + 0, 0, 0, 0, 0, 0, 0, 6716, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6714, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6713, 0, 6712, 6711, + 0, 0, 6710, 6709, 0, 6708, 0, 0, 0, 0, 6707, 6706, 0, 6705, 0, 0, + 0, 6704, 0, 0, 0, 0, 0, 0, 0, 0, 6703, 6702, 0, 6701, 0, 0, 0, + 6700, 0, 0, 0, 0, 0, 0, 0, 6699, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6698, 6697, 0, 6696, 0, 0, 0, 6695, 0, 0, 0, 0, 0, + 0, 0, 6694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6693, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6692, 6691, 0, 6690, 0, 0, 0, 6689, 0, + 0, 0, 0, 0, 0, 0, 6688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6686, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6685, 6684, 0, 6683, 0, 0, 0, + 6682, 0, 0, 0, 0, 0, 0, 0, 6681, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6679, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1609, 0, 0, 0, 0, 0, 0, 0, 6678, 0, 0, 0, 6677, 0, + 6676, 6675, 0, 0, 0, 0, 0, 0, 0, 0, 6674, 0, 0, 0, 6673, 0, 6672, + 6671, 0, 0, 0, 0, 6670, 0, 6669, 6668, 0, 0, 6667, 6666, 0, 6665, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6664, 0, 0, 0, 6663, 0, 6662, 6661, + 0, 0, 0, 0, 6660, 0, 6659, 6658, 0, 0, 6657, 6656, 0, 6655, 0, 0, + 0, 0, 0, 0, 6654, 0, 6653, 6652, 0, 0, 6651, 6650, 0, 6649, 0, 0, + 0, 0, 6648, 6647, 0, 6646, 0, 0, 0, 6645, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6644, 0, 0, 0, 6643, 0, 6642, 6641, 0, 0, 0, 0, + 6640, 0, 6639, 6638, 0, 0, 6637, 6636, 0, 6635, 0, 0, 0, 0, 0, 0, + 6634, 0, 6633, 6632, 0, 0, 6631, 6630, 0, 6629, 0, 0, 0, 0, 6628, + 6627, 0, 6626, 0, 0, 0, 6625, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6624, + 0, 6623, 6622, 0, 0, 6621, 6620, 0, 6619, 0, 0, 0, 0, 6618, 6617, + 0, 6616, 0, 0, 0, 6615, 0, 0, 0, 0, 0, 0, 0, 0, 6614, 6613, 0, + 6612, 0, 0, 0, 6611, 0, 0, 0, 0, 0, 0, 0, 6610, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6609, 0, 0, 0, + 6608, 0, 6607, 6606, 0, 0, 0, 0, 6605, 0, 6604, 6603, 0, 0, 6602, + 6601, 0, 6600, 0, 0, 0, 0, 0, 0, 6599, 0, 6598, 6597, 0, 0, 6596, + 6595, 0, 6594, 0, 0, 0, 0, 6593, 6592, 0, 6591, 0, 0, 0, 6590, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6589, 0, 6588, 6587, 0, 0, 6586, 6585, + 0, 6584, 0, 0, 0, 0, 6583, 6582, 0, 6581, 0, 0, 0, 6580, 0, 0, 0, + 0, 0, 0, 0, 0, 6579, 6578, 0, 6577, 0, 0, 0, 6576, 0, 0, 0, 0, 0, + 0, 0, 6575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6574, 0, 6573, 6572, 0, 0, 6571, 6570, 0, 6569, 0, 0, 0, 0, 6568, + 6567, 0, 6566, 0, 0, 0, 6565, 0, 0, 0, 0, 0, 0, 0, 0, 6564, 6563, + 0, 6562, 0, 0, 0, 6561, 0, 0, 0, 0, 0, 0, 0, 6560, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6559, 6558, 0, 6557, 0, 0, 0, + 6556, 0, 0, 0, 0, 0, 0, 0, 6555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6553, 0, 0, 0, 6552, 0, 6551, 6550, 0, 0, 0, 0, 6549, 0, 6548, + 6547, 0, 0, 6546, 6545, 0, 6544, 0, 0, 0, 0, 0, 0, 6543, 0, 6542, + 6541, 0, 0, 6540, 6539, 0, 6538, 0, 0, 0, 0, 6537, 6536, 0, 6535, + 0, 0, 0, 6534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6533, 0, 6532, 6531, + 0, 0, 6530, 6529, 0, 6528, 0, 0, 0, 0, 6527, 6526, 0, 6525, 0, 0, + 0, 6524, 0, 0, 0, 0, 0, 0, 0, 0, 6523, 6522, 0, 6521, 0, 0, 0, + 6520, 0, 0, 0, 0, 0, 0, 0, 6519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6518, 0, 6517, 6516, 0, 0, 6515, 6514, 0, + 6513, 0, 0, 0, 0, 6512, 6511, 0, 6510, 0, 0, 0, 6509, 0, 0, 0, 0, + 0, 0, 0, 0, 6508, 6507, 0, 6506, 0, 0, 0, 6505, 0, 0, 0, 0, 0, 0, + 0, 6504, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6503, + 6502, 0, 6501, 0, 0, 0, 6500, 0, 0, 0, 0, 0, 0, 0, 6499, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6498, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6497, 0, 6496, 6495, 0, 0, 6494, 6493, 0, 6492, 0, 0, + 0, 0, 6491, 6490, 0, 6489, 0, 0, 0, 6488, 0, 0, 0, 0, 0, 0, 0, 0, + 6487, 6486, 0, 6485, 0, 0, 0, 6484, 0, 0, 0, 0, 0, 0, 0, 6483, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6482, 6481, 0, 6480, + 0, 0, 0, 6479, 0, 0, 0, 0, 0, 0, 0, 6478, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6477, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6476, + 6475, 0, 6474, 0, 0, 0, 6473, 0, 0, 0, 0, 0, 0, 0, 6472, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6471, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6469, 0, 0, 0, 6468, 0, 6467, 6466, 0, 0, 0, + 0, 6465, 0, 6464, 6463, 0, 0, 6462, 6461, 0, 6460, 0, 0, 0, 0, 0, + 0, 6459, 0, 6458, 6457, 0, 0, 6456, 6455, 0, 6454, 0, 0, 0, 0, + 6453, 6452, 0, 6451, 0, 0, 0, 6450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6449, 0, 6448, 6447, 0, 0, 6446, 6445, 0, 6444, 0, 0, 0, 0, 6443, + 6442, 0, 6441, 0, 0, 0, 6440, 0, 0, 0, 0, 0, 0, 0, 0, 6439, 6438, + 0, 6437, 0, 0, 0, 6436, 0, 0, 0, 0, 0, 0, 0, 6435, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6434, 0, 6433, 6432, 0, 0, + 6431, 6430, 0, 6429, 0, 0, 0, 0, 6428, 6427, 0, 6426, 0, 0, 0, + 6425, 0, 0, 0, 0, 0, 0, 0, 0, 6424, 6423, 0, 6422, 0, 0, 0, 6421, + 0, 0, 0, 0, 0, 0, 0, 6420, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6419, 6418, 0, 6417, 0, 0, 0, 6416, 0, 0, 0, 0, 0, 0, 0, + 6415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6414, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6413, 0, 6412, 6411, 0, 0, 6410, 6409, + 0, 6408, 0, 0, 0, 0, 6407, 6406, 0, 6405, 0, 0, 0, 6404, 0, 0, 0, + 0, 0, 0, 0, 0, 6403, 6402, 0, 6401, 0, 0, 0, 6400, 0, 0, 0, 0, 0, + 0, 0, 6399, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6398, + 6397, 0, 6396, 0, 0, 0, 6395, 0, 0, 0, 0, 0, 0, 0, 6394, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6393, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6392, 6391, 0, 6390, 0, 0, 0, 6389, 0, 0, 0, 0, 0, 0, 0, + 6388, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6387, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6386, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6385, 0, 6384, 6383, 0, 0, 6382, 6381, 0, + 6380, 0, 0, 0, 0, 6379, 6378, 0, 6377, 0, 0, 0, 6376, 0, 0, 0, 0, + 0, 0, 0, 0, 6375, 6374, 0, 6373, 0, 0, 0, 6372, 0, 0, 0, 0, 0, 0, + 0, 6371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6370, + 6369, 0, 6368, 0, 0, 0, 6367, 0, 0, 0, 0, 0, 0, 0, 6366, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6365, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6364, 6363, 0, 6362, 0, 0, 0, 6361, 0, 0, 0, 0, 0, 0, 0, + 6360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6359, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6357, 6356, 0, 6355, 0, 0, 0, 6354, 0, 0, 0, 0, + 0, 0, 0, 6353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6352, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6351, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6349, 0, 0, 0, 6348, 0, 6347, + 6346, 0, 0, 0, 0, 6345, 0, 6344, 6343, 0, 0, 6342, 6341, 0, 6340, + 0, 0, 0, 0, 0, 0, 6339, 0, 6338, 6337, 0, 0, 6336, 6335, 0, 6334, + 0, 0, 0, 0, 6333, 6332, 0, 6331, 0, 0, 0, 6330, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6329, 0, 6328, 6327, 0, 0, 6326, 6325, 0, 6324, 0, 0, + 0, 0, 6323, 6322, 0, 6321, 0, 0, 0, 6320, 0, 0, 0, 0, 0, 0, 0, 0, + 6319, 6318, 0, 6317, 0, 0, 0, 6316, 0, 0, 0, 0, 0, 0, 0, 6315, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6314, 0, 6313, + 6312, 0, 0, 6311, 6310, 0, 6309, 0, 0, 0, 0, 6308, 6307, 0, 6306, + 0, 0, 0, 6305, 0, 0, 0, 0, 0, 0, 0, 0, 6304, 6303, 0, 6302, 0, 0, + 0, 6301, 0, 0, 0, 0, 0, 0, 0, 6300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6299, 6298, 0, 6297, 0, 0, 0, 6296, 0, 0, 0, 0, + 0, 0, 0, 6295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6294, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6293, 0, 6292, 6291, 0, 0, + 6290, 6289, 0, 6288, 0, 0, 0, 0, 6287, 6286, 0, 6285, 0, 0, 0, + 6284, 0, 0, 0, 0, 0, 0, 0, 0, 6283, 6282, 0, 6281, 0, 0, 0, 6280, + 0, 0, 0, 0, 0, 0, 0, 6279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6278, 6277, 0, 6276, 0, 0, 0, 6275, 0, 0, 0, 0, 0, 0, 0, + 6274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6273, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6272, 6271, 0, 6270, 0, 0, 0, 6269, 0, 0, 0, + 0, 0, 0, 0, 6268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6267, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6266, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6265, 0, 6264, 6263, 0, 0, + 6262, 6261, 0, 6260, 0, 0, 0, 0, 6259, 6258, 0, 6257, 0, 0, 0, + 6256, 0, 0, 0, 0, 0, 0, 0, 0, 6255, 6254, 0, 6253, 0, 0, 0, 6252, + 0, 0, 0, 0, 0, 0, 0, 6251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6250, 6249, 0, 6248, 0, 0, 0, 6247, 0, 0, 0, 0, 0, 0, 0, + 6246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6245, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6244, 6243, 0, 6242, 0, 0, 0, 6241, 0, 0, 0, + 0, 0, 0, 0, 6240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6238, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6237, 6236, 0, 6235, 0, 0, 0, + 6234, 0, 0, 0, 0, 0, 0, 0, 6233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6229, 0, 6228, 6227, 0, + 0, 6226, 6225, 0, 6224, 0, 0, 0, 0, 6223, 6222, 0, 6221, 0, 0, 0, + 6220, 0, 0, 0, 0, 0, 0, 0, 0, 6219, 6218, 0, 6217, 0, 0, 0, 6216, + 0, 0, 0, 0, 0, 0, 0, 6215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6214, 6213, 0, 6212, 0, 0, 0, 6211, 0, 0, 0, 0, 0, 0, 0, + 6210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6209, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6208, 6207, 0, 6206, 0, 0, 0, 6205, 0, 0, 0, + 0, 0, 0, 0, 6204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6202, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6201, 6200, 0, 6199, 0, 0, 0, + 6198, 0, 0, 0, 0, 0, 0, 0, 6197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6195, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6194, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6193, 6192, 0, 6191, 0, 0, 0, + 6190, 0, 0, 0, 0, 0, 0, 0, 6189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6187, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6186, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1600 + ], + hash: [ + 148, 2934, 166, 5107, 4628, 166, 166, 166, 166, 3033, 166, 4692, 166, 5571, 2225, 166, + 5340, 3423, 166, 3191, 1752, 166, 5212, 166, 166, 3520, 166, 166, 166, 1867, 166, 3313, + 166, 3461, 166, 166, 3174, 1737, 5010, 5008, 166, 4344, 2868, 3877, 166, 4089, 166, 5041, + 4748, 4073, 4066, 5298, 3502, 1812, 166, 5309, 166, 233, 3493, 166, 166, 3728, 5236, 4252, + 4010, 2149, 166, 164, 4580, 3039, 4804, 3874, 166, 6170, 2812, 166, 4334, 166, 166, 166, + 166, 166, 166, 1862, 224, 2131, 6081, 166, 2710, 166, 166, 166, 4765, 166, 1964, 5060, + 166, 1897, 166, 3987, 166, 166, 5566, 2021, 166, 45, 166, 166, 3283, 3932, 166, 166, + 3519, 166, 166, 291, 166, 166, 5132, 2800, 166, 166, 166, 5531, 4054, 166, 3509, 166, + 166, 4908, 3028, 1756, 1910, 4671, 2729, 5224, 166, 121, 3327, 3317, 166, 181, 2371, 5541, + 166, 1787, 2666, 5134, 5698, 166, 5480, 3870, 166, 3823, 166, 3165, 5343, 5123, 5089, 166, + 2422, 3724, 166, 2735, 1953, 5724, 4444, 4871, 166, 166, 5001, 5512, 3133, 5171, 166, 2216, + 166, 4877, 4542, 166, 166, 166, 5270, 166, 166, 166, 1922, 69, 3547, 166, 166, 166, + 166, 166, 231, 4547, 5155, 3357, 3464, 166, 72, 3332, 166, 4392, 5971, 3896, 4451, 3173, + 2569, 166, 4466, 2518, 1698, 2850, 5349, 166, 166, 4457, 5062, 166, 2202, 1650, 2191, 166, + 1950, 2583, 166, 5293, 2032, 5893, 166, 3994, 5392, 3878, 96, 166, 166, 3195, 166, 4001, + 1900, 2513, 6027, 166, 166, 166, 166, 5407, 166, 166, 2332, 5125, 5891, 3096, 3172, 166, + 166, 3065, 166, 166, 4535, 166, 166, 166, 4553, 3131, 3693, 166, 2255, 2613, 166, 166, + 166, 166, 2866, 166, 166, 166, 2940, 5333, 3199, 166, 2628, 4312, 166, 166, 1794, 4681, + 2058, 3606, 166, 166, 3542, 2166, 4696, 2520, 166, 4739, 166, 2563, 166, 166, 3681, 166, + 166, 166, 4127, 1967, 2972, 166, 5227, 166, 166, 5551, 4255, 56, 166, 5553, 3219, 4367, + 166, 3218, 4749, 2886, 3695, 3711, 2228, 166, 166, 166, 2268, 5054, 3749, 4825, 166, 4933, + 4992, 4530, 166, 4892, 3400, 166, 197, 166, 6078, 166, 166, 3971, 166, 166, 5357, 1852, + 3377, 166, 5196, 3740, 5320, 166, 166, 3099, 166, 4562, 6061, 3294, 166, 166, 166, 166, + 3266, 3627, 2567, 166, 228, 2773, 166, 166, 53, 1833, 2401, 124, 166, 4272, 3922, 5959, + 2903, 3923, 166, 6155, 166, 166, 166, 166, 216, 166, 5247, 166, 5591, 166, 166, 82, + 87, 4526, 166, 166, 5439, 166, 4935, 166, 3187, 1869, 166, 1764, 5500, 6023, 3356, 166, + 3350, 2457, 2455, 166, 1637, 166, 3342, 166, 166, 3355, 5154, 166, 276, 166, 166, 166, + 3371, 5969, 166, 1665, 166, 166, 166, 166, 166, 166, 166, 4092, 1712, 3122, 5086, 166, + 166, 4906, 166, 2591, 166, 166, 166, 1894, 2997, 166, 4476, 4384, 166, 4747, 4109, 2655, + 166, 5978, 1636, 4898, 166, 166, 166, 166, 166, 166, 166, 5207, 166, 166, 3712, 3876, + 91, 5876, 3786, 5998, 166, 166, 166, 4391, 166, 166, 2832, 2220, 4435, 166, 166, 5796, + 3156, 6112, 166, 1643, 1821, 3129, 166, 4200, 166, 5857, 166, 166, 2351, 5902, 1855, 5043, + 166, 3167, 5191, 3996, 5718, 4876, 3071, 2965, 5735, 5930, 6149, 2345, 3297, 3822, 166, 166, + 307, 6019, 1859, 2981, 4914, 3320, 6165, 2328, 140, 2372, 308, 166, 2280, 5081, 166, 3275, + 166, 159, 2399, 2327, 5489, 4690, 6059, 4492, 4269, 6058, 166, 19, 166, 3323, 5708, 128, + 4812, 2949, 166, 166, 2890, 2630, 5237, 166, 256, 3673, 4621, 5380, 166, 3353, 166, 1651, + 2573, 1635, 4011, 3429, 3370, 3720, 166, 166, 6108, 3848, 5104, 2851, 1998, 166, 166, 5106, + 20, 166, 2633, 166, 166, 166, 166, 5662, 125, 3651, 1731, 4702, 166, 3197, 166, 2947, + 3046, 4196, 2185, 6100, 166, 2602, 2908, 2487, 166, 5232, 166, 4028, 5919, 166, 2680, 3608, + 3252, 166, 4899, 166, 166, 166, 166, 2529, 166, 166, 166, 166, 166, 2534, 166, 2299, + 4076, 166, 3643, 166, 3921, 166, 166, 166, 1939, 2124, 1829, 2436, 3892, 166, 3481, 271, + 5307, 1697, 166, 166, 5098, 2906, 5545, 166, 5980, 3203, 166, 1903, 4626, 4674, 6118, 6097, + 5926, 4136, 1677, 3232, 4720, 166, 166, 166, 229, 2012, 3620, 166, 3798, 166, 166, 2609, + 3489, 3809, 166, 166, 166, 166, 166, 166, 166, 5826, 166, 166, 166, 4903, 166, 166, + 166, 166, 6168, 166, 5052, 5044, 5644, 2375, 2677, 4012, 3062, 5831, 4752, 166, 4125, 2610, + 2062, 3238, 292, 2533, 5872, 51, 166, 1947, 4225, 166, 2288, 4845, 166, 5788, 166, 5717, + 166, 166, 5549, 5619, 166, 4165, 166, 2721, 2311, 5501, 4416, 4383, 166, 166, 3068, 5499, + 5936, 166, 4204, 4766, 4688, 1870, 5220, 166, 166, 166, 166, 237, 2523, 6039, 3061, 2793, + 3998, 166, 2545, 2309, 3144, 3679, 3969, 166, 166, 166, 4379, 3574, 205, 2808, 5822, 166, + 166, 2188, 4823, 4990, 5561, 5711, 166, 5627, 6034, 5253, 3783, 5047, 4405, 166, 59, 1755, + 3178, 318, 166, 4710, 2933, 3409, 6062, 2821, 166, 6099, 166, 4178, 166, 166, 4122, 36, + 4779, 166, 166, 4323, 3073, 5410, 2101, 166, 166, 44, 5690, 166, 3265, 166, 5222, 5909, + 1838, 166, 4755, 2215, 166, 4082, 166, 166, 3210, 5140, 3124, 5238, 166, 5913, 2321, 166, + 2416, 5976, 3918, 5078, 4218, 5703, 4897, 6011, 5685, 2214, 166, 166, 6180, 5175, 1715, 166, + 166, 3760, 4497, 1808, 4826, 166, 2540, 166, 166, 5513, 4971, 5915, 166, 166, 2525, 166, + 4480, 42, 232, 2412, 2797, 3229, 5263, 2852, 5543, 2126, 3562, 166, 2872, 4695, 5985, 5136, + 2714, 4262, 5473, 166, 4160, 4347, 166, 166, 166, 166, 5271, 166, 166, 5108, 166, 166, + 166, 166, 5437, 4875, 3963, 4362, 5820, 5559, 4890, 4728, 166, 166, 2692, 166, 4870, 3591, + 5472, 166, 2690, 166, 5854, 3817, 166, 280, 166, 166, 113, 4128, 3396, 166, 4264, 5058, + 2283, 166, 2281, 4916, 5671, 166, 2708, 166, 166, 4589, 166, 166, 4689, 166, 1686, 166, + 166, 166, 166, 166, 1774, 166, 166, 166, 5651, 3777, 2234, 166, 3864, 18, 3589, 4592, + 4777, 166, 166, 5254, 4245, 166, 166, 166, 4368, 5172, 3522, 166, 4306, 153, 5230, 166, + 5598, 5420, 311, 2414, 4159, 2985, 5137, 166, 2179, 1801, 166, 4595, 2083, 2020, 166, 3602, + 2170, 4259, 3048, 166, 166, 4193, 2350, 166, 166, 2702, 166, 4521, 166, 166, 2496, 166, + 4593, 2006, 166, 166, 2292, 4135, 166, 6069, 4623, 166, 166, 4827, 3995, 4291, 3243, 166, + 166, 166, 5622, 166, 3539, 166, 166, 4915, 4373, 2479, 3775, 6008, 5838, 4321, 1612, 5530, + 166, 3773, 4267, 4086, 3081, 2261, 166, 166, 4785, 4641, 5292, 166, 4820, 5612, 5556, 166, + 166, 166, 4396, 6084, 3414, 166, 3331, 2380, 5921, 4315, 2340, 166, 5511, 166, 4713, 3754, + 2912, 2553, 166, 3468, 5388, 166, 1932, 3540, 5834, 166, 166, 3186, 5258, 166, 4107, 166, + 166, 166, 166, 166, 166, 166, 166, 2108, 12, 2368, 2789, 166, 166, 4148, 1878, 166, + 166, 2324, 4179, 2945, 2531, 166, 166, 166, 4485, 3765, 2308, 166, 2754, 166, 6102, 166, + 1921, 260, 2241, 166, 2592, 166, 166, 166, 4964, 166, 3055, 5261, 4943, 2916, 166, 201, + 5728, 166, 5759, 4314, 4730, 6024, 166, 4926, 4762, 1834, 2055, 166, 40, 166, 5416, 166, + 3722, 2360, 1928, 166, 4889, 4590, 5550, 3498, 166, 6003, 2029, 4106, 4346, 3758, 166, 2753, + 103, 1891, 5067, 166, 3398, 2079, 5784, 3074, 3787, 166, 166, 3936, 166, 5766, 166, 4847, + 3928, 5119, 166, 5181, 4602, 2605, 5712, 4523, 166, 166, 4717, 166, 2227, 2181, 166, 4678, + 166, 166, 4901, 166, 4980, 166, 166, 166, 166, 5806, 2894, 5631, 4995, 2608, 166, 166, + 166, 3917, 166, 3417, 166, 2795, 1655, 3189, 3364, 166, 4839, 3510, 4212, 5641, 6091, 138, + 166, 166, 3343, 4620, 2722, 4566, 166, 3518, 3424, 166, 166, 1653, 166, 5057, 166, 5375, + 4833, 166, 4273, 4348, 166, 166, 166, 4912, 166, 3662, 166, 4281, 166, 5169, 166, 5883, + 2737, 2572, 4685, 4068, 166, 4214, 166, 166, 2409, 166, 166, 4571, 166, 5624, 5722, 5949, + 166, 3675, 166, 166, 5109, 3428, 166, 166, 5446, 166, 3290, 166, 3309, 166, 166, 4776, + 166, 166, 166, 166, 166, 166, 5617, 2860, 166, 166, 166, 166, 3629, 1741, 166, 166, + 183, 4973, 3047, 2854, 75, 2035, 3652, 2159, 166, 4150, 6037, 3225, 4519, 1902, 2678, 2413, + 1961, 166, 166, 166, 166, 4972, 1847, 166, 5636, 4017, 166, 3345, 166, 4520, 166, 2861, + 166, 3092, 6060, 157, 2542, 2298, 4496, 166, 2607, 6110, 5707, 2314, 166, 166, 273, 166, + 5952, 166, 4957, 322, 6065, 2272, 6140, 2438, 3458, 3287, 166, 166, 166, 166, 2684, 288, + 3354, 166, 166, 3983, 1702, 166, 166, 166, 2393, 2435, 4202, 3308, 5805, 5085, 166, 166, + 1938, 166, 166, 2171, 5892, 2337, 166, 4648, 3116, 2486, 4363, 3567, 166, 166, 2822, 2041, + 166, 4703, 3956, 5192, 166, 3975, 5720, 3647, 2134, 5932, 166, 166, 5160, 263, 166, 166, + 166, 4549, 166, 166, 1701, 3086, 166, 166, 4737, 166, 2252, 166, 170, 166, 166, 166, + 2301, 5478, 166, 166, 5979, 3007, 166, 166, 166, 4104, 166, 2469, 2700, 166, 4998, 3376, + 166, 1840, 166, 166, 4470, 166, 5235, 3930, 166, 166, 166, 6031, 166, 166, 166, 3827, + 4700, 166, 166, 166, 166, 166, 166, 4103, 3976, 166, 166, 166, 166, 5027, 4322, 5130, + 166, 4741, 2132, 4118, 3080, 4137, 166, 6179, 166, 166, 166, 166, 166, 6120, 4188, 166, + 2251, 166, 3253, 166, 4887, 166, 4293, 5241, 166, 166, 166, 166, 166, 166, 5076, 166, + 166, 4177, 166, 221, 166, 2757, 5377, 166, 43, 166, 166, 3180, 5540, 166, 213, 4541, + 166, 166, 166, 166, 166, 1641, 166, 4578, 4639, 166, 166, 1683, 2139, 1689, 5249, 5773, + 5226, 166, 2820, 166, 5516, 5045, 166, 4896, 5657, 5189, 166, 5770, 2725, 5148, 166, 166, + 166, 2929, 166, 3479, 166, 166, 4564, 3752, 4305, 4232, 166, 5906, 1779, 166, 2709, 4941, + 4342, 166, 4882, 166, 4277, 2322, 166, 4879, 1610, 3038, 166, 3762, 2054, 5652, 166, 4524, + 3820, 4806, 166, 166, 104, 3416, 4869, 4243, 4854, 166, 4114, 166, 2121, 166, 3463, 3556, + 166, 4795, 166, 2118, 3920, 166, 166, 4667, 5046, 166, 166, 2088, 4360, 5787, 2198, 4233, + 5552, 3970, 3523, 2037, 5791, 166, 166, 4299, 2336, 166, 166, 166, 4173, 4588, 3626, 5187, + 166, 3363, 4611, 294, 4962, 5243, 2719, 6022, 4976, 3559, 166, 2662, 5779, 6151, 166, 3527, + 166, 5404, 6132, 1839, 166, 3090, 166, 2253, 166, 5441, 5518, 6049, 166, 166, 6136, 3026, + 3474, 5960, 166, 3937, 4105, 166, 2348, 2039, 4738, 166, 5233, 3882, 3840, 166, 278, 190, + 166, 5751, 4313, 166, 3855, 166, 166, 6171, 166, 166, 5381, 3941, 166, 166, 166, 166, + 3334, 166, 2038, 6088, 166, 1918, 5037, 2325, 2378, 4894, 3514, 3715, 5168, 166, 166, 4083, + 2873, 166, 166, 166, 2693, 166, 3543, 166, 2577, 3013, 166, 166, 4594, 2622, 166, 166, + 166, 3401, 166, 166, 5447, 5328, 5547, 6133, 2335, 3739, 166, 166, 166, 166, 5614, 3492, + 3610, 3466, 166, 5336, 4354, 166, 4662, 166, 166, 4283, 166, 166, 303, 5904, 166, 2717, + 166, 166, 2276, 5564, 2386, 5661, 2040, 166, 1630, 4652, 166, 4840, 166, 110, 5329, 3979, + 5734, 2550, 166, 166, 6007, 5999, 2978, 4771, 5360, 166, 4023, 166, 166, 5920, 4065, 166, + 3880, 166, 5422, 1813, 166, 6166, 73, 166, 166, 3669, 5762, 5077, 166, 2953, 85, 166, + 3517, 166, 116, 166, 2738, 3710, 166, 1634, 166, 166, 166, 2290, 3001, 166, 166, 3037, + 2400, 3410, 166, 1791, 4231, 166, 3546, 5009, 5299, 2807, 166, 166, 1675, 1619, 2374, 3093, + 5302, 3278, 2330, 5301, 2343, 2307, 3274, 5017, 2265, 3700, 2465, 166, 139, 4292, 166, 5056, + 3952, 166, 4528, 2388, 1886, 166, 166, 3016, 3698, 5881, 166, 2379, 3223, 166, 166, 3847, + 2407, 5493, 3183, 3307, 166, 265, 166, 2421, 6161, 2057, 5363, 3863, 2474, 166, 166, 5427, + 166, 2140, 2955, 166, 3070, 4237, 5018, 5988, 5570, 275, 4862, 2357, 166, 195, 166, 2593, + 6047, 166, 2878, 166, 166, 2781, 3004, 4180, 166, 5593, 166, 5973, 2544, 5064, 166, 4324, + 4701, 166, 3084, 166, 166, 5372, 4725, 166, 5650, 166, 166, 2786, 166, 3781, 3583, 3682, + 1850, 4420, 3296, 5173, 4461, 166, 166, 166, 2984, 166, 93, 166, 166, 4336, 5943, 2922, + 3300, 166, 4843, 166, 166, 166, 166, 2094, 166, 2939, 166, 4656, 166, 5146, 166, 166, + 166, 166, 2104, 3977, 4660, 5312, 166, 1865, 166, 5487, 5558, 3380, 166, 1957, 3162, 3281, + 166, 3588, 3268, 2099, 166, 166, 2319, 4913, 4187, 5503, 5782, 150, 166, 52, 5450, 166, + 166, 166, 2941, 5877, 166, 4031, 5393, 166, 3931, 4166, 3135, 3445, 166, 5053, 5430, 4836, + 166, 5315, 3389, 4636, 166, 166, 3441, 166, 166, 3767, 2961, 166, 4761, 4604, 3179, 166, + 166, 4751, 2148, 2015, 166, 123, 5013, 166, 2936, 166, 2063, 166, 5823, 166, 5096, 166, + 166, 4198, 166, 166, 166, 3845, 166, 166, 238, 166, 2703, 3541, 166, 4813, 166, 4477, + 2349, 4197, 5996, 3324, 4789, 3063, 166, 166, 5504, 5273, 2805, 13, 166, 5601, 5402, 4119, + 5206, 166, 166, 4251, 3704, 4176, 1963, 2882, 166, 202, 3125, 3318, 112, 166, 3362, 4835, + 3420, 3974, 5099, 166, 4433, 166, 166, 166, 1766, 2663, 166, 166, 4683, 166, 166, 5485, + 47, 5101, 5341, 5765, 3390, 1648, 4341, 3945, 6045, 1645, 166, 5578, 2594, 166, 166, 3772, + 166, 166, 3196, 3603, 166, 5399, 166, 5075, 166, 5911, 4632, 4781, 5313, 270, 166, 2346, + 166, 166, 166, 1986, 166, 166, 4958, 166, 166, 166, 4048, 166, 3076, 166, 166, 4891, + 166, 166, 57, 166, 220, 166, 166, 166, 4117, 166, 166, 166, 166, 5194, 2658, 166, + 166, 2942, 6071, 4182, 166, 2976, 5816, 166, 166, 166, 166, 3985, 4211, 2514, 166, 166, + 166, 2504, 3446, 1711, 166, 166, 2107, 5190, 166, 34, 166, 3912, 5382, 3003, 166, 166, + 166, 2999, 2404, 4734, 4455, 2087, 166, 2405, 156, 166, 2830, 3303, 296, 3295, 2067, 4268, + 166, 166, 5642, 166, 166, 1901, 166, 5133, 166, 166, 166, 166, 3176, 2973, 4677, 166, + 166, 6164, 3000, 2396, 2734, 5697, 5989, 166, 2823, 5265, 5852, 166, 166, 2623, 2625, 2287, + 4844, 1758, 166, 166, 166, 166, 166, 6073, 166, 5379, 2389, 5279, 2444, 5515, 166, 4038, + 166, 4948, 5640, 166, 166, 3572, 4258, 166, 166, 166, 5204, 166, 4603, 5797, 166, 166, + 166, 1725, 4600, 166, 166, 5498, 166, 4152, 166, 172, 4758, 166, 2598, 2489, 2076, 4366, + 2568, 166, 4352, 3782, 166, 166, 3059, 3946, 5138, 5727, 4484, 5694, 166, 3796, 166, 166, + 166, 166, 5334, 1778, 2245, 166, 4517, 4419, 2250, 182, 5856, 166, 2835, 4495, 1858, 2033, + 6014, 6086, 3211, 166, 166, 154, 2145, 166, 129, 3661, 2661, 5860, 6143, 2640, 3890, 6160, + 166, 166, 2747, 166, 166, 2291, 282, 2476, 166, 166, 3825, 166, 1925, 166, 4489, 166, + 166, 166, 4034, 166, 166, 166, 166, 166, 166, 122, 4708, 4919, 2373, 2453, 5419, 5954, + 297, 5290, 166, 1978, 166, 4932, 3501, 166, 3085, 3386, 166, 5405, 4512, 166, 3209, 5740, + 4020, 5495, 5815, 314, 166, 3190, 4824, 166, 166, 3448, 207, 1623, 6096, 5878, 166, 1836, + 166, 166, 2728, 166, 5278, 3419, 3012, 5618, 5266, 3078, 166, 166, 2244, 166, 4569, 6068, + 166, 3336, 166, 5677, 6052, 5079, 166, 5453, 5245, 5799, 166, 1982, 166, 5958, 4619, 5821, + 166, 5285, 284, 1631, 5710, 6070, 5365, 2189, 3242, 166, 2752, 5483, 5297, 6150, 5522, 166, + 1815, 166, 166, 166, 5801, 166, 166, 5398, 166, 166, 166, 2967, 2515, 3169, 166, 166, + 2562, 166, 1617, 2069, 166, 166, 6154, 166, 3721, 166, 5327, 166, 166, 166, 5592, 166, + 166, 2286, 1716, 3903, 166, 2395, 286, 3587, 6146, 3286, 4186, 5882, 5894, 5737, 6032, 5879, + 2761, 4829, 3788, 166, 166, 3233, 5356, 5693, 166, 2429, 2449, 141, 3444, 5186, 166, 166, + 3477, 4080, 4584, 166, 166, 3670, 1851, 3824, 4337, 3886, 2792, 166, 5867, 166, 166, 3557, + 3147, 166, 166, 2200, 166, 2505, 166, 4310, 4865, 5656, 5992, 5672, 166, 5199, 135, 3023, + 2994, 4472, 166, 166, 166, 2019, 4319, 3472, 166, 166, 166, 29, 206, 3944, 3027, 5804, + 4731, 5449, 166, 2825, 3310, 166, 6172, 5202, 166, 2516, 3644, 4557, 166, 166, 166, 166, + 2671, 4427, 3432, 3276, 5584, 5536, 4645, 3202, 166, 2612, 166, 4249, 2425, 3259, 4622, 166, + 2411, 4303, 4206, 166, 166, 166, 3734, 6063, 118, 166, 166, 3641, 166, 166, 166, 4937, + 1871, 3421, 2208, 166, 166, 166, 166, 4881, 166, 166, 166, 166, 3298, 166, 61, 166, + 166, 166, 3293, 6145, 71, 3619, 166, 166, 3383, 1624, 320, 2187, 4113, 166, 166, 166, + 166, 166, 5080, 2344, 5625, 2358, 1621, 4230, 5579, 5359, 295, 4248, 5267, 3883, 6124, 187, + 5112, 2122, 166, 166, 166, 5142, 6004, 166, 5322, 6175, 3639, 3182, 4425, 166, 175, 166, + 166, 166, 5778, 3939, 3484, 166, 166, 5832, 5248, 5935, 4467, 5858, 166, 5038, 166, 166, + 3102, 166, 4880, 166, 166, 166, 166, 3418, 1666, 5338, 3680, 5291, 4441, 3385, 166, 5733, + 4503, 2774, 166, 2631, 4153, 166, 2000, 166, 166, 5345, 166, 166, 4298, 1804, 4707, 166, + 1613, 1952, 2111, 166, 166, 166, 166, 166, 2897, 166, 166, 4044, 166, 166, 166, 166, + 2863, 5475, 166, 166, 166, 1704, 166, 3609, 2782, 2018, 166, 5361, 166, 3694, 3733, 166, + 2785, 1969, 166, 166, 2834, 1868, 3779, 1877, 60, 166, 4143, 3902, 166, 4361, 3188, 2498, + 6009, 166, 115, 166, 3138, 166, 4575, 6080, 133, 2030, 166, 166, 166, 2306, 2136, 3043, + 3447, 2142, 166, 3799, 1646, 5269, 3640, 166, 2674, 5502, 166, 5467, 166, 5069, 166, 166, + 4654, 4581, 5274, 5036, 4364, 166, 3115, 166, 2128, 4544, 5433, 2086, 2584, 4413, 166, 166, + 5385, 166, 234, 166, 1625, 166, 166, 166, 5139, 2511, 4974, 2766, 166, 166, 166, 2095, + 3990, 217, 166, 2988, 4061, 166, 209, 4883, 166, 166, 166, 166, 166, 4326, 166, 5465, + 2859, 166, 2887, 166, 2231, 166, 1658, 166, 2246, 166, 1844, 166, 166, 3087, 2871, 3872, + 1660, 48, 166, 166, 3622, 166, 1709, 166, 166, 6177, 6173, 166, 3569, 166, 166, 166, + 241, 3660, 3631, 166, 166, 5319, 5141, 174, 166, 166, 4412, 166, 5145, 166, 1919, 166, + 5276, 166, 2385, 166, 1618, 166, 166, 2501, 166, 166, 1734, 5966, 3145, 166, 1690, 4025, + 1664, 4559, 2433, 2392, 3552, 4006, 1896, 166, 166, 2546, 4450, 5396, 4221, 4046, 166, 166, + 2642, 166, 4448, 166, 2784, 3480, 4807, 166, 166, 3534, 166, 166, 5272, 166, 166, 2831, + 4263, 166, 166, 166, 166, 4414, 5628, 3486, 166, 3748, 166, 4598, 3719, 3598, 3611, 166, + 4792, 5059, 4110, 166, 2656, 166, 166, 84, 5429, 166, 166, 166, 281, 1955, 166, 166, + 166, 3616, 4997, 166, 166, 166, 166, 3230, 166, 166, 166, 166, 166, 166, 77, 166, + 166, 166, 1800, 166, 4236, 166, 166, 166, 166, 166, 5757, 2530, 1662, 166, 4607, 1659, + 166, 1685, 3341, 166, 1699, 4058, 3407, 1854, 4417, 3034, 166, 166, 166, 166, 5568, 166, + 3206, 166, 5529, 166, 166, 166, 2116, 3487, 144, 166, 166, 166, 5523, 5373, 5321, 166, + 6064, 2921, 166, 1696, 2473, 166, 166, 3716, 5689, 166, 4608, 3879, 166, 166, 166, 2156, + 166, 4358, 2446, 166, 3958, 166, 5520, 4340, 4848, 166, 3285, 166, 2665, 166, 3459, 1905, + 5115, 68, 5730, 166, 3127, 5029, 4370, 166, 3753, 166, 3674, 6025, 4490, 166, 4183, 166, + 94, 166, 166, 4051, 3766, 3140, 4907, 3857, 166, 166, 4596, 166, 3888, 3040, 2507, 5643, + 166, 166, 4311, 2618, 5582, 166, 166, 3678, 166, 1988, 166, 166, 4464, 166, 166, 166, + 166, 4278, 3677, 2173, 5256, 166, 166, 5162, 166, 5178, 1644, 5094, 166, 2557, 5506, 166, + 166, 166, 4927, 5348, 1797, 166, 166, 39, 166, 3866, 3655, 236, 5403, 2175, 3361, 166, + 1976, 5993, 226, 166, 4643, 166, 5339, 4098, 2653, 4969, 166, 3346, 4984, 4635, 166, 166, + 166, 166, 4981, 188, 166, 166, 28, 4088, 166, 166, 166, 25, 3663, 2696, 166, 4679, + 5114, 5802, 166, 166, 166, 166, 166, 3810, 5749, 166, 1673, 4276, 166, 3756, 4184, 166, + 5630, 166, 166, 166, 4531, 212, 5663, 166, 166, 2746, 166, 5386, 3618, 3594, 1887, 166, + 166, 5443, 166, 1726, 4094, 5065, 4756, 166, 166, 5308, 5225, 2081, 166, 166, 3064, 166, + 166, 1981, 3637, 4355, 1626, 166, 166, 4686, 166, 5793, 180, 5066, 2938, 3819, 4904, 3601, + 166, 166, 2495, 5025, 5768, 2621, 4650, 3041, 166, 5897, 3633, 166, 166, 4375, 166, 5714, + 1667, 3273, 3950, 1668, 166, 5855, 166, 2364, 166, 1881, 166, 2646, 5460, 166, 2770, 4951, + 5414, 166, 4442, 2113, 5726, 298, 5934, 2053, 166, 166, 4053, 166, 166, 4514, 4697, 166, + 166, 5198, 2707, 166, 5605, 166, 166, 5218, 2596, 166, 2110, 166, 1806, 2160, 166, 166, + 2212, 166, 3636, 166, 166, 4377, 4021, 3707, 4502, 166, 4195, 166, 166, 166, 4108, 3725, + 3676, 166, 2084, 166, 166, 166, 166, 4216, 166, 166, 6156, 166, 2896, 166, 166, 166, + 166, 166, 166, 3826, 2870, 3793, 166, 166, 5927, 166, 2759, 166, 4613, 2297, 5638, 166, + 2842, 5031, 4793, 5184, 166, 166, 2008, 166, 257, 2881, 117, 6051, 3044, 4079, 2833, 166, + 6117, 166, 3236, 5469, 166, 166, 2874, 6076, 166, 1799, 80, 41, 166, 1864, 166, 5709, + 1611, 5026, 5176, 168, 3269, 4081, 166, 166, 1970, 4550, 166, 4250, 4101, 4565, 5950, 5845, + 97, 4064, 166, 5394, 4374, 4343, 166, 166, 4658, 3248, 166, 208, 1735, 4047, 2843, 166, + 166, 166, 166, 2794, 166, 166, 5844, 166, 166, 3094, 2177, 5436, 3646, 166, 3564, 4682, + 166, 5948, 5835, 162, 2059, 5151, 2034, 1926, 5941, 5903, 5177, 166, 166, 166, 4801, 3439, + 1780, 166, 166, 3280, 3434, 166, 166, 4498, 5565, 4043, 166, 4432, 4722, 3959, 166, 3746, + 166, 166, 177, 166, 166, 2748, 166, 4483, 166, 166, 4144, 166, 166, 166, 166, 2066, + 2915, 166, 2049, 2130, 4684, 166, 49, 3506, 5391, 166, 2590, 6103, 1714, 2410, 3053, 3837, + 4301, 166, 3255, 2644, 166, 166, 4014, 166, 2475, 4788, 2876, 166, 166, 166, 166, 166, + 166, 4140, 166, 166, 321, 166, 1966, 166, 166, 2855, 3111, 3800, 166, 4446, 2551, 166, + 166, 166, 2824, 166, 166, 166, 2164, 3010, 2226, 166, 4857, 166, 2582, 5118, 4582, 5917, + 166, 166, 3338, 3482, 3328, 166, 4817, 166, 5371, 3830, 166, 3009, 1633, 3329, 4052, 166, + 3701, 4983, 4500, 4487, 4878, 166, 166, 5482, 3544, 166, 3057, 2026, 4398, 2847, 3532, 3262, + 3399, 166, 166, 166, 4478, 4167, 166, 3411, 2599, 5362, 166, 2711, 166, 166, 166, 166, + 3452, 2522, 5586, 5548, 3279, 2538, 166, 166, 166, 4161, 166, 2123, 166, 166, 2660, 166, + 166, 1706, 166, 15, 3537, 5051, 5869, 166, 3025, 166, 4447, 3744, 120, 166, 166, 166, + 204, 2810, 166, 5124, 2376, 5306, 166, 166, 4493, 166, 166, 166, 5289, 6046, 166, 2762, + 2541, 1857, 2467, 5163, 166, 166, 166, 166, 5830, 166, 2172, 3359, 166, 2928, 166, 166, + 166, 6129, 166, 5445, 166, 166, 5924, 6144, 166, 102, 166, 166, 1678, 166, 4491, 5705, + 166, 1753, 166, 3873, 5725, 4145, 1909, 166, 2155, 166, 166, 1848, 3315, 1874, 166, 4945, + 2524, 166, 3263, 2362, 1785, 166, 166, 166, 152, 2102, 5723, 5131, 5754, 4032, 4029, 166, + 4295, 3391, 166, 166, 166, 5282, 1747, 3159, 2235, 5583, 1786, 3630, 6111, 2974, 4797, 3623, + 166, 2071, 4929, 166, 2603, 3964, 3378, 166, 166, 2654, 151, 3940, 4527, 4518, 166, 2430, + 1884, 3812, 166, 2867, 166, 166, 166, 2756, 5418, 166, 2354, 4606, 166, 2153, 166, 4855, + 166, 166, 1720, 166, 3213, 3926, 166, 5158, 4349, 166, 4828, 166, 166, 2031, 166, 2300, + 166, 166, 166, 2211, 4954, 3121, 4754, 2485, 166, 166, 166, 3593, 166, 2718, 5317, 2765, + 5120, 166, 2527, 166, 1994, 5947, 166, 166, 166, 6085, 2302, 100, 79, 2982, 3705, 2180, + 2043, 166, 1872, 1671, 166, 3729, 166, 4944, 3665, 2217, 2119, 166, 5615, 166, 1620, 166, + 166, 166, 166, 35, 3913, 2760, 166, 3688, 3672, 4042, 166, 166, 5117, 4227, 166, 4445, + 2458, 3803, 4554, 4988, 166, 166, 3141, 3491, 166, 166, 166, 166, 5095, 4668, 5567, 166, + 166, 2885, 1790, 2996, 166, 166, 166, 166, 3737, 166, 2470, 166, 166, 4339, 166, 166, + 166, 4920, 166, 166, 3697, 5471, 166, 166, 3538, 4558, 3467, 5262, 5609, 3858, 166, 166, + 5007, 2780, 2791, 2236, 5668, 3134, 166, 166, 5776, 3470, 3291, 166, 2532, 166, 166, 166, + 3805, 264, 166, 3227, 166, 166, 166, 2334, 166, 5087, 101, 166, 3634, 58, 2813, 166, + 166, 166, 3222, 4704, 4488, 4508, 5459, 2117, 5873, 166, 1828, 166, 166, 166, 166, 166, + 2105, 166, 5613, 5761, 2920, 3098, 166, 166, 3277, 166, 166, 166, 166, 83, 166, 166, + 166, 3967, 166, 5574, 166, 4985, 30, 3426, 166, 179, 3014, 4015, 246, 2556, 4449, 3723, + 5611, 3436, 166, 4240, 3642, 166, 4536, 2048, 5810, 166, 1971, 166, 5557, 5323, 5022, 191, + 5492, 166, 4837, 4426, 2537, 2271, 3177, 5674, 166, 2796, 1995, 166, 3906, 166, 4403, 3862, + 4716, 2406, 3948, 4670, 4309, 166, 2575, 5358, 2951, 166, 3666, 3612, 5577, 4579, 4743, 166, + 6072, 6036, 4563, 2586, 166, 5836, 166, 166, 5752, 166, 3563, 166, 2909, 3251, 92, 166, + 4711, 4149, 166, 166, 3052, 5122, 2904, 2635, 1990, 166, 166, 166, 166, 166, 166, 166, + 166, 4213, 166, 3103, 3142, 2683, 6105, 2209, 3175, 4215, 166, 166, 166, 166, 166, 166, + 166, 5303, 4075, 5374, 166, 4174, 4154, 1895, 4538, 2764, 166, 5817, 6113, 4033, 166, 6090, + 166, 2990, 166, 3164, 166, 166, 166, 247, 166, 6083, 3412, 166, 5738, 166, 3599, 166, + 1904, 2162, 2547, 3960, 166, 166, 3154, 55, 166, 5991, 4921, 2879, 166, 166, 5347, 166, + 166, 166, 2712, 4787, 166, 1908, 166, 166, 166, 3184, 166, 166, 166, 4572, 3846, 3657, + 166, 166, 5481, 166, 166, 3397, 1856, 4978, 166, 3900, 3570, 3802, 166, 166, 2075, 4408, + 166, 6079, 2313, 166, 166, 5756, 166, 166, 2070, 166, 166, 3137, 166, 166, 3686, 166, + 166, 166, 166, 67, 5019, 166, 1742, 166, 5354, 166, 5149, 166, 2931, 4946, 6006, 166, + 166, 2865, 4902, 3029, 1722, 3449, 166, 1987, 166, 62, 5626, 166, 166, 166, 2670, 1657, + 5599, 3056, 166, 3791, 5020, 166, 1979, 4437, 1899, 166, 166, 196, 2636, 166, 143, 3475, + 4317, 2512, 2415, 5033, 5024, 2112, 2864, 3551, 166, 1688, 33, 4585, 3648, 4399, 166, 166, + 166, 166, 166, 1824, 166, 166, 166, 166, 166, 166, 4513, 166, 2478, 4407, 166, 166, + 2492, 4130, 4318, 2980, 5746, 166, 2606, 4063, 4123, 166, 255, 166, 166, 4680, 166, 3586, + 5975, 3935, 166, 5528, 166, 3158, 166, 166, 2614, 5035, 166, 3488, 3214, 166, 166, 166, + 5413, 3713, 166, 5875, 4329, 5250, 166, 166, 3741, 166, 54, 1885, 3839, 166, 4924, 166, + 166, 166, 4158, 166, 166, 2152, 1661, 166, 166, 4327, 166, 3933, 166, 5666, 166, 166, + 2580, 166, 3404, 4111, 2862, 4438, 166, 166, 4072, 166, 166, 3938, 2958, 4302, 166, 3851, + 166, 268, 166, 166, 1975, 222, 3204, 3438, 4616, 166, 4275, 3101, 2648, 3989, 5215, 166, + 4229, 166, 5440, 166, 5093, 2639, 166, 166, 4439, 166, 2316, 4239, 166, 166, 166, 166, + 166, 1817, 4486, 166, 3272, 166, 166, 4085, 2078, 2902, 166, 166, 166, 4381, 1853, 3054, + 166, 166, 5005, 2669, 166, 2856, 2706, 166, 166, 166, 4185, 166, 1748, 166, 166, 166, + 5771, 166, 166, 3915, 166, 166, 2205, 6122, 166, 166, 1632, 5400, 166, 2477, 4740, 166, + 166, 166, 1802, 166, 2472, 3953, 166, 1849, 2604, 3780, 2560, 4786, 2566, 3576, 166, 4768, + 166, 1951, 251, 5068, 166, 166, 166, 2619, 166, 166, 166, 5432, 166, 166, 5260, 5758, + 3908, 166, 4141, 166, 5777, 166, 166, 166, 166, 166, 3961, 5143, 166, 3889, 3747, 3743, + 166, 2818, 166, 166, 166, 3867, 166, 166, 3742, 4763, 2948, 5533, 166, 3966, 3555, 3843, + 3503, 6005, 166, 4687, 2790, 4479, 5828, 3769, 5688, 166, 166, 166, 166, 3109, 166, 166, + 166, 166, 4574, 81, 166, 166, 4576, 3369, 166, 166, 166, 4207, 166, 5072, 2210, 166, + 184, 166, 4673, 166, 166, 166, 166, 166, 166, 1628, 3590, 1916, 4784, 4970, 166, 1832, + 166, 166, 3584, 3384, 166, 166, 2880, 1783, 166, 166, 166, 166, 6115, 6121, 2157, 5428, + 5859, 4861, 5635, 4331, 5839, 4223, 313, 166, 166, 6152, 2168, 166, 4112, 6089, 6012, 166, + 5294, 3207, 166, 166, 4884, 166, 4655, 166, 166, 166, 1743, 166, 4077, 166, 4631, 166, + 166, 2957, 1945, 4936, 166, 166, 5389, 166, 166, 5955, 166, 166, 1639, 2207, 4129, 166, + 3582, 5560, 6147, 3088, 166, 166, 4529, 5259, 3118, 166, 3106, 2853, 166, 1845, 5660, 166, + 3325, 3973, 2461, 2163, 166, 3083, 4190, 166, 166, 5505, 166, 166, 3226, 5507, 109, 6141, + 3991, 166, 4939, 166, 166, 5889, 3986, 166, 3664, 4353, 2056, 166, 5071, 166, 166, 4376, + 166, 1958, 2028, 166, 166, 1793, 166, 5252, 3536, 166, 166, 3525, 3580, 166, 166, 166, + 1782, 5174, 2011, 1826, 3352, 3231, 166, 166, 4986, 2068, 2801, 166, 2500, 166, 5061, 166, + 2263, 2632, 1993, 166, 2715, 4424, 166, 166, 6042, 4661, 166, 5074, 5479, 4822, 166, 166, + 166, 166, 5600, 5853, 166, 1907, 166, 166, 166, 3808, 166, 5997, 5032, 4605, 166, 1732, + 166, 166, 166, 3015, 5454, 166, 166, 166, 3806, 5444, 2238, 1946, 166, 166, 3221, 4922, + 166, 6092, 166, 166, 4007, 166, 3425, 4282, 2571, 166, 1749, 166, 166, 38, 4744, 4900, + 4257, 214, 5687, 166, 2490, 2979, 2924, 166, 4714, 219, 5344, 3836, 3302, 78, 1984, 2986, + 2960, 166, 2869, 3507, 3335, 4967, 2892, 2723, 4849, 5070, 166, 166, 4629, 3815, 166, 4453, + 4760, 166, 3224, 130, 166, 166, 166, 166, 166, 3408, 2494, 2691, 166, 4325, 2932, 5165, + 5573, 166, 4769, 166, 5411, 5637, 2050, 166, 166, 2305, 166, 166, 4834, 24, 4693, 3554, + 2491, 1738, 166, 166, 166, 23, 2758, 3072, 2564, 4800, 5537, 3545, 4133, 166, 166, 166, + 5982, 166, 203, 166, 166, 290, 185, 166, 3774, 1929, 3379, 166, 166, 166, 166, 3002, + 166, 3738, 166, 166, 3344, 4942, 5353, 2777, 2839, 4712, 1830, 2664, 166, 5884, 3516, 166, + 5494, 4169, 2391, 3319, 166, 166, 5918, 2597, 166, 4821, 2787, 5719, 166, 166, 166, 1687, + 6148, 3257, 254, 166, 5180, 6153, 5964, 306, 166, 6123, 166, 5208, 166, 3163, 5938, 1736, + 166, 2502, 4910, 166, 166, 2549, 166, 2900, 3632, 3270, 166, 2082, 5953, 166, 107, 5750, + 166, 166, 166, 5527, 1751, 4168, 2950, 166, 2659, 166, 4189, 1943, 2595, 166, 4191, 166, + 166, 166, 166, 2998, 2296, 5221, 3617, 166, 5435, 2451, 2009, 3005, 2242, 3768, 3658, 166, + 166, 166, 166, 166, 2481, 2256, 166, 166, 4074, 166, 3120, 166, 4409, 1759, 166, 166, + 1679, 3659, 3499, 5219, 4501, 3082, 2047, 166, 166, 166, 4560, 2768, 5251, 166, 166, 166, + 2437, 3993, 3215, 2447, 166, 166, 166, 2993, 4963, 166, 3045, 166, 166, 166, 166, 166, + 166, 166, 5521, 166, 166, 4868, 166, 3895, 166, 6131, 3949, 3306, 3785, 166, 166, 4895, + 4831, 166, 1772, 166, 166, 5928, 166, 2137, 4805, 2462, 310, 2667, 3561, 166, 166, 2312, + 4931, 5255, 166, 166, 166, 5670, 166, 2285, 166, 4672, 5310, 166, 2103, 2174, 166, 166, + 166, 166, 5417, 166, 4726, 4203, 166, 166, 166, 5581, 166, 5665, 166, 166, 5747, 166, + 166, 2509, 1973, 2749, 5463, 166, 166, 4567, 5014, 166, 3322, 3051, 166, 4090, 166, 3709, + 3887, 3478, 166, 166, 166, 166, 3565, 3934, 166, 32, 166, 166, 166, 2239, 166, 3947, + 3849, 166, 2022, 166, 2169, 166, 4691, 98, 166, 3804, 4155, 1640, 4002, 166, 2138, 1739, + 3730, 5970, 2274, 4873, 3119, 166, 4925, 3577, 3699, 4049, 3982, 166, 5161, 1744, 166, 166, + 166, 5704, 4979, 2686, 5383, 5744, 2289, 166, 166, 166, 3927, 2539, 166, 166, 166, 2585, + 166, 4723, 3755, 4509, 166, 4961, 2194, 2535, 166, 176, 166, 4494, 166, 4171, 166, 266, + 166, 3454, 5369, 166, 166, 5899, 5284, 166, 3607, 3566, 5514, 166, 1843, 166, 3997, 4599, + 2743, 166, 2857, 2497, 2751, 166, 166, 166, 3511, 5742, 166, 166, 166, 4504, 166, 166, + 166, 5082, 4401, 166, 166, 5431, 166, 166, 1949, 4539, 166, 166, 4852, 166, 166, 3457, + 166, 3433, 4669, 166, 1692, 2454, 3258, 6159, 166, 166, 166, 166, 166, 2788, 4350, 3249, + 3816, 4893, 166, 4846, 166, 4993, 1708, 4138, 166, 2895, 2891, 166, 1860, 166, 2480, 1927, + 3853, 166, 166, 166, 5100, 166, 3143, 5159, 166, 4286, 5182, 5246, 4975, 166, 2905, 166, + 4917, 5102, 2044, 6016, 5673, 2005, 5090, 166, 4634, 3333, 166, 5702, 3413, 1762, 6094, 4284, + 4431, 2641, 166, 4463, 5691, 166, 166, 3442, 3473, 4192, 2046, 166, 3838, 166, 3217, 3349, + 166, 2243, 166, 3490, 166, 166, 166, 5922, 166, 166, 166, 4885, 1798, 2884, 2750, 5004, + 2741, 166, 166, 5649, 166, 4410, 166, 166, 3382, 166, 166, 1913, 1703, 5532, 3770, 166, + 5116, 2645, 2634, 4357, 5901, 166, 166, 5538, 166, 166, 166, 6028, 166, 166, 5840, 4102, + 2704, 2091, 5287, 166, 4757, 2282, 166, 2650, 3528, 64, 253, 3732, 166, 166, 166, 166, + 166, 3465, 166, 166, 166, 5848, 3110, 111, 166, 166, 3403, 2926, 6030, 3366, 1948, 4430, + 5509, 3250, 3972, 2587, 3579, 166, 6048, 250, 5275, 4242, 2615, 3112, 3558, 166, 166, 2342, + 166, 5157, 1917, 2733, 5647, 1934, 5675, 166, 3981, 2923, 5213, 5326, 37, 166, 5288, 3069, + 166, 1923, 5755, 166, 166, 166, 1888, 166, 6041, 5895, 5376, 3727, 3901, 166, 5589, 166, + 166, 4609, 166, 166, 166, 4706, 166, 4482, 1622, 166, 171, 166, 166, 4646, 4151, 2755, + 4614, 166, 2072, 5409, 4469, 1647, 4434, 4633, 1915, 166, 3615, 4808, 166, 3388, 166, 5280, + 2731, 166, 166, 2417, 166, 14, 166, 4533, 5126, 166, 2778, 3022, 166, 166, 166, 4830, + 4764, 166, 166, 166, 4982, 166, 4265, 166, 2466, 5678, 147, 1883, 166, 166, 166, 114, + 4000, 2427, 3597, 166, 4853, 5981, 166, 2023, 2519, 166, 1937, 2221, 4676, 166, 4522, 5716, + 166, 2432, 5731, 166, 6020, 6163, 4351, 2442, 4380, 166, 4390, 1882, 6139, 4246, 262, 166, + 1676, 5781, 2352, 1956, 200, 166, 166, 5800, 6184, 166, 2355, 149, 5962, 5524, 4238, 166, + 5150, 166, 5888, 2423, 166, 5739, 3192, 4142, 166, 166, 166, 3201, 161, 4460, 2459, 158, + 166, 166, 166, 166, 2689, 166, 166, 166, 166, 1889, 166, 166, 3374, 166, 70, 166, + 2772, 166, 2995, 166, 2384, 4989, 166, 3299, 166, 166, 166, 166, 3614, 3645, 3415, 3160, + 1727, 3735, 5201, 1693, 3531, 166, 166, 1776, 3871, 166, 166, 166, 166, 86, 3553, 166, + 166, 166, 3392, 166, 166, 2232, 166, 4977, 2333, 3394, 2875, 2027, 5736, 166, 1719, 166, + 4952, 2061, 2150, 5526, 166, 4637, 166, 4333, 166, 166, 4733, 4809, 3911, 166, 3460, 166, + 5355, 3126, 4181, 4436, 300, 166, 3841, 166, 4770, 126, 5654, 166, 166, 166, 1730, 166, + 166, 166, 5610, 166, 6002, 2197, 3807, 6109, 166, 166, 166, 166, 166, 5395, 4004, 166, + 46, 166, 166, 2570, 4736, 5318, 4247, 166, 166, 166, 2293, 3031, 4591, 166, 245, 166, + 5510, 1616, 3117, 4163, 166, 166, 4759, 3462, 4819, 4947, 166, 3128, 5946, 2278, 2969, 166, + 166, 5183, 166, 166, 1729, 173, 2448, 166, 230, 2971, 166, 166, 5397, 166, 4093, 3348, + 1866, 4280, 166, 6067, 3794, 166, 166, 166, 4729, 166, 3456, 166, 2394, 166, 4953, 166, + 166, 2258, 4863, 166, 166, 4060, 166, 5468, 305, 166, 6134, 166, 166, 2326, 166, 3453, + 2167, 2845, 166, 166, 166, 5597, 166, 166, 166, 166, 5462, 2809, 5994, 2899, 166, 166, + 166, 5153, 166, 166, 1638, 166, 166, 4938, 3795, 166, 3842, 166, 166, 166, 2769, 3194, + 166, 4745, 5508, 5604, 3910, 166, 166, 4147, 3239, 166, 166, 3548, 3859, 2092, 166, 2705, + 166, 166, 3625, 4131, 166, 3513, 166, 166, 2987, 4555, 3107, 166, 166, 166, 166, 5713, + 4698, 3079, 166, 5342, 166, 166, 2673, 2517, 2745, 1795, 166, 166, 166, 166, 166, 166, + 2463, 166, 166, 2445, 5425, 6138, 166, 2687, 3254, 5871, 166, 2387, 4300, 166, 166, 3529, + 1996, 166, 2369, 3818, 6126, 1615, 2643, 65, 4297, 166, 5324, 3311, 3852, 166, 3868, 4199, + 3978, 166, 166, 166, 5466, 166, 166, 244, 166, 5929, 6157, 2390, 5639, 2267, 2073, 4610, + 5774, 2521, 4556, 166, 4545, 4307, 2426, 2450, 166, 5783, 4968, 6176, 4156, 166, 166, 4126, + 3549, 166, 3581, 5701, 3234, 166, 4013, 1879, 166, 6104, 5874, 166, 166, 3485, 4279, 2528, + 5576, 166, 3992, 166, 3980, 4934, 166, 2176, 4228, 5164, 3784, 1933, 4120, 5055, 166, 166, + 5015, 166, 166, 166, 2310, 1754, 166, 6087, 166, 166, 4548, 5268, 2930, 166, 3656, 166, + 3042, 5229, 166, 4016, 2195, 166, 166, 166, 199, 1745, 3717, 166, 166, 74, 2668, 252, + 4124, 4657, 5223, 166, 2186, 3628, 166, 166, 166, 4222, 3114, 2841, 5103, 3171, 5135, 166, + 166, 2273, 166, 3899, 5332, 5842, 3575, 2579, 2431, 2464, 2229, 3604, 4561, 2977, 2815, 166, + 3916, 166, 5825, 166, 1694, 166, 4030, 166, 5841, 166, 3881, 1831, 166, 5525, 3011, 166, + 5535, 5217, 316, 4116, 166, 166, 2204, 166, 3136, 3650, 166, 5813, 1875, 4511, 4475, 166, + 1999, 166, 2277, 166, 3024, 5484, 5546, 166, 3988, 5676, 166, 2213, 2264, 5214, 166, 4940, + 5974, 166, 4750, 6077, 166, 1652, 3148, 166, 166, 166, 166, 2554, 166, 6167, 5257, 5300, + 166, 166, 166, 166, 5408, 166, 166, 3402, 2141, 166, 4663, 5633, 3312, 166, 2814, 4930, + 1959, 166, 166, 166, 3861, 166, 166, 302, 2624, 166, 166, 166, 1629, 1724, 166, 3909, + 5281, 166, 2001, 4395, 5352, 4428, 2694, 4850, 166, 166, 5242, 5910, 166, 166, 166, 166, + 166, 3212, 166, 2045, 166, 166, 166, 166, 166, 166, 3017, 4960, 4456, 166, 5616, 6093, + 2151, 166, 166, 166, 315, 3381, 166, 166, 166, 4330, 166, 6158, 4721, 6075, 166, 166, + 166, 4543, 2303, 166, 166, 3301, 166, 5000, 3929, 2543, 3437, 166, 166, 166, 3422, 166, + 5987, 5729, 2428, 166, 4035, 5588, 3714, 3834, 5264, 5743, 166, 3305, 4886, 6107, 5156, 166, + 166, 166, 166, 166, 1672, 5849, 5827, 5049, 6101, 2178, 2420, 3289, 166, 166, 4274, 6017, + 2257, 166, 4172, 3451, 2367, 2382, 166, 2964, 4918, 3241, 2347, 6082, 99, 2383, 166, 4454, + 163, 2460, 165, 304, 1818, 5580, 166, 312, 5790, 293, 5794, 5519, 5083, 3360, 5748, 166, + 3750, 5034, 166, 166, 166, 1863, 3168, 166, 166, 166, 5111, 166, 166, 166, 166, 2183, + 4510, 166, 166, 3495, 4382, 4235, 4462, 166, 4056, 5885, 17, 5028, 1614, 6038, 166, 2488, + 5632, 3089, 166, 1940, 66, 4039, 3999, 235, 166, 166, 3829, 3954, 166, 2365, 269, 166, + 166, 166, 166, 166, 166, 4418, 1796, 4709, 2004, 166, 3596, 5786, 166, 2819, 4624, 3152, + 2968, 2838, 166, 5575, 1767, 5603, 166, 4386, 5890, 166, 1768, 4201, 3560, 166, 166, 166, + 2184, 2262, 2966, 2716, 1765, 2611, 2983, 166, 4164, 4084, 142, 5314, 166, 166, 4071, 166, + 2578, 2849, 3600, 166, 166, 166, 166, 5401, 4814, 3431, 166, 5088, 5084, 198, 166, 3578, + 3764, 166, 2097, 166, 166, 5390, 4443, 166, 3166, 166, 4816, 166, 166, 166, 166, 3130, + 5963, 1788, 2129, 1837, 4100, 6128, 166, 4586, 5945, 4772, 166, 5741, 3151, 3247, 5645, 4507, + 5833, 3904, 6013, 2506, 3050, 4175, 1705, 3019, 166, 5942, 166, 2418, 3430, 2230, 5745, 166, + 2093, 166, 166, 166, 166, 4666, 3246, 192, 2010, 4003, 3533, 5851, 166, 3621, 3684, 3066, + 166, 166, 166, 5073, 3856, 166, 166, 2224, 166, 2637, 4270, 166, 166, 5679, 166, 5792, + 5850, 166, 2589, 3060, 2196, 3476, 3150, 2025, 166, 166, 166, 2657, 166, 3685, 3790, 5587, + 2817, 3692, 166, 166, 166, 2359, 2260, 5896, 2158, 119, 2816, 5753, 166, 2739, 5772, 166, + 2919, 2147, 1985, 4271, 4838, 4991, 166, 166, 166, 5244, 166, 319, 166, 166, 2779, 4732, + 4994, 5424, 166, 166, 3968, 3049, 3393, 4473, 4959, 5967, 5864, 5170, 4209, 166, 4810, 4815, + 4205, 2339, 5023, 2279, 5050, 166, 5837, 132, 166, 166, 166, 2247, 21, 4775, 166, 166, + 5286, 166, 4170, 4099, 4803, 5767, 166, 166, 166, 5811, 2240, 5699, 2499, 166, 4802, 166, + 5785, 166, 166, 166, 3181, 3435, 166, 3339, 166, 5669, 3865, 2249, 5002, 166, 4694, 5461, + 4753, 166, 3157, 166, 1960, 166, 166, 166, 2440, 166, 5818, 5534, 2439, 1717, 166, 3789, + 2959, 166, 2943, 166, 2576, 166, 2002, 2007, 1819, 3256, 4402, 5311, 3832, 160, 166, 166, + 2803, 166, 3264, 166, 5863, 166, 2017, 166, 2798, 166, 166, 166, 166, 5607, 4965, 166, + 166, 166, 4537, 4378, 5944, 3494, 5457, 5602, 1942, 5900, 5780, 4411, 5147, 166, 4966, 2115, + 155, 2827, 1980, 5063, 166, 285, 5912, 3304, 2963, 5179, 3220, 166, 166, 166, 2190, 3708, + 5476, 1944, 2366, 3893, 166, 166, 166, 3759, 166, 5434, 2740, 1707, 4244, 5426, 166, 166, + 166, 3155, 166, 4285, 166, 166, 166, 166, 5721, 166, 3833, 6001, 301, 166, 166, 2574, + 186, 2724, 166, 1873, 3667, 166, 5216, 166, 2935, 2100, 4987, 166, 2284, 166, 166, 2911, + 3828, 4009, 166, 2065, 166, 5496, 6130, 5563, 4387, 166, 3771, 3469, 2989, 2222, 4577, 3965, + 4296, 2975, 3813, 3240, 166, 4780, 4481, 3387, 2338, 166, 6183, 166, 166, 166, 166, 166, + 2675, 1761, 2600, 5167, 3170, 4773, 2165, 5166, 166, 2223, 4642, 166, 166, 4540, 166, 166, + 166, 3897, 166, 2483, 1809, 5477, 3844, 4067, 2508, 2275, 166, 166, 166, 166, 166, 3497, + 5458, 166, 249, 2956, 166, 4651, 166, 283, 166, 166, 4955, 4062, 2315, 2304, 3261, 2361, + 4791, 4389, 1997, 166, 3455, 166, 166, 166, 166, 166, 166, 4746, 5695, 5296, 105, 1841, + 3368, 166, 166, 166, 5228, 166, 3496, 4423, 2024, 3907, 4774, 166, 166, 166, 166, 166, + 2294, 2193, 166, 166, 166, 166, 166, 166, 166, 166, 4393, 166, 166, 2127, 166, 4573, + 166, 5350, 166, 5016, 3372, 166, 5653, 166, 5972, 4719, 166, 166, 166, 166, 166, 5370, + 166, 6142, 166, 166, 3691, 2828, 166, 2601, 166, 2937, 2060, 3654, 3097, 2341, 5325, 4568, + 4096, 2776, 166, 2946, 166, 166, 166, 5843, 1777, 5295, 2837, 4261, 4397, 5006, 5808, 4866, + 166, 1713, 5732, 2954, 166, 166, 27, 166, 4308, 5629, 2652, 2434, 4474, 166, 4928, 166, + 4727, 3811, 166, 166, 5234, 166, 6010, 166, 4911, 166, 4570, 166, 6000, 3450, 5304, 3919, + 166, 166, 4008, 3942, 166, 272, 2363, 2064, 3595, 3505, 166, 166, 3957, 1695, 2452, 4659, + 166, 1792, 166, 131, 5968, 166, 3731, 3905, 4115, 166, 166, 2468, 166, 2727, 166, 3526, + 4724, 166, 4388, 3149, 5539, 5092, 4440, 6162, 166, 166, 193, 4429, 2493, 166, 166, 3683, + 166, 6029, 166, 277, 166, 166, 166, 5240, 2408, 166, 309, 2561, 210, 166, 5200, 166, + 166, 166, 1930, 5692, 2697, 166, 166, 166, 3330, 5331, 3860, 166, 166, 4335, 166, 50, + 3605, 4289, 1763, 166, 166, 166, 166, 3521, 166, 166, 166, 3668, 166, 166, 166, 166, + 166, 3271, 1656, 166, 166, 4782, 166, 2962, 166, 5907, 166, 3245, 3375, 2944, 5933, 166, + 166, 5406, 5655, 3139, 5423, 166, 4359, 5231, 2548, 166, 3831, 2858, 5488, 166, 5824, 166, + 166, 166, 3885, 4372, 166, 166, 4024, 166, 4811, 2970, 166, 4219, 211, 166, 3471, 166, + 166, 166, 166, 3854, 166, 3358, 2877, 166, 166, 5205, 2804, 166, 166, 166, 4452, 166, + 166, 166, 166, 3776, 166, 166, 3075, 4208, 166, 5623, 1974, 166, 2647, 166, 3235, 166, + 166, 166, 5211, 166, 166, 4304, 2206, 166, 4157, 2182, 166, 1816, 2626, 166, 2893, 2248, + 166, 166, 166, 166, 1983, 5648, 166, 194, 166, 2106, 4328, 166, 4742, 166, 166, 5572, + 2329, 3314, 166, 6181, 166, 166, 26, 166, 6026, 166, 166, 2114, 1669, 4735, 166, 166, + 4256, 166, 1861, 166, 5470, 2317, 166, 4404, 2482, 166, 5305, 4415, 5986, 4949, 5412, 166, + 1728, 166, 1898, 166, 166, 4909, 1989, 166, 166, 166, 2836, 2051, 274, 166, 2799, 166, + 5865, 1663, 4705, 5121, 2555, 166, 4316, 4287, 1880, 1825, 166, 3689, 166, 1733, 5012, 166, + 166, 2237, 4471, 1682, 2910, 166, 5366, 166, 166, 166, 166, 4532, 166, 2802, 166, 166, + 166, 4057, 2471, 166, 2889, 166, 166, 4026, 5682, 3091, 166, 1977, 166, 2901, 6137, 5658, + 88, 2318, 1965, 166, 5914, 166, 166, 4468, 1822, 166, 6050, 5956, 2201, 166, 4644, 2918, + 166, 3703, 166, 166, 3524, 4220, 2913, 4210, 166, 166, 2090, 166, 1906, 1911, 166, 166, + 3671, 2370, 166, 2552, 166, 3763, 2259, 1924, 166, 5940, 166, 166, 166, 3185, 3821, 4069, + 261, 2381, 3244, 166, 166, 5715, 166, 2052, 5905, 166, 2403, 166, 3030, 2199, 166, 3550, + 166, 166, 1846, 166, 166, 95, 166, 289, 3208, 2559, 5195, 5091, 1654, 166, 1781, 1892, + 166, 4516, 2629, 166, 1700, 3067, 166, 166, 166, 2080, 1680, 166, 166, 166, 5700, 166, + 1820, 5491, 166, 4226, 166, 166, 166, 166, 4653, 166, 3508, 227, 5364, 166, 2098, 166, + 299, 166, 5795, 166, 166, 166, 166, 3690, 4134, 5517, 4534, 5042, 4874, 5798, 4234, 166, + 166, 166, 166, 3702, 166, 166, 3638, 3108, 3850, 166, 166, 166, 16, 166, 1775, 166, + 4022, 166, 223, 4095, 166, 5127, 4266, 166, 189, 166, 166, 5203, 166, 1805, 3884, 3778, + 166, 166, 2146, 4818, 166, 2848, 3440, 4506, 5886, 3006, 218, 166, 2377, 166, 4091, 5925, + 166, 4320, 166, 2701, 3036, 166, 166, 166, 4715, 166, 3801, 166, 3161, 166, 2077, 166, + 4254, 3032, 243, 1814, 166, 166, 166, 166, 166, 166, 166, 166, 1835, 166, 4394, 166, + 5769, 4923, 166, 2917, 166, 166, 178, 166, 166, 1723, 166, 5887, 166, 4956, 2952, 166, + 4665, 3925, 3443, 3123, 166, 166, 166, 166, 166, 166, 5144, 166, 4288, 2074, 2192, 5442, + 6043, 1746, 2016, 5995, 2203, 166, 5686, 5659, 3193, 166, 4055, 166, 166, 2233, 3571, 5809, + 5984, 2323, 166, 166, 1740, 89, 4356, 6053, 6106, 3282, 4796, 166, 6116, 6056, 2353, 2829, + 166, 5807, 2042, 166, 166, 166, 1670, 5937, 4465, 5646, 166, 5562, 3008, 166, 2419, 3736, + 166, 4132, 169, 166, 166, 166, 2402, 166, 166, 1968, 2398, 166, 1684, 1827, 4551, 2679, + 3875, 166, 5585, 3835, 2295, 166, 1991, 1803, 2992, 166, 166, 5847, 2649, 166, 76, 5415, + 166, 2269, 2397, 5387, 5337, 4422, 166, 2672, 4832, 4617, 166, 166, 166, 166, 4552, 166, + 4612, 1750, 166, 1931, 166, 1691, 2424, 4194, 6018, 166, 166, 4458, 4856, 166, 2089, 3814, + 166, 2844, 166, 3592, 166, 4867, 5128, 166, 2685, 166, 166, 2616, 1972, 2617, 3943, 4664, + 166, 4999, 166, 166, 145, 3635, 166, 166, 4851, 166, 3483, 5039, 166, 3649, 3924, 166, + 166, 166, 3105, 4260, 166, 6098, 166, 3568, 267, 2456, 3653, 2096, 166, 166, 166, 3512, + 166, 3405, 166, 3504, 166, 166, 166, 4005, 2144, 1769, 166, 5474, 1920, 5554, 215, 2443, + 3351, 166, 5961, 166, 166, 166, 166, 242, 2331, 166, 166, 5931, 166, 166, 5862, 166, + 1710, 166, 166, 166, 3321, 166, 4139, 166, 166, 3515, 2732, 2510, 5544, 166, 166, 2783, + 166, 166, 166, 4018, 4649, 5789, 166, 166, 166, 166, 166, 2726, 6074, 166, 166, 166, + 5684, 166, 166, 3395, 166, 3100, 166, 5763, 3757, 1992, 166, 3198, 2003, 166, 166, 4675, + 166, 1893, 5621, 166, 2270, 166, 166, 166, 5421, 5590, 5664, 4045, 166, 3687, 4406, 2699, + 1811, 167, 4036, 5384, 166, 166, 4601, 1823, 4041, 239, 1954, 166, 146, 166, 166, 3077, + 5152, 5814, 1649, 5681, 166, 5868, 166, 166, 3792, 4860, 166, 5335, 5110, 1718, 166, 166, + 166, 166, 3718, 3365, 2826, 166, 166, 5021, 4783, 166, 5569, 5812, 166, 166, 1876, 166, + 3260, 166, 1789, 5667, 4224, 166, 166, 4385, 166, 166, 2620, 166, 4162, 2883, 2143, 5497, + 166, 166, 5316, 5680, 166, 166, 248, 4050, 166, 6021, 166, 2898, 4618, 166, 166, 166, + 166, 166, 5368, 166, 5378, 1842, 1914, 3696, 3962, 166, 4345, 2581, 1773, 2109, 166, 4371, + 166, 166, 3761, 5277, 5870, 3146, 166, 166, 166, 5764, 127, 3058, 4059, 4718, 166, 5097, + 5040, 5351, 3205, 166, 166, 4996, 2991, 2014, 166, 5846, 2558, 2688, 5595, 4027, 3347, 2125, + 5696, 5608, 166, 166, 3228, 3745, 5775, 166, 1757, 4647, 166, 5977, 3020, 166, 240, 2565, + 166, 4459, 166, 3367, 166, 166, 166, 3104, 166, 166, 166, 166, 166, 166, 259, 5486, + 2846, 166, 166, 166, 4778, 2713, 166, 3955, 5683, 2682, 2914, 5898, 166, 166, 166, 4400, + 317, 166, 5185, 3021, 5983, 4332, 3891, 166, 3095, 5003, 166, 166, 166, 5367, 166, 279, + 1784, 4019, 2736, 4905, 2651, 5346, 166, 4841, 166, 5606, 166, 166, 2806, 166, 5239, 166, + 166, 3237, 5490, 166, 225, 166, 166, 2254, 166, 2742, 4587, 22, 166, 166, 166, 5555, + 166, 108, 2927, 2218, 166, 2120, 166, 5452, 4087, 4369, 166, 166, 166, 166, 166, 4583, + 4338, 6035, 2840, 4365, 3624, 11, 1770, 166, 4630, 166, 3216, 166, 166, 166, 4638, 4699, + 3535, 2536, 4627, 166, 166, 5760, 1935, 166, 166, 5210, 166, 2219, 2484, 4597, 5193, 4799, + 3706, 166, 166, 166, 166, 3337, 3113, 5951, 4294, 166, 4040, 3200, 4217, 5861, 2767, 3530, + 4499, 2775, 4121, 134, 5939, 5880, 5908, 3869, 166, 166, 3316, 6095, 2441, 3288, 166, 3751, + 4794, 166, 166, 5803, 6169, 2356, 6182, 6135, 6127, 166, 3018, 166, 1674, 166, 166, 4097, + 166, 5923, 287, 5965, 5129, 166, 4078, 166, 166, 6114, 6015, 5990, 3573, 166, 4146, 2681, + 90, 6055, 4864, 166, 166, 6119, 3284, 6054, 5456, 5113, 6125, 166, 6057, 166, 3292, 166, + 166, 166, 166, 166, 6185, 5105, 1760, 166, 166, 166, 2720, 166, 2695, 5448, 166, 1936, + 166, 1807, 3406, 166, 166, 2161, 1642, 166, 5030, 166, 2036, 5451, 3427, 166, 166, 166, + 166, 3797, 166, 1627, 166, 4515, 166, 166, 166, 4241, 166, 166, 166, 2771, 166, 31, + 5197, 2638, 3035, 166, 166, 3914, 166, 166, 4546, 166, 166, 166, 4253, 3500, 166, 166, + 2526, 166, 2698, 166, 3726, 2744, 137, 166, 166, 2676, 166, 5594, 166, 166, 166, 4842, + 166, 63, 2888, 3585, 4798, 166, 5011, 166, 5634, 5464, 166, 166, 5620, 3894, 4070, 166, + 2730, 166, 166, 1810, 2503, 5957, 1721, 6066, 5188, 166, 166, 1890, 4505, 1771, 5455, 166, + 3132, 3984, 166, 166, 2811, 1962, 166, 166, 4872, 106, 3898, 3267, 166, 2085, 166, 4950, + 6040, 4525, 6044, 5866, 3613, 2907, 4615, 2135, 258, 166, 1681, 1941, 4888, 166, 4859, 6178, + 6174, 4858, 5209, 1912, 3340, 166, 4640, 5706, 166, 2763, 3153, 3951, 166, 5542, 5596, 5819, + 5330, 5048, 4037, 166, 6033, 4625, 3326, 2013, 5283, 136, 3373, 2154, 166, 166, 166, 4421, + 166, 5438, 2627, 2266, 2320, 166, 2588, 4790, 4290, 166, 4767, 5829, 2925, 5916, 2133, 166, + ], + hashAdjust: [ + 0, 5628, 7017, 1298, 2918, 2442, 8070, 6383, 6383, 7425, 2442, 5628, 8044, 7425, 3155, 6383, 2918, 7452, 1533, 6849, 5586, + 7452, 7452, 1533, 2209, 6029, 2794, 3509, 7992, 7733, 7452, 131, 6029, 4491, 1814, 7452, 6110, 3155, 7077, 6675, 532, 1334, + 7555, 5325, 3056, 1403, 1403, 3969, 4491, 1403, 7592, 522, 8070, 1403, 0, 1905, 3584, 2918, 922, 3304, 6675, 0, 7622, 7017, + 3210, 2139, 1403, 5225, 0, 3969, 7992, 5743, 5499, 5499, 5345, 7452, 522, 305, 3056, 7017, 7017, 2139, 1338, 3056, 7452, 1403, + 6799, 3204, 3290, 4099, 1814, 2191, 4099, 5743, 1570, 1334, 7363, 1905, 0, 6799, 4400, 1480, 6029, 1905, 0, 7525, 2028, 2794, + 131, 7646, 3155, 4986, 1858, 2442, 7992, 1607, 3584, 4986, 706, 6029, 5345, 7622, 6322, 5196, 1905, 6847, 218, 1785, 0, 4099, + 2981, 6849, 4751, 3950, 7733, 3056, 5499, 4055, 6849, 1533, 131, 5196, 2918, 3879, 5325, 2794, 6029, 0, 0, 322, 7452, 6178, + 2918, 2320, 6675, 3056, 6675, 1533, 6029, 1428, 2280, 2171, 6788, 7452, 3325, 107, 4262, 311, 5562, 7857, 6110, 2139, 4942, + 4600, 1905, 0, 3083, 5345, 7452, 6675, 0, 6112, 4099, 7017, 1338, 6799, 2918, 1232, 3584, 522, 6029, 5325, 1403, 6759, 6849, + 508, 6675, 2987, 7745, 6870, 896, 7452, 1232, 4400, 12, 2981, 3850, 4491, 6849, 0, 6675, 747, 4491, 7525, 6675, 7452, 7992, + 6921, 7323, 6849, 3056, 1199, 2139, 6029, 6029, 190, 4351, 7891, 4400, 7134, 1533, 1194, 3950, 6675, 5345, 6383, 7622, 131, + 1905, 2883, 6383, 1533, 5345, 2794, 4303, 1403, 0, 1338, 2794, 992, 4871, 6383, 4099, 2794, 3889, 6184, 3304, 1905, 6383, + 3950, 3056, 522, 1810, 3975, 7622, 7452, 522, 6799, 5866, 7084, 7622, 6528, 2798, 7452, 1810, 7907, 642, 5345, 1905, 6849, + 6675, 7745, 2918, 4751, 3229, 2139, 6029, 5207, 6601, 2139, 7452, 5890, 1428, 5628, 7622, 2139, 3146, 2400, 578, 941, 7672, + 1814, 3210, 1533, 4491, 12, 2918, 1900, 7425, 2794, 2987, 3465, 1377, 3822, 3969, 3210, 859, 5499, 6878, 1377, 3056, 4027, + 8065, 8065, 5207, 4400, 4303, 3210, 3210, 0, 6675, 357, 5628, 5512, 1905, 3452, 1403, 7646, 859, 6788, 3210, 2139, 378, 5663, + 7733, 870, 0, 4491, 4813, 2110, 578, 2139, 3056, 4099, 1905, 1298, 4672, 2191, 3950, 5499, 3969, 4974, 6323, 6029, 7414, 6383, + 0, 4974, 3210, 795, 4099, 131, 5345, 5345, 6576, 1810, 1621, 4400, 2918, 1905, 2442, 2679, 6322, 7452, 2110, 1403, 6383, 2653, + 5132, 6856, 7841, 2794, 6110, 2028, 6675, 7425, 6999, 7441, 6029, 183, 6675, 4400, 859, 1403, 2794, 5985, 5345, 1533, 322, + 4400, 1227, 5890, 4474, 4491, 3574, 8166, 6849, 7086, 5345, 5345, 5459, 3584, 6675, 3969, 7579, 8044, 2295, 2577, 1480, 5743, + 3304, 5499, 330, 4303, 6863, 3822, 4600, 4751, 5628, 3822, 2918, 6675, 2400, 6663, 1403, 6849, 6029, 3145, 6110, 3210, 747, + 3229, 3056, 2918, 7733, 330, 4055, 7322, 5628, 2987, 3056, 1905, 2903, 669, 5325, 2845, 4099, 5225, 6283, 4099, 5000, 642, + 4055, 5345, 8034, 2918, 1041, 5769, 7051, 1538, 2918, 3366, 608, 4303, 3921, 0, 2918, 1905, 218, 6687, 5963, 859, 3083, 2987, + 896, 5056, 1905, 2918, 4415, 7966, 7646, 2883, 5628, 7017, 8029, 6528, 4474, 6322, 5562, 6669, 4610, 7006, + ] +}; diff --git a/src/inc/helper.mjs b/src/inc/helper.mjs index a0cac56..77a7a45 100644 --- a/src/inc/helper.mjs +++ b/src/inc/helper.mjs @@ -9,7 +9,7 @@ try { } export default new class { - suits = { "♠": "S", "♣": "C", "♦": "D", "♥": "H" }; + suits = { "♠": "s", "♣": "c", "♦": "d", "♥": "h" }; stripColors = msg => msg.replace(/\x03\d{0,2}(,\d{0,2}|\x02\x02)?/g, ''); rand = (max = 1) => ~~(Math.random() * (max - 1) + 1); diff --git a/src/inc/hr.mjs b/src/inc/hr.mjs new file mode 100644 index 0000000..cd5d0cb --- /dev/null +++ b/src/inc/hr.mjs @@ -0,0 +1,136 @@ +import constants from './constants.mjs'; + +export default new class handranker { + rankHands(board, hand) { + const bestHand = this.calcBestHand(hand.map(c => this.toCard(c)), board.map(c => this.toCard(c))); + + return { + rank: bestHand.rank, + percentage: (9999 - bestHand.rank) / 100, + combination: this.toCombination(bestHand.rank), + //madeHand: bestHand.madeHand.map((c) => this.toPlayingCard(c)), + //unused: bestHand.unused.map((c) => this.toPlayingCard(c)), + }; + }; + + calcBestHand(pocketCards, communityCards) { + const cards = [...pocketCards, ...communityCards]; + const { rank, madeHand } = this.rank567cardHand([...pocketCards, ...communityCards]); + return { + rank, + madeHand, + unused: cards.filter((c) => !madeHand.find((mc) => mc === c)), + }; + }; + + toCombination(rank) { + const fixedRank = this.toFixedTexasRank(rank); + if(fixedRank === 10) return 'StraightFlush'; + if(fixedRank === 166) return 'FourOfAKind'; + if(fixedRank === 322) return 'FullHouse'; + if(fixedRank === 1599) return 'Flush'; + if(fixedRank === 1609) return 'Straight'; + if(fixedRank === 2467) return 'ThreeOfAKind'; + if(fixedRank === 3325) return 'TwoPairs'; + if(fixedRank === 6185) return 'Pair'; + if(fixedRank === 7462) return 'HighCard'; + return 'Invalid'; + }; + + cactusFastRankHand(hand) { + const [c0, c1, c2, c3, c4] = hand; + if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) + return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; + const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; + if(r) + return r; + let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); + u = u ^ (u >>> 16); + u += u << 8; + u ^= u >>> 4; + return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; + }; + + rank567cardHand(hand) { + if(hand.length === 5) { + return { + rank: this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]), + madeHand: [hand[0], hand[1], hand[2], hand[3], hand[4]], + }; + } + if(hand.length === 6) { + const possibleHands = [ + [hand[0], hand[1], hand[2], hand[3], hand[4]], + [hand[0], hand[1], hand[2], hand[3], hand[5]], + [hand[0], hand[1], hand[2], hand[4], hand[5]], + [hand[0], hand[1], hand[3], hand[4], hand[5]], + [hand[0], hand[2], hand[3], hand[4], hand[5]], + [hand[1], hand[2], hand[3], hand[4], hand[5]], + ]; + const sortedHands = possibleHands.map(h => ({ + rank: this.cactusFastRankHand(h), + madeHand: h, + })).sort((a, b) => a.rank - b.rank); + return sortedHands[0]; + } + if (hand.length === 7) { + let r = 0; + let rank = 9999; + let bestHand = [hand[0], hand[1], hand[2], hand[3], hand[4]]; + for (let i = 0; i < 21; i++) { + const inputHand = [ + hand[constants.t7c5[i][0]], + hand[constants.t7c5[i][1]], + hand[constants.t7c5[i][2]], + hand[constants.t7c5[i][3]], + hand[constants.t7c5[i][4]], + ]; + r = this.cactusFastRankHand(inputHand); + if (r < rank) { + rank = r; + bestHand = inputHand; + } + } + return { + rank, + madeHand: bestHand, + }; + } + throw new Error(`Hand ranker doesn't support ${hand.length} cards`); + }; + + toFixedTexasRank(r) { + if(r <= 10) return 10; // StraightFlush + if(r <= 166) return 166; // FourOfAKind + if(r <= 322) return 322; // FullHouse + if(r <= 1599) return 1599; // Flush + if(r <= 1609) return 1609; // Straight + if(r <= 2467) return 2467; // ThreeOfAKind + if(r <= 3325) return 3325; // TwoPairs + if(r <= 6185) return 6185; // Pair + if(r != 65535) return 7462; // HighCard + return 65535; // Invalid + }; + + toPlayingCard(card) { + const rankRune = constants.rankToRune[(card >> 8) & 0xf]; + const suitRune = constants.suitToRune[(card >> 12) & 0xf]; + if (!rankRune || !suitRune) { + throw new Error(`Cannot convert Card ${card} to PlayingCard`); + } + return (rankRune + suitRune); + }; + + toCard(playingCard) { + const [rank, suit] = this.toRankAndSuit(playingCard); + return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; + }; + + toRankAndSuit(playingCard) { + const rank = constants.runeToRank[playingCard[0]]; + const suit = constants.runeToSuit[playingCard[1]]; + if (!suit || rank === undefined) + throw new Error(`Invalid playing card: ${playingCard}`); + return [rank, suit]; + }; +}; diff --git a/src/index.mjs b/src/index.mjs index bec3f2d..782b6c0 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,7 +1,7 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; -import { rankHands } from '@xpressit/winning-poker-hand-rank'; import helper from './inc/helper.mjs'; +import hr from './inc/hr.mjs'; const cfg = helper.config; export const bot = await new cuffeo(cfg.getFull().clients); @@ -29,6 +29,30 @@ bot.on("notice", msg => { bot.on("message", async e => { if(e.channel !== cfg.get('channel')) return; + if(e.message.startsWith(".cards ")) { + let cards = []; + try { + cards = JSON.parse(e.message.slice(7)); + } catch(err) { + return e.reply('das ist kein Array du Pflaumennase'); + } + + const hand = cards.slice(0, 2); + const board = cards.slice(2); + + let rank; + + try { + rank = hr.rankHands(board, hand); + } catch(err) { + console.log(err); + return e.reply(JSON.stringify(err)); + } + + e.reply(JSON.stringify(rank)); + + return; + } if(e.message === `.${e.self.me.nickname} help`) { await e.write(`PRIVMSG ${e.user.nick} I always say hirc schmirc, available commands are:`); const commands = [ @@ -48,32 +72,6 @@ bot.on("message", async e => { await e.write(`PRIVMSG ${e.user.nick} ${command}`); } } - if(e.message.startsWith(".cards ")) { - let cards = []; - try { - cards = JSON.parse(e.message.slice(7)); - } catch(err) { - return e.reply('das ist kein Array du Pflaumennase'); - } - - const all = cards; - const hand = cards.slice(0, 2); - const board = cards.slice(2); - - let oldrank; - let newrank; - - try { - oldrank = rankHands('texas', board, [hand])[0]; - newrank = handranker.evalHand(all); - } catch(err) { - return e.reply(JSON.stringify(err)); - } - - e.reply('old: ' + JSON.stringify(oldrank)); - e.reply('new: ' + JSON.stringify(newrank)); - return; - } if(e.message.match(new RegExp(`^${e.self.me.nickname}: Your bank account`))) { env.bank = +e.message.match(/is: (\d+) \(/)[1]; } -- 2.50.0 From 890e0ab5803b8eb029a46f65eec361e6a04d854d Mon Sep 17 00:00:00 2001 From: Flummi Date: Fri, 14 Jul 2023 00:06:15 +0200 Subject: [PATCH 3/3] handranker --- README.md | 2 - data/generate_table | Bin 101132 -> 0 bytes package.json | 3 +- src/inc/handranker.mjs | 112 ++++++++++++++++++++++----------- src/inc/helper.mjs | 2 +- src/inc/hr.mjs | 136 ----------------------------------------- src/index.mjs | 34 +++++------ 7 files changed, 94 insertions(+), 195 deletions(-) delete mode 100755 data/generate_table delete mode 100644 src/inc/hr.mjs diff --git a/README.md b/README.md index 9c52c65..5e0866d 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,6 @@ ## Installation & Usage npm i -npm run build - cp config.example.json config.json edit config.json diff --git a/data/generate_table b/data/generate_table deleted file mode 100755 index 181922dd2ee90b76c93aed3436ec0485fbb0cda8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101132 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 M5;OA{!1WUY0AtXwo&W#< diff --git a/package.json b/package.json index 8a04c1b..37a93e5 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,7 @@ "x64" ], "scripts": { - "start": "node ./src/index.mjs", - "build": "cd ./data && ./generate_table" + "start": "node ./src/index.mjs" }, "author": "Flummi", "license": "ISC", diff --git a/src/inc/handranker.mjs b/src/inc/handranker.mjs index 8c4456e..15d62c6 100644 --- a/src/inc/handranker.mjs +++ b/src/inc/handranker.mjs @@ -1,44 +1,84 @@ -import fs from 'node:fs'; +import constants from './constants.mjs'; export default new class handranker { - #ranks; + rankHands(board, hand) { + let bestHand = this.calcBestHand([...board, ...hand].map(c => this.toCard(c))); - constructor() { - this.#ranks = fs.readFileSync('./data/HandRanks.dat'); - - this.handtypes = [ - "InvalidHand", "HighCard", "Pair", - "TwoPairs", "ThreeOfAKind", "Straight", - "Flush", "FullHouse", "FourOfAKind", - "StraightFlush" - ]; - - this.cards = ['']; - for(const cv of [..."23456789TJQKA"]) - for(const cs of [..."CDHS"]) - this.cards.push(cv + cs); - }; - evalHand(cards) { - if(!this.#ranks) - throw new Error("HandRanks.dat not loaded, run 'npm run build' first!"); - - if(![7,6,5,3].includes(cards.length)) - throw new Error("Hand must be 3, 5, 6, or 7 cards"); - - cards = cards.map(c => this.cards.indexOf(c)); - - let p = 53; - for(let i = 0; i < cards.length; i++) - p = this.#ranks.readUInt32LE((p + cards[i]) * 4); - - if(cards.length == 5 || cards.length == 6) - p = this.#ranks.readUInt32LE(p * 4); + if(bestHand > 6000) bestHand += 2000; return { - //handType: p >> 12, - handRank: p & 0x00000fff, - value: p, - handName: this.handtypes[p >> 12] + rank: bestHand, + percentage: (9999 - bestHand) / 100, + combination: this.toCombination(bestHand) }; }; + + toCombination(r) { + if(r > 6185) return 'HighCard'; + if(r > 3325) return 'Pair'; + if(r > 2467) return 'TwoPairs'; + if(r > 1609) return 'ThreeOfAKind'; + if(r > 1599) return 'Straight'; + if(r > 322) return 'Flush'; + if(r > 166) return 'FullHouse'; + if(r > 10) return 'FourOfAKind'; + return 'StraightFlush'; + }; + + cactusFastRankHand(hand) { + const [c0, c1, c2, c3, c4] = hand; + if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) + return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; + const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; + if(r) + return r; + let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); + u = u ^ (u >>> 16); + u += u << 8; + u ^= u >>> 4; + return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; + }; + + calcBestHand(hand) { + if(hand.length === 5) + return this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]) + if(hand.length === 6) { + const possibleHands = [ + [hand[0], hand[1], hand[2], hand[3], hand[4]], + [hand[0], hand[1], hand[2], hand[3], hand[5]], + [hand[0], hand[1], hand[2], hand[4], hand[5]], + [hand[0], hand[1], hand[3], hand[4], hand[5]], + [hand[0], hand[2], hand[3], hand[4], hand[5]], + [hand[1], hand[2], hand[3], hand[4], hand[5]], + ]; + const sortedHands = possibleHands.map(h => this.cactusFastRankHand(h)).sort(); + return sortedHands[0]; + } + if(hand.length === 7) { + let r = 0; + let rank = 9999; + for(let i = 0; i < 21; i++) { + const inputHand = [ + hand[constants.t7c5[i][0]], + hand[constants.t7c5[i][1]], + hand[constants.t7c5[i][2]], + hand[constants.t7c5[i][3]], + hand[constants.t7c5[i][4]], + ]; + r = this.cactusFastRankHand(inputHand); + if(r < rank) + rank = r; + } + return rank; + } + throw `Hand ranker doesn't support ${hand.length} cards`; + }; + + toCard(playingCard) { + const rank = constants.runeToRank[playingCard[0]]; + const suit = constants.runeToSuit[playingCard[1]]; + if(!suit || rank === undefined) + throw `Invalid playing card: ${playingCard}`; + return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; + }; }; diff --git a/src/inc/helper.mjs b/src/inc/helper.mjs index 77a7a45..a0cac56 100644 --- a/src/inc/helper.mjs +++ b/src/inc/helper.mjs @@ -9,7 +9,7 @@ try { } export default new class { - suits = { "♠": "s", "♣": "c", "♦": "d", "♥": "h" }; + suits = { "♠": "S", "♣": "C", "♦": "D", "♥": "H" }; stripColors = msg => msg.replace(/\x03\d{0,2}(,\d{0,2}|\x02\x02)?/g, ''); rand = (max = 1) => ~~(Math.random() * (max - 1) + 1); diff --git a/src/inc/hr.mjs b/src/inc/hr.mjs deleted file mode 100644 index cd5d0cb..0000000 --- a/src/inc/hr.mjs +++ /dev/null @@ -1,136 +0,0 @@ -import constants from './constants.mjs'; - -export default new class handranker { - rankHands(board, hand) { - const bestHand = this.calcBestHand(hand.map(c => this.toCard(c)), board.map(c => this.toCard(c))); - - return { - rank: bestHand.rank, - percentage: (9999 - bestHand.rank) / 100, - combination: this.toCombination(bestHand.rank), - //madeHand: bestHand.madeHand.map((c) => this.toPlayingCard(c)), - //unused: bestHand.unused.map((c) => this.toPlayingCard(c)), - }; - }; - - calcBestHand(pocketCards, communityCards) { - const cards = [...pocketCards, ...communityCards]; - const { rank, madeHand } = this.rank567cardHand([...pocketCards, ...communityCards]); - return { - rank, - madeHand, - unused: cards.filter((c) => !madeHand.find((mc) => mc === c)), - }; - }; - - toCombination(rank) { - const fixedRank = this.toFixedTexasRank(rank); - if(fixedRank === 10) return 'StraightFlush'; - if(fixedRank === 166) return 'FourOfAKind'; - if(fixedRank === 322) return 'FullHouse'; - if(fixedRank === 1599) return 'Flush'; - if(fixedRank === 1609) return 'Straight'; - if(fixedRank === 2467) return 'ThreeOfAKind'; - if(fixedRank === 3325) return 'TwoPairs'; - if(fixedRank === 6185) return 'Pair'; - if(fixedRank === 7462) return 'HighCard'; - return 'Invalid'; - }; - - cactusFastRankHand(hand) { - const [c0, c1, c2, c3, c4] = hand; - if((c0 & c1 & c2 & c3 & c4 & 0xf000) !== 0) - return constants.fastFlushes[(c0 | c1 | c2 | c3 | c4) >>> 16]; - const r = constants.fastUnique5[(c0 | c1 | c2 | c3 | c4) >>> 16]; - if(r) - return r; - let u = 0xe91aaa35 + (((c0 & 0xff) * (c1 & 0xff) * (c2 & 0xff) * (c3 & 0xff) * (c4 & 0xff)) | 0); - u = u ^ (u >>> 16); - u += u << 8; - u ^= u >>> 4; - return constants.hash[((u + (u << 2)) >>> 19) ^ (constants.hashAdjust[(u >>> 8) & 0x1ff] | 0)]; - }; - - rank567cardHand(hand) { - if(hand.length === 5) { - return { - rank: this.cactusFastRankHand([hand[0], hand[1], hand[2], hand[3], hand[4]]), - madeHand: [hand[0], hand[1], hand[2], hand[3], hand[4]], - }; - } - if(hand.length === 6) { - const possibleHands = [ - [hand[0], hand[1], hand[2], hand[3], hand[4]], - [hand[0], hand[1], hand[2], hand[3], hand[5]], - [hand[0], hand[1], hand[2], hand[4], hand[5]], - [hand[0], hand[1], hand[3], hand[4], hand[5]], - [hand[0], hand[2], hand[3], hand[4], hand[5]], - [hand[1], hand[2], hand[3], hand[4], hand[5]], - ]; - const sortedHands = possibleHands.map(h => ({ - rank: this.cactusFastRankHand(h), - madeHand: h, - })).sort((a, b) => a.rank - b.rank); - return sortedHands[0]; - } - if (hand.length === 7) { - let r = 0; - let rank = 9999; - let bestHand = [hand[0], hand[1], hand[2], hand[3], hand[4]]; - for (let i = 0; i < 21; i++) { - const inputHand = [ - hand[constants.t7c5[i][0]], - hand[constants.t7c5[i][1]], - hand[constants.t7c5[i][2]], - hand[constants.t7c5[i][3]], - hand[constants.t7c5[i][4]], - ]; - r = this.cactusFastRankHand(inputHand); - if (r < rank) { - rank = r; - bestHand = inputHand; - } - } - return { - rank, - madeHand: bestHand, - }; - } - throw new Error(`Hand ranker doesn't support ${hand.length} cards`); - }; - - toFixedTexasRank(r) { - if(r <= 10) return 10; // StraightFlush - if(r <= 166) return 166; // FourOfAKind - if(r <= 322) return 322; // FullHouse - if(r <= 1599) return 1599; // Flush - if(r <= 1609) return 1609; // Straight - if(r <= 2467) return 2467; // ThreeOfAKind - if(r <= 3325) return 3325; // TwoPairs - if(r <= 6185) return 6185; // Pair - if(r != 65535) return 7462; // HighCard - return 65535; // Invalid - }; - - toPlayingCard(card) { - const rankRune = constants.rankToRune[(card >> 8) & 0xf]; - const suitRune = constants.suitToRune[(card >> 12) & 0xf]; - if (!rankRune || !suitRune) { - throw new Error(`Cannot convert Card ${card} to PlayingCard`); - } - return (rankRune + suitRune); - }; - - toCard(playingCard) { - const [rank, suit] = this.toRankAndSuit(playingCard); - return ((1 << rank) << 16) | (suit << 12) | (rank << 8) | constants.PRIMES[rank]; - }; - - toRankAndSuit(playingCard) { - const rank = constants.runeToRank[playingCard[0]]; - const suit = constants.runeToSuit[playingCard[1]]; - if (!suit || rank === undefined) - throw new Error(`Invalid playing card: ${playingCard}`); - return [rank, suit]; - }; -}; diff --git a/src/index.mjs b/src/index.mjs index 782b6c0..f0e3762 100644 --- a/src/index.mjs +++ b/src/index.mjs @@ -1,16 +1,15 @@ import cuffeo from 'cuffeo'; import handranker from './inc/handranker.mjs'; import helper from './inc/helper.mjs'; -import hr from './inc/hr.mjs'; const cfg = helper.config; export const bot = await new cuffeo(cfg.getFull().clients); export const env = { - gamestate: 'notstarted, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'), // [notstarted,preflop,flop,turn,river] + gamestate: 'not started, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'), hand: false, board: false, - winchance: false, + odds: false, joined: false, callamount: 0, pot: 0, @@ -43,10 +42,9 @@ bot.on("message", async e => { let rank; try { - rank = hr.rankHands(board, hand); + rank = handranker.rankHands(board, hand); } catch(err) { - console.log(err); - return e.reply(JSON.stringify(err)); + return e.reply(err); } e.reply(JSON.stringify(rank)); @@ -162,7 +160,7 @@ bot.on("message", async e => { // bot's turn if(e.message.match(new RegExp(`Current player: ${e.self.me.nickname}( |$)`))) { let action = 'c'; // default - if(env.gamestate === 'preflop' || !env.winchance) { // preflop + if(env.gamestate === 'preflop' || !env.odds) { // preflop env.lastaction = action; return e.reply(action); // checkcall } @@ -173,7 +171,7 @@ bot.on("message", async e => { if(env.callamount > env.bank) // not enough money lol return e.reply(['huan!', 'f']); - if(env.winchance < 6500) { + if(env.odds < 6500) { if(helper.rand(5) === 1 && env.callamount < (helper.rand(2, 6) * 10)) { // bad hand, call anyway action = 'c'; } @@ -181,32 +179,32 @@ bot.on("message", async e => { action = 'f'; } } - else if(env.winchance > 7000) { // decent hand, raise + else if(env.odds > 55) { // decent hand, raise if(helper.rand(5) === 1) { // 20% action = 'r ' + (env.callamount + helper.rand(5) * 10); } } - else if(env.winchance > 15000) { // good hand lol + else if(env.odds > 70) { // good hand lol if(helper.rand(2) === 1) { // 50% action = 'r ' + (env.callamount + helper.rand(6) * 10); } } - else if(env.winchance > 20000) { // fuck them all + else if(env.odds > 85) { // fuck them all action = 'r ' + (env.callamount + helper.rand(7) * 10); } } else { // checkphase - if(env.winchance > 7000) { // decend hand, raise + if(env.odds > 55) { // decend hand, raise if(helper.rand(5) === 1) { // 20% action = 'r ' + (env.callamount + helper.rand(5) * 10); } } - else if(env.winchance > 15000) { // good hand lol + else if(env.odds > 70) { // good hand lol if(helper.rand(2) === 1) { // 50% action = 'r ' + (env.callamount + helper.rand(6) * 10); } } - else if(env.winchance > 20000) { // fuck them all + else if(env.odds > 85) { // fuck them all action = 'r ' + (env.callamount + helper.rand(7) * 10); } } @@ -226,8 +224,8 @@ bot.on("message", async e => { if(cfg.get('debug')) e.reply(`${oldstate} -> ${env.gamestate}`); - const rank = handranker.evalHand([...env.board, ...env.hand]); - env.winchance = rank.value; + const rank = handranker.rankHands(env.board, env.hand); + env.odds = rank.percentage; } // end of game @@ -246,13 +244,13 @@ bot.on("message", async e => { } const oldstate = env.gamestate; - env.gamestate = 'notstarted, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'); + env.gamestate = 'not started, ' + (cfg.get('autojoin') ? 'autojoin' : 'no autojoin'); if(cfg.get('debug')) e.reply(`${oldstate} -> ${env.gamestate}`); env.hand = false; env.board = false; - env.winchance = false; + env.odds = false; env.joined = false; env.pot = 0; env.lastaction = false; -- 2.50.0