diff --git a/README.md b/README.md index b3e447a..7926e8b 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ filters, the driver registry, and shared status types live under | Razer | `@openmouse/keyboard-protocol/razer` | | Logitech | `@openmouse/keyboard-protocol/logitech` | | SteelSeries | `@openmouse/keyboard-protocol/steelseries` | +| Keychron (Hall-effect) | `@openmouse/keyboard-protocol/keychron` | | Arbiter Studio | `@openmouse/keyboard-protocol/arbiter` | Kochi Hummingbird 68 (`1CA2:0901`) supports reading and changing Windows/Mac diff --git a/docs/keychron-support.md b/docs/keychron-support.md new file mode 100644 index 0000000..86fed57 --- /dev/null +++ b/docs/keychron-support.md @@ -0,0 +1,95 @@ +# Keychron Hall-effect keyboards + +Keychron's Hall-effect (HE/TMR) boards share one configuration protocol, the +`KC_HE` command group (`0xA9`) on the VIA raw-HID collection. The codec is +`@openmouse/keyboard-protocol/keychron`; the WebHID client is +`KeychronHidClient` in `src/drivers/keychron/hid.ts`. + +## Status + +Implemented from static analysis of Keychron Launcher and **not yet run against +a physical board**. The unit tests pin the byte layouts Launcher uses; they do +not show firmware behaviour. Treat every write as unverified until a board has +been exercised, and note the gaps below before relying on a value. + +## Evidence + +- Launcher (`launcher.keychron.com`, `main.d60cabdb24f8f1c7.js`) contains five + command classes, `getCommandVersion()` 1 to 5, that build the same + `[0xA9, subcommand, ...]` reports. Their differences are reproduced here: + one-byte travel up to v4 and 16-bit travel in v5, 4-byte key slots up to v4 + and 7-byte slots in v5, and a v4+ profile-info tail with DKS and snap-tap + counts (v5 adds the travel unit). +- Reports are 32 bytes, report ID 0, usage page `0xFF60`, usage `0x61`. +- The product catalog (`src/keychron/products.ts`, 169 boards) comes from + Launcher's per-board definitions at + `static/device/{vid*65536+pid}/json/v3.json`, gathered on 2026-10-30. A board + is included when its definition declares the `HE` feature, an `extra.he` + block or an `axisList`, or when its name says HE/TMR (three boards, marked + `launcherFlag: false`). + +## What is implemented + +| Area | Commands | +| --- | --- | +| Identity | version and capability bits, profile count/size/active slot, profile names | +| Travel | actuation, rapid-trigger press/release, global and per-key (`setTravel`) | +| Profiles | select, read and decode the whole buffer, save, clear, rename (28-byte UTF-16BE name, length byte `2 * chars`, then save) | +| Advanced keys | DKS decode and write/remove, snap-tap decode and write, turbo/DKR/toggle slot decode | +| Response | curve read/write, live per-key travel | +| Layout and legends | physical key layout per board (`keychronLayoutFor`), keymap read through the standard VIA dynamic-keymap command (`readKeymap`, `readLayerCount`), and `keychronKeycodeLegend` for key labels | +| Maintenance | calibration start/stop/state, switch axis type read/write, single-key reset, joystick mode | + +## Layouts and legends + +`src/keychron/layouts.ts` holds the physical key layout (position, size, +rotation, knob index) for every catalogued board, 103 distinct layouts taken +from Launcher's definitions with decorative art removed. The profile buffer has +no key names, so legends come from the keymap: the driver reads it with VIA's +`DYNAMIC_KEYMAP_GET_BUFFER` (0x12, 14 keys per read, big-endian keycodes), the +same way Launcher does. `keychronKeycodeLegend` labels basic keycodes, +modifiers, layer keys and mod/layer-tap wrappers, and shows the hex value for +anything else (custom or vendor codes). + +## Key remapping + +`KeychronHidClient.setKeycode(layer, row, col, code)` sets one key with the +standard VIA `dynamic_keymap_set_keycode` command (`0x05`, big-endian code), as +Launcher does, then reads the key back (`0x04`) and fails if the board did not +keep it. Launcher itself does not wait for a reply, so the read-back is this +driver's addition. Encoders use `0x15`/`0x14` (frames only; no driver method yet). + +The keycode tables depend on the VIA protocol version the board reports +(`readViaProtocol`, command `0x01`): layer keys sit at `0x5200`/`0x5220`... on +protocol 11 and later and at `0x5000`/`0x5100`... before that, and the custom +(Keychron-specific) keys start at `0x7E00` (12+), `0x7F00` (11) or `0x5F80`. +`setKeycode` only sends codes the table for the board's version can name, so a +layer or custom code is never sent with the wrong table. `keychronKeycodeCatalog` +builds the picker's categories from the same table, including the board's +custom keys. `remapWarnings` flags replacing the only layer key on a layer. + +Not covered: macros, tap-dance and other quantum keycodes beyond the layer, +mod-tap and layer-tap forms, encoder remapping in the driver, and resetting the +keymap. A remap persists in the board's memory. + +## Write parameters (from Launcher's call sites) + +- `workMode`: Global 0, Static 1, QuickTrigger (rapid trigger) 2. +- `keyMode`: 1 applies to every key; 0 applies to the keys set in a 24-byte + bitmap (byte `3 * row + floor(col / 8)`, bit `col % 8`). +- Launcher follows every write with `saveProfile`, which the driver leaves to + the caller. + +## Known gaps + +- Travel range: Launcher's displayed range is `min` up to `max + deadzone` + (`extra.he.distance`); the deadzone extends the top, it is not a lower bound. +- The profile buffer layout past the snap-tap region, the v5 DKS/snap-tap + write offsets beyond what Launcher sets, and turbo/DKR write commands are not + covered. +- `readStatus` reports connection type as unknown; the raw-HID path is the same + over USB and the 2.4 GHz receiver, and Bluetooth was not examined. +- `settingsReady` stays false, so hosts do not show a keyboard settings surface + until a board has verified the writes. +- Non-HE Keychron keyboards (QMK/VIA, ZMK, "DEBOUNCE" boards) use a different + feature set and are not claimed. diff --git a/package.json b/package.json index b95d725..c5ba19e 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "docs/razer-support.md", "docs/logitech-support.md", "docs/steelseries-support.md", + "docs/keychron-support.md", "docs/arbiter-support.md", "README.md", "CONTRIBUTING.md" @@ -50,6 +51,10 @@ "types": "./dist/steelseries/index.d.ts", "import": "./dist/steelseries/index.js" }, + "./keychron": { + "types": "./dist/keychron/index.d.ts", + "import": "./dist/keychron/index.js" + }, "./arbiter": { "types": "./dist/arbiter/index.d.ts", "import": "./dist/arbiter/index.js" diff --git a/src/drivers/keyboard-types.ts b/src/drivers/keyboard-types.ts index e08d971..55ebd0d 100644 --- a/src/drivers/keyboard-types.ts +++ b/src/drivers/keyboard-types.ts @@ -36,6 +36,7 @@ import type { import type { RazerKeyboardState } from "@openmouse/keyboard-protocol/razer"; import type { LogitechKeyboardState } from "@openmouse/keyboard-protocol/logitech"; import type { SteelSeriesApexProfile } from "@openmouse/keyboard-protocol/steelseries"; +import type { KeychronHeFeatures } from "@openmouse/keyboard-protocol/keychron"; import type { ArbiterKeyboardState } from "@openmouse/keyboard-protocol/arbiter"; export interface KeyboardUiHints { @@ -170,6 +171,23 @@ export interface WuqueStatus { macros?: WuqueMacroState | null; } +/** Keychron Hall-effect board identity and the layout the profile buffer follows. */ +export interface KeychronState { + productId: number; + /** Hall-effect command version the board reports (1-5). */ + heVersion: number; + features: KeychronHeFeatures; + /** Millimetres per travel step in profile values. */ + unit: number; + profileSize: number; + dksCount: number | null; + snapTapCount: number | null; + rows: number; + cols: number; + /** Travel range from Launcher's board definition, when it declares one. */ + travel: { min?: number; max?: number; deadzone?: number } | null; +} + export interface KeyboardStatus { /** HB68 Windows/Mac mode, verified through both mode queries. */ kochi?: { systemMode: import("../kochi/index.js").KochiSystemMode }; @@ -219,6 +237,8 @@ export interface KeyboardStatus { razer?: RazerKeyboardState | null; /** Logitech HID++ keyboard state. */ logitech?: LogitechKeyboardState | null; + /** Keychron Hall-effect board state (command version, units, profile layout). */ + keychron?: KeychronState | null; /** SteelSeries Apex Pro on-board analog profile (persisted snapshot). */ steelseries?: { productId: number; profile: SteelSeriesApexProfile | null; verified: boolean } | null; /** Arbiter Studio keyboard state (travel, light effect, SuperTap). */ diff --git a/src/drivers/keychron/hid.test.ts b/src/drivers/keychron/hid.test.ts new file mode 100644 index 0000000..753855c --- /dev/null +++ b/src/drivers/keychron/hid.test.ts @@ -0,0 +1,227 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { KEYCHRON_HE_COMMAND, KEYCHRON_HE_PRODUCTS, KEYCHRON_HE_SUBCOMMAND as SUB } from "../../keychron/index.ts"; +import { KeychronHidClient } from "./hid.ts"; + +const ID = Number(Object.keys(KEYCHRON_HE_PRODUCTS)[0]); +const { rows, cols } = KEYCHRON_HE_PRODUCTS[ID]!; + +const SIZE = 4 * (rows * cols + 1) + 19 * 20 + 3 * 20 + 32; + +/** A v4 board with three profiles; the active one is slot 1. */ +class FakeBoard { + vendorId = 0x3434; + productId = ID; + productName = "Keychron"; + opened = false; + collections = [{ usagePage: 0xff60, usage: 0x61, inputReports: [], outputReports: [], featureReports: [], children: [] }]; + listeners = new Set<(event: HIDInputReportEvent) => void>(); + sent: Uint8Array[] = []; + silent = false; + silentVia = false; + viaProtocol = 12; + keymap = new Map(); + keycodeAt(layer: number, key: number) { return this.keymap.get(layer * 10_000 + key) ?? 4 + (key % 26); } + ignoreKeycodeWrites = false; + nak = false; + buffer = new Uint8Array(SIZE); + version = 4; + get hid(): HIDDevice { return this as unknown as HIDDevice; } + async open() { this.opened = true; } + async close() { this.opened = false; } + addEventListener(_t: string, l: (e: HIDInputReportEvent) => void) { this.listeners.add(l); } + removeEventListener(_t: string, l: (e: HIDInputReportEvent) => void) { this.listeners.delete(l); } + emit(frame: Uint8Array, reportId = 0) { + const event = { device: this.hid, reportId, data: new DataView(frame.buffer, frame.byteOffset, frame.length) } as HIDInputReportEvent; + this.listeners.forEach((l) => l(event)); + } + async sendReport(reportId: number, data: BufferSource) { + assert.equal(reportId, 0); + const request = data as Uint8Array; + assert.equal(request.length, 32); + this.sent.push(request.slice()); + if (this.silent) return; + if ([0x01, 0x04, 0x05, 0x11, 0x12].includes(request[0]!)) { + if (this.silentVia) return; + const via = new Uint8Array(32); + via.set(request.slice(0, 6)); + if (request[0] === 0x01) via.set([0, this.viaProtocol], 1); + else if (request[0] === 0x11) via[1] = 4; + else if (request[0] === 0x05) { if (!this.ignoreKeycodeWrites) this.keymap.set(request[1]! * 10_000 + request[2]! * cols + request[3]!, request[4]! << 8 | request[5]!); return; } + else if (request[0] === 0x04) { const code = this.keycodeAt(request[1]!, request[2]! * cols + request[3]!); via[4] = code >> 8; via[5] = code & 0xff; } + else for (let i = 0; i < request[3]!; i += 2) { + const key = ((request[1]! << 8 | request[2]!) + i) / 2; + const code = this.keycodeAt(0, key); via[4 + i] = code >> 8; via[5 + i] = code & 0xff; + } + this.emit(via); + return; + } + assert.equal(request[0], KEYCHRON_HE_COMMAND); + const reply = new Uint8Array(32); + reply.set(request.slice(0, 2)); + switch (request[1]) { + case SUB.getVersion: reply.set([this.version, 0, 0b100001], 2); break; + case SUB.getProfilesInfo: reply.set([1, 3, SIZE & 0xff, SIZE >> 8, 20, 20], 2); break; + case SUB.getProfileBuffer: { + reply.set(request.slice(2, 6), 2); + const offset = request[3]! | (request[4]! << 8); + const length = request[5]!; + // The name window sits in the last 32 bytes: "P" + slot digit. + const nameStart = SIZE - 32; + const name = new Uint8Array(32); + name.set([0, 0x50, 0, 0x30 + request[2]!]); + for (let i = 0; i < length; i++) { + const at = offset + i; + reply[6 + i] = at >= nameStart ? name[at - nameStart]! : this.buffer[at]!; + } + break; + } + case SUB.setProfileName: break; + case SUB.setTravel: case SUB.saveProfileBuffer: reply[2] = this.nak ? 1 : 0; break; + case SUB.getRealtimeTravel: reply.set([request[2]!, request[3]!, 33], 3); break; + default: break; + } + this.emit(new Uint8Array(32).fill(0x7f), 1); // wrong report id never completes a transaction + this.emit(reply); + } +} + +const client = (board: FakeBoard) => new KeychronHidClient(board.hid); + +test("isSupported needs a catalogued HE product and the raw-HID collection", () => { + assert.equal(KeychronHidClient.isSupported(new FakeBoard().hid), true); + const other = new FakeBoard(); other.productId = 0x0001; + assert.equal(KeychronHidClient.isSupported(other.hid), false); + const vendor = new FakeBoard(); vendor.vendorId = 0x1234; + assert.equal(KeychronHidClient.isSupported(vendor.hid), false); + const page = new FakeBoard(); page.collections = [{ ...page.collections[0]!, usage: 1 }]; + assert.equal(KeychronHidClient.isSupported(page.hid), false); +}); + +test("readStatus reports version, units and profile names", async () => { + const board = new FakeBoard(); + const status = await client(board).readStatus(); + assert.equal(status.brand, "Keychron"); + assert.equal(status.activeProfile, 1); + assert.equal(status.profileCount, 3); + assert.deepEqual(status.profileNames, ["P0", "P1", "P2"]); + assert.equal(status.keychron?.heVersion, 4); + assert.equal(status.keychron?.unit, 0.1); + assert.equal(status.keychron?.features.switchAxis, true); + assert.equal(status.keychron?.features.supportMechanical, true); +}); + +test("readProfile walks the buffer in 26-byte reads and decodes keys", async () => { + const board = new FakeBoard(); + const word = (12 << 2) | (3 << 8); + board.buffer.set([word & 0xff, (word >> 8) & 0xff, 0, 0], 4 * (cols + 1)); // key (1,0) + const profile = await client(board).readProfile(); + assert.equal(profile.keys[1]![0]!.distance, 12); + assert.equal(profile.keys[1]![0]!.advancePress, 3); + const reads = board.sent.filter((frame) => frame[1] === SUB.getProfileBuffer); + assert.ok(reads.length >= Math.ceil(SIZE / 26)); + assert.ok(reads.every((frame) => frame[2] === 1 && frame[5]! <= 26)); + await assert.rejects(() => client(board).readProfile(9), RangeError); +}); + +test("setTravel targets the active profile and requires an acknowledgement", async () => { + const board = new FakeBoard(); + const keyboard = client(board); + await keyboard.setTravel({ workMode: 1, press: 20, sensitivePress: 4, keyMode: 1 }); + const write = board.sent.find((frame) => frame[1] === SUB.setTravel)!; + assert.deepEqual([...write.slice(2, 8)], [1, 1, 20, 4, 4, 1]); + await keyboard.saveProfile(); + assert.equal(board.sent.at(-1)![1], SUB.saveProfileBuffer); + board.nak = true; + await assert.rejects(() => keyboard.saveProfile(), /did not save/); +}); + +test("renameProfile writes the name then saves", async () => { + const board = new FakeBoard(); + await client(board).renameProfile(2, "Aim"); + const rename = board.sent.find((frame) => frame[1] === SUB.setProfileName)!; + assert.deepEqual([...rename.slice(2, 8)], [2, 6, 0, 0x41, 0, 0x69]); + assert.equal(board.sent.at(-1)![1], SUB.saveProfileBuffer); + await assert.rejects(() => client(board).renameProfile(7, "x"), RangeError); + await assert.rejects(() => client(board).renameProfile(0, ""), RangeError); +}); + +test("readKeymap reads one layer through the VIA keymap command", async () => { + const board = new FakeBoard(); + const keymap = await client(board).readKeymap(0); + assert.equal(keymap.length, rows); + assert.ok(keymap.every((row) => row.length === cols)); + assert.deepEqual(keymap[0]!.slice(0, 3), [4, 5, 6]); + const reads = board.sent.filter((frame) => frame[0] === 0x12); + assert.equal(reads.length, Math.ceil(rows * cols / 14)); + assert.equal(await client(board).readLayerCount(), 4); +}); + +test("a board that ignores the keymap read keeps its session for HE commands", async () => { + const board = new FakeBoard(); + board.silentVia = true; + const keyboard = client(board); + await assert.rejects(() => keyboard.readKeymap(0), /did not answer/); + await assert.rejects(() => keyboard.readLayerCount(), /did not answer/); + assert.equal((await keyboard.readStatus()).brand, "Keychron"); + assert.equal(await keyboard.readKeyTravel(1, 1), 33); +}); + +test("setKeycode writes one key and confirms it by reading it back", async () => { + const board = new FakeBoard(); + const keyboard = client(board); + assert.equal(await keyboard.readViaProtocol(), 12); + assert.equal(await keyboard.setKeycode(0, 1, 2, 0x2c), 0x2c); // Space + const write = board.sent.find((frame) => frame[0] === 0x05)!; + assert.deepEqual([...write.slice(0, 6)], [0x05, 0, 1, 2, 0x00, 0x2c]); + assert.equal((await keyboard.readKeymap(0))[1]![2], 0x2c); + await assert.rejects(() => keyboard.setKeycode(0, rows, 0, 4), RangeError); + await assert.rejects(() => keyboard.setKeycode(0, 0, 0, 0x7e40), /not valid/); +}); + +test("setKeycode fails loudly when the board does not keep the assignment", async () => { + const board = new FakeBoard(); + board.ignoreKeycodeWrites = true; + await assert.rejects(() => client(board).setKeycode(0, 0, 0, 0x2c), /did not keep/); +}); + +test("older firmware uses the legacy layer-key table and rejects modern layer codes", async () => { + const board = new FakeBoard(); + board.viaProtocol = 10; + const keyboard = client(board); + assert.equal(await keyboard.setKeycode(0, 0, 0, 0x5100), 0x5100); // MO(0) on the legacy table + await assert.rejects(() => keyboard.setKeycode(0, 0, 1, 0x5221), /not valid/); // modern MO(1) means something else +}); + +test("remapWarnings flags replacing the only layer key on a layer", async () => { + const board = new FakeBoard(); + board.keymap.set(0, 0x5221); // MO(1), the only layer key on layer 0 + const keyboard = client(board); + assert.equal((await keyboard.remapWarnings(0, 0, 0, 0x04)).length, 1); + assert.deepEqual(await keyboard.remapWarnings(0, 0, 0, 0x5223), []); + assert.deepEqual(await keyboard.remapWarnings(0, 0, 1, 0x04), []); +}); + +test("live travel matches the echoed key", async () => { + const board = new FakeBoard(); + assert.equal(await client(board).readKeyTravel(2, 5), 33); +}); + +test("a silent board faults the session so a late reply cannot confirm a later command", async () => { + const board = new FakeBoard(); + board.silent = true; + const keyboard = client(board); + await assert.rejects(() => keyboard.readStatus(), /did not answer/); + board.silent = false; + await assert.rejects(() => keyboard.readStatus(), /Reconnect/); +}); + +test("close releases the device and rejects further use", async () => { + const board = new FakeBoard(); + const keyboard = client(board); + await keyboard.readStatus(); + await keyboard.close(); + assert.equal(board.opened, false); + assert.equal(board.listeners.size, 0); + await assert.rejects(() => keyboard.open(), /Reconnect/); +}); diff --git a/src/drivers/keychron/hid.ts b/src/drivers/keychron/hid.ts new file mode 100644 index 0000000..b63ef44 --- /dev/null +++ b/src/drivers/keychron/hid.ts @@ -0,0 +1,417 @@ +import type { KeyboardStatus } from "../keyboard-types.ts"; +import { + KEYCHRON_CONFIG_USAGE, KEYCHRON_CONFIG_USAGE_PAGE, KEYCHRON_HE_PRODUCTS, KEYCHRON_HE_SUBCOMMAND, + KEYCHRON_REPORT_ID, KEYCHRON_VENDOR_ID, decodeKeychronAxisType, decodeKeychronCalibrationState, + decodeKeychronCurve, decodeKeychronHeVersion, decodeKeychronProfileBuffer, decodeKeychronProfileName, + decodeKeychronProfilesInfo, decodeKeychronRealtimeTravel, isKeychronHeReply, isKeychronHeVersion, + joinKeychronProfile, keychronHeAcknowledged, keychronHeFrames, keychronNameWindow, + keychronProfileChunk, keychronProfileNameBytes, keychronKeymapReadPlan, keychronViaFrames, + isKeychronKeymapReply, decodeKeychronKeymapChunk, joinKeychronKeymap, decodeKeychronLayerCount, + decodeKeychronViaProtocol, decodeKeychronKeycode, isKeychronKeycodeReply, keychronKeycodeIsChoosable, + keychronKeycodeContext, keychronIsLayerKey, + type KeychronKeycodeContext, keychronProfileReadPlan, + type KeychronAxisType, type KeychronCalibrationState, type KeychronCurve, type KeychronHeSubcommand, + type KeychronHeVersion, type KeychronHeVersionInfo, type KeychronProfileBuffer, type KeychronProfilesInfo, + type KeychronTravelSetting, +} from "@openmouse/keyboard-protocol/keychron"; + +const REPLY_TIMEOUT_MS = 1500; + +/** + * Keychron Hall-effect keyboards over the VIA raw-HID collection (0xFF60:0x61). + * Only boards in the HE catalog are claimed, so a non-HE Keychron keyboard + * sharing the vendor id is never offered this driver. + */ +export class KeychronHidClient { + readonly device: HIDDevice; + private queue: Promise = Promise.resolve(); + private listening = false; + private faulted = false; + private heVersion: KeychronHeVersionInfo | null = null; + private info: KeychronProfilesInfo | null = null; + private pending: { + accepts: (frame: Uint8Array) => boolean; + resolve: (frame: Uint8Array) => void; + reject: (error: Error) => void; + } | null = null; + + constructor(device: HIDDevice) { this.device = device; } + + /** A catalogued HE board that exposes the raw-HID command collection. */ + static isSupported(device: HIDDevice): boolean { + return device.vendorId === KEYCHRON_VENDOR_ID && device.productId in KEYCHRON_HE_PRODUCTS + && KeychronHidClient.configCollection(device.collections) !== null; + } + + private static configCollection(collections: readonly HIDCollectionInfo[]): HIDCollectionInfo | null { + for (const collection of collections) { + if (collection.usagePage === KEYCHRON_CONFIG_USAGE_PAGE && collection.usage === KEYCHRON_CONFIG_USAGE) { + return collection; + } + const nested = KeychronHidClient.configCollection(collection.children); + if (nested) return nested; + } + return null; + } + + async open(): Promise { + if (!KeychronHidClient.isSupported(this.device)) throw new Error("Not a Keychron Hall-effect configuration interface."); + if (this.faulted) throw new Error("Reconnect the keyboard after a failed transaction."); + if (!this.device.opened) await this.device.open(); + // close() can land while device.open() is pending; recheck before listening. + if (this.faulted) { + if (this.device.opened) await this.device.close(); + throw new Error("Reconnect the keyboard after a failed transaction."); + } + if (!this.listening) { + this.device.addEventListener("inputreport", this.onReport); + this.listening = true; + } + } + + async close(): Promise { + this.faulted = true; + this.pending?.reject(new Error("Keychron keyboard disconnected.")); + if (this.listening) this.device.removeEventListener("inputreport", this.onReport); + this.listening = false; + if (this.device.opened) await this.device.close(); + } + + private readonly onReport = (event: HIDInputReportEvent): void => { + if (event.device !== this.device || event.reportId !== KEYCHRON_REPORT_ID || !this.pending) return; + const frame = new Uint8Array(event.data.buffer, event.data.byteOffset, event.data.byteLength); + if (this.pending.accepts(frame)) this.pending.resolve(frame.slice()); + }; + + private serialized(operation: () => Promise): Promise { + const next = this.queue.then(operation); + this.queue = next.catch(() => undefined); + return next; + } + + /** Send one report and wait for the reply `accepts` recognises. */ + private async exchange( + request: Uint8Array, accepts: (frame: Uint8Array) => boolean, faultOnTimeout = true, + ): Promise { + await this.open(); + let timer: ReturnType | undefined; + const reply = new Promise((resolve, reject) => { + this.pending = { accepts, resolve, reject }; + timer = setTimeout(() => reject(new Error(`Keychron keyboard did not answer command 0x${request[1]!.toString(16)}.`)), REPLY_TIMEOUT_MS); + }); + try { + const [frame] = await Promise.all([reply, this.device.sendReport(KEYCHRON_REPORT_ID, request)]); + return frame; + } catch (error) { + // Replies carry no transaction id, so a delayed one could confirm a later + // command. Do not reuse the session after a timeout or a failed send. + // The optional VIA reads opt out of the timeout case: their replies carry + // a different command id, so a late one can never satisfy an HE command. + if (faultOnTimeout || !(error instanceof Error && error.message.includes("did not answer"))) this.faulted = true; + throw error; + } finally { + clearTimeout(timer); + this.pending = null; + } + } + + private call(request: Uint8Array, subcommand: KeychronHeSubcommand): Promise { + return this.exchange(request, (frame) => isKeychronHeReply(frame, subcommand)); + } + + private async version(): Promise { + if (!this.heVersion) { + const reply = decodeKeychronHeVersion(await this.call(keychronHeFrames.version(), KEYCHRON_HE_SUBCOMMAND.getVersion)); + if (!reply || !isKeychronHeVersion(reply.version)) { + throw new Error("The keyboard reported an unsupported Hall-effect command version."); + } + this.heVersion = reply; + } + return this.heVersion.version as KeychronHeVersion; + } + + private async profilesInfo(refresh = false): Promise { + if (!this.info || refresh) { + const version = await this.version(); + const info = decodeKeychronProfilesInfo( + await this.call(keychronHeFrames.profilesInfo(), KEYCHRON_HE_SUBCOMMAND.getProfilesInfo), version, + ); + if (!info) throw new Error("The keyboard did not report its profile layout."); + this.info = info; + } + return this.info; + } + + private async readRange(slot: number, offset: number, length: number): Promise { + const reply = await this.exchange( + keychronHeFrames.readProfile(slot, offset, length), + (frame) => isKeychronHeReply(frame, KEYCHRON_HE_SUBCOMMAND.getProfileBuffer) + && frame[3] === (offset & 0xff) && frame[4] === (offset >> 8) && frame[5] === length, + ); + return keychronProfileChunk(reply)!.slice(0, length); + } + + private async readName(slot: number, version: KeychronHeVersion, size: number): Promise { + const { offset, length } = keychronNameWindow(version, size); + const reply = await this.exchange( + keychronHeFrames.readProfile(slot, offset, length), + (frame) => isKeychronHeReply(frame, KEYCHRON_HE_SUBCOMMAND.getProfileBuffer) + && frame[2] === slot && frame[3] === (offset & 0xff) && frame[4] === (offset >> 8) && frame[5] === length, + ); + return decodeKeychronProfileName(reply); + } + + private async readBuffer(slot: number, size: number): Promise { + const chunks: Uint8Array[] = []; + for (const { offset, length } of keychronProfileReadPlan(size)) chunks.push(await this.readRange(slot, offset, length)); + return joinKeychronProfile(chunks, size); + } + + private matrix() { + const product = KEYCHRON_HE_PRODUCTS[this.device.productId]; + if (!product) throw new Error("Unknown Keychron Hall-effect product."); + return product; + } + + /** Decode one onboard profile: actuation, rapid trigger, DKS and snap-tap slots. */ + readProfile(slot?: number): Promise { + return this.serialized(async () => { + const version = await this.version(); + const info = await this.profilesInfo(true); + const target = slot ?? info.current; + if (!Number.isInteger(target) || target < 0 || target >= info.total) throw new RangeError("Profile slot out of range."); + const product = this.matrix(); + return decodeKeychronProfileBuffer(version, await this.readBuffer(target, info.size), product.rows, product.cols); + }); + } + + readAxisType(): Promise { + return this.serialized(async () => { + const info = await this.profilesInfo(); + const axis = decodeKeychronAxisType(await this.call(keychronHeFrames.getAxisType(), KEYCHRON_HE_SUBCOMMAND.getAxisType), info.unit); + if (!axis) throw new Error("The keyboard did not report its switch axis type."); + return axis; + }); + } + + /** Switch the board's active profile slot. */ + selectProfile(slot: number): Promise { + return this.serialized(async () => { + const info = await this.profilesInfo(); + if (!Number.isInteger(slot) || slot < 0 || slot >= info.total) throw new RangeError("Profile slot out of range."); + await this.call(keychronHeFrames.selectProfile(slot), KEYCHRON_HE_SUBCOMMAND.selectProfile); + this.info = { ...info, current: slot }; + }); + } + + /** + * Write actuation / rapid-trigger values into the active profile's working + * buffer. Call `saveProfile()` afterwards to persist them, as Launcher does. + * Values are in the profile's `unit` steps (`readStatus().keychron.unit`). + */ + setTravel(setting: KeychronTravelSetting): Promise { + return this.serialized(async () => { + const version = await this.version(); + const info = await this.profilesInfo(); + const reply = await this.call(keychronHeFrames.setTravel(version, info.current, setting), KEYCHRON_HE_SUBCOMMAND.setTravel); + if (!keychronHeAcknowledged(reply, KEYCHRON_HE_SUBCOMMAND.setTravel)) throw new Error("The keyboard rejected the travel setting."); + }); + } + + saveProfile(): Promise { + return this.serialized(async () => { + const info = await this.profilesInfo(); + const reply = await this.call(keychronHeFrames.saveProfile(info.current), KEYCHRON_HE_SUBCOMMAND.saveProfileBuffer); + if (!keychronHeAcknowledged(reply, KEYCHRON_HE_SUBCOMMAND.saveProfileBuffer)) throw new Error("The keyboard did not save the profile."); + }); + } + + private viaProtocol: number | null = null; + + /** The VIA protocol version the board reports; it selects the keycode table. */ + readViaProtocol(): Promise { + return this.serialized(() => this.viaProtocolVersion()); + } + + private async viaProtocolVersion(): Promise { + if (this.viaProtocol === null) { + const reply = await this.exchange( + keychronViaFrames.protocolVersion(), (frame) => decodeKeychronViaProtocol(frame) !== null, false, + ); + this.viaProtocol = decodeKeychronViaProtocol(reply)!; + } + return this.viaProtocol; + } + + /** Keycode context (protocol version and the board's custom keys) for legends and the picker. */ + keycodeContext(): Promise> { + return this.serialized(async () => keychronKeycodeContext(this.device.productId, await this.viaProtocolVersion())); + } + + private async readKey(layer: number, row: number, col: number): Promise { + const reply = await this.exchange( + keychronViaFrames.getKeycode(layer, row, col), (frame) => isKeychronKeycodeReply(frame, layer, row, col), false, + ); + return decodeKeychronKeycode(reply)!; + } + + /** + * Set one key's keycode and confirm it by reading the key back. Launcher + * writes without waiting for a reply, so the read-back is what proves the + * board took it. The keycode must be one this module can name for the + * board's protocol version, so a layer or custom code is never sent with the + * wrong table. Persists in the board's memory. + */ + setKeycode(layer: number, row: number, col: number, code: number): Promise { + return this.serialized(async () => { + const product = this.matrix(); + if (row >= product.rows || col >= product.cols) throw new RangeError("Key position is outside the board's matrix."); + const protocol = await this.viaProtocolVersion(); + const context = keychronKeycodeContext(this.device.productId, protocol); + if (!keychronKeycodeIsChoosable(code, context)) throw new RangeError("That keycode is not valid for this board's firmware."); + await this.open(); + await this.device.sendReport(KEYCHRON_REPORT_ID, keychronViaFrames.setKeycode(layer, row, col, code)); + const confirmed = await this.readKey(layer, row, col); + if (confirmed !== code) throw new Error("The keyboard did not keep the new key assignment."); + return confirmed; + }); + } + + /** + * Warnings before replacing `row`,`col` on `layer` with `code`: replacing the + * last layer key that reaches other layers can strand keys on those layers. + */ + async remapWarnings(layer: number, row: number, col: number, code: number): Promise { + const protocol = await this.readViaProtocol(); + const keymap = await this.readKeymap(layer); + const current = keymap[row]?.[col]; + const warnings: string[] = []; + if (current !== undefined && keychronIsLayerKey(current, protocol) && !keychronIsLayerKey(code, protocol)) { + const others = keymap.flat().filter((value, index) => keychronIsLayerKey(value, protocol) && index !== row * keymap[0]!.length + col); + if (others.length === 0) warnings.push("This is the only layer key on this layer; replacing it removes the way to reach other layers from here."); + } + return warnings; + } + + /** Number of keymap layers the board has. */ + readLayerCount(): Promise { + return this.serialized(async () => { + const count = decodeKeychronLayerCount(await this.exchange( + keychronViaFrames.layerCount(), (frame) => decodeKeychronLayerCount(frame) !== null, false, + )); + if (count === null) throw new Error("The keyboard did not report its layer count."); + return count; + }); + } + + /** + * Read one keymap layer as `keycodes[row][col]` using the standard VIA + * dynamic-keymap read. Pair it with `keychronKeycodeLegend` to label keys. + * A board that ignores the read rejects with "did not answer" but the + * session stays usable for the Hall-effect commands. + */ + readKeymap(layer = 0): Promise { + return this.serialized(async () => { + const { rows, cols } = this.matrix(); + const chunks: number[][] = []; + for (const read of keychronKeymapReadPlan(layer, rows, cols)) { + const reply = await this.exchange(keychronViaFrames.keymapBuffer(read), (frame) => isKeychronKeymapReply(frame, read.offset), false); + const codes = decodeKeychronKeymapChunk(reply, read.bytes); + if (!codes) throw new Error("The keyboard sent a short keymap reply."); + chunks.push(codes); + } + return joinKeychronKeymap(chunks, rows, cols); + }); + } + + /** Rename a profile slot, then save, as Launcher does. */ + renameProfile(slot: number, name: string): Promise { + return this.serialized(async () => { + const { chars, length } = keychronProfileNameBytes(name); + const info = await this.profilesInfo(); + if (!Number.isInteger(slot) || slot < 0 || slot >= info.total) throw new RangeError("Profile slot out of range."); + await this.call(keychronHeFrames.setProfileName(slot, chars, length), KEYCHRON_HE_SUBCOMMAND.setProfileName); + const saved = await this.call(keychronHeFrames.saveProfile(info.current), KEYCHRON_HE_SUBCOMMAND.saveProfileBuffer); + if (!keychronHeAcknowledged(saved, KEYCHRON_HE_SUBCOMMAND.saveProfileBuffer)) throw new Error("The keyboard did not save the profile."); + }); + } + + clearProfile(): Promise { + return this.serialized(async () => { + const info = await this.profilesInfo(); + await this.call(keychronHeFrames.clearProfile(info.current), KEYCHRON_HE_SUBCOMMAND.clearProfileBuffer); + }); + } + + readCurve(): Promise { + return this.serialized(async () => { + const curve = decodeKeychronCurve(await this.call(keychronHeFrames.getCurve(), KEYCHRON_HE_SUBCOMMAND.getCurve)); + if (!curve) throw new Error("The keyboard did not report its response curve."); + return curve; + }); + } + + writeCurve(curve: KeychronCurve): Promise { + return this.serialized(async () => { + await this.call(keychronHeFrames.setCurve(curve), KEYCHRON_HE_SUBCOMMAND.setCurve); + }); + } + + /** Live travel of one key, in the profile's `unit` steps. */ + readKeyTravel(row: number, col: number): Promise { + return this.serialized(async () => { + const version = await this.version(); + const reply = await this.exchange( + keychronHeFrames.realtimeTravel(row, col), + (frame) => decodeKeychronRealtimeTravel(frame, version, row, col) !== null, + ); + return decodeKeychronRealtimeTravel(reply, version, row, col)!; + }); + } + + startCalibration(): Promise { + return this.serialized(async () => { + await this.call(keychronHeFrames.calibrate(), KEYCHRON_HE_SUBCOMMAND.calibrate); + }); + } + + /** Stop calibration. The board sends no reply to this command. */ + stopCalibration(): Promise { + return this.serialized(async () => { + await this.open(); + await this.device.sendReport(KEYCHRON_REPORT_ID, keychronHeFrames.stopCalibration()); + }); + } + + readCalibration(): Promise { + return this.serialized(async () => { + const state = decodeKeychronCalibrationState( + await this.call(keychronHeFrames.calibrationState(), KEYCHRON_HE_SUBCOMMAND.getCalibrateState), + ); + if (!state) throw new Error("The keyboard did not report its calibration state."); + return state; + }); + } + + readStatus(): Promise { + return this.serialized(async () => { + const product = this.matrix(); + const version = await this.version(); + const info = await this.profilesInfo(true); + const names: (string | null)[] = []; + for (let slot = 0; slot < info.total; slot++) names.push(await this.readName(slot, version, info.size)); + const versionInfo = this.heVersion!; + return { + brand: "Keychron", name: product.name, connectionType: "Unknown", connectionDetail: "Raw HID", + firmware: [`Hall-effect command v${version}`], firmwareVersion: null, layout: null, serial: null, + activeProfile: info.current, profileCount: info.total, profileNames: names, + ui: { family: "keychron", defaultDisplayName: product.name, settingsReady: false }, + keychron: { + productId: this.device.productId, heVersion: version, features: versionInfo.features, + unit: info.unit, profileSize: info.size, dksCount: info.dksCount, snapTapCount: info.snapTapCount, + rows: product.rows, cols: product.cols, travel: product.travel ?? null, + }, + }; + }); + } +} diff --git a/src/drivers/registry.test.ts b/src/drivers/registry.test.ts index 1ddaff5..4141699 100644 --- a/src/drivers/registry.test.ts +++ b/src/drivers/registry.test.ts @@ -6,11 +6,13 @@ import { WuqueHidClient } from "./wuque/hid.ts"; import { RazerKeyboardHidClient } from "./razer/hid.ts"; import { LogitechKeyboardHidClient } from "./logitech/hid.ts"; import { SteelSeriesKeyboardHidClient } from "./steelseries/hid.ts"; +import { KeychronHidClient } from "./keychron/hid.ts"; import { ArbiterKeyboardHidClient } from "./arbiter/hid.ts"; import { DEVICE_DRIVERS, clientSupportScore, createSupportedClient, deviceBrand } from "./registry.ts"; import { ARBITER_HID_FILTERS, SUPPORTED_HID_FILTERS, + KEYCHRON_HID_FILTERS, KOCHI_HID_FILTERS, LOGITECH_HID_FILTERS, RAZER_HID_FILTERS, @@ -31,6 +33,7 @@ import { import { RAZER_KEYBOARD_PRODUCT_IDS, RAZER_VENDOR_ID } from "@openmouse/keyboard-protocol/razer"; import { LOGITECH_KEYBOARD_PRODUCT_IDS, LOGITECH_RECEIVER_PRODUCT_IDS, LOGITECH_VENDOR_ID } from "@openmouse/keyboard-protocol/logitech"; import { STEELSERIES_KEYBOARD_PRODUCT_IDS, STEELSERIES_VENDOR_ID } from "@openmouse/keyboard-protocol/steelseries"; +import { KEYCHRON_CONFIG_USAGE, KEYCHRON_CONFIG_USAGE_PAGE, KEYCHRON_HE_PRODUCT_IDS, KEYCHRON_VENDOR_ID } from "@openmouse/keyboard-protocol/keychron"; /** A vendor collection carrying only the fields `isSupported` reads. */ function collection(usagePage: number, usage: number, children: HIDCollectionInfo[] = []): HIDCollectionInfo { @@ -57,6 +60,13 @@ const WOOTING_DEVICE = (): HIDDevice => fakeDevice({ vendorId: WOOTING_VENDOR_ID const WUQUE_DEVICE = (): HIDDevice => fakeDevice({ vendorId: WUQUE_VENDOR_ID, productId: 0x1b10, collections: [collection(WUQUE_CONFIG_USAGE_PAGE, 1)] }); +const KEYCHRON_DEVICE = (overrides: FakeDeviceOptions = {}): HIDDevice => fakeDevice({ + vendorId: KEYCHRON_VENDOR_ID, + productId: KEYCHRON_HE_PRODUCT_IDS[0]!, + collections: [collection(KEYCHRON_CONFIG_USAGE_PAGE, KEYCHRON_CONFIG_USAGE)], + ...overrides, +}); + const RAZER_DEVICE = (): HIDDevice => fakeDevice({ vendorId: RAZER_VENDOR_ID, productId: 0x02a6, collections: [collection(0x0001, 0x0002)] }); @@ -75,7 +85,7 @@ const LOGITECH_RECEIVER_DEVICE = (): HIDDevice => test("DEVICE_DRIVERS lists one branded entry per supported protocol", () => { assert.deepEqual( DEVICE_DRIVERS.map((driver) => driver.brand), - ["Kochi", "Wooting", "Wuque Studio", "Razer", "Logitech", "SteelSeries", "Arbiter Studio"], + ["Kochi", "Wooting", "Wuque Studio", "Razer", "Logitech", "SteelSeries", "Keychron", "Arbiter Studio"], ); }); @@ -86,9 +96,18 @@ test("createSupportedClient returns the matching driver client", () => { assert.ok(createSupportedClient(LOGITECH_DEVICE()) instanceof LogitechKeyboardHidClient); assert.ok(createSupportedClient(LOGITECH_RECEIVER_DEVICE()) instanceof LogitechKeyboardHidClient); assert.ok(createSupportedClient(STEELSERIES_DEVICE()) instanceof SteelSeriesKeyboardHidClient); + assert.ok(createSupportedClient(KEYCHRON_DEVICE()) instanceof KeychronHidClient); assert.ok(createSupportedClient(ARBITER_DEVICE()) instanceof ArbiterKeyboardHidClient); }); +test("Keychron claims only catalogued HE boards on the raw-HID collection", () => { + assert.equal(deviceBrand(createSupportedClient(KEYCHRON_DEVICE())!), "Keychron"); + assert.equal(createSupportedClient(KEYCHRON_DEVICE({ productId: 0x0001 })), null); + assert.equal(createSupportedClient(KEYCHRON_DEVICE({ collections: [collection(0xff60, 0x62)] })), null); + assert.equal(KEYCHRON_HID_FILTERS.length, KEYCHRON_HE_PRODUCT_IDS.length); + assert.ok(KEYCHRON_HID_FILTERS.every((filter) => filter.vendorId === VENDOR_ID.keychron)); +}); + test("createSupportedClient returns null for a device no driver claims", () => { assert.equal(createSupportedClient(fakeDevice({ vendorId: 0x1234, productId: 0x9999 })), null); // A Wuque product id under the Wooting vendor belongs to neither driver. @@ -190,6 +209,7 @@ test("SUPPORTED_HID_FILTERS concatenates the vendor filter sets with no duplicat ...RAZER_HID_FILTERS, ...LOGITECH_HID_FILTERS, ...STEELSERIES_HID_FILTERS, + ...KEYCHRON_HID_FILTERS, ...ARBITER_HID_FILTERS, ]); const seen = new Set(SUPPORTED_HID_FILTERS.map((f) => `${f.vendorId}:${f.productId}:${f.usagePage}:${f.usage}`)); diff --git a/src/drivers/registry.ts b/src/drivers/registry.ts index 8a65314..da4a406 100644 --- a/src/drivers/registry.ts +++ b/src/drivers/registry.ts @@ -4,6 +4,7 @@ import { KochiHidClient } from "./kochi/hid.ts"; import { RazerKeyboardHidClient } from "./razer/hid.ts"; import { LogitechKeyboardHidClient } from "./logitech/hid.ts"; import { SteelSeriesKeyboardHidClient } from "./steelseries/hid.ts"; +import { KeychronHidClient } from "./keychron/hid.ts"; import { ArbiterKeyboardHidClient } from "./arbiter/hid.ts"; export type SupportedClient = @@ -13,6 +14,7 @@ export type SupportedClient = | RazerKeyboardHidClient | LogitechKeyboardHidClient | SteelSeriesKeyboardHidClient + | KeychronHidClient | ArbiterKeyboardHidClient; export interface DeviceDriver { @@ -29,6 +31,7 @@ export const DEVICE_DRIVERS: readonly DeviceDriver[] = [ { brand: "Razer", supports: (device) => RazerKeyboardHidClient.isSupported(device), create: (device) => new RazerKeyboardHidClient(device), score: () => 6 }, { brand: "Logitech", supports: (device) => LogitechKeyboardHidClient.isSupported(device), create: (device) => new LogitechKeyboardHidClient(device), score: () => 6 }, { brand: "SteelSeries", supports: (device) => SteelSeriesKeyboardHidClient.isSupported(device), create: (device) => new SteelSeriesKeyboardHidClient(device), score: () => 6 }, + { brand: "Keychron", supports: (device) => KeychronHidClient.isSupported(device), create: (device) => new KeychronHidClient(device), score: () => 6 }, { brand: "Arbiter Studio", supports: (device) => ArbiterKeyboardHidClient.isSupported(device), create: (device) => new ArbiterKeyboardHidClient(device), score: () => 6 }, ]; diff --git a/src/drivers/vendors.ts b/src/drivers/vendors.ts index 3e96c07..6aefec6 100644 --- a/src/drivers/vendors.ts +++ b/src/drivers/vendors.ts @@ -30,6 +30,12 @@ import { LOGITECH_RECEIVER_PRODUCT_IDS, LOGITECH_VENDOR_ID, } from "@openmouse/keyboard-protocol/logitech"; +import { + KEYCHRON_CONFIG_USAGE, + KEYCHRON_CONFIG_USAGE_PAGE, + KEYCHRON_HE_PRODUCT_IDS, + KEYCHRON_VENDOR_ID, +} from "@openmouse/keyboard-protocol/keychron"; import { STEELSERIES_CONFIG_USAGE, STEELSERIES_CONFIG_USAGE_PAGE, @@ -45,6 +51,7 @@ export const VENDOR_ID = { razer: RAZER_VENDOR_ID, logitech: LOGITECH_VENDOR_ID, steelseries: STEELSERIES_VENDOR_ID, + keychron: KEYCHRON_VENDOR_ID, arbiter: ARBITER_VENDOR_ID, arbiterAlt: ARBITER_VENDOR_ID_ALT, } as const; @@ -113,6 +120,18 @@ export const STEELSERIES_HID_FILTERS: HIDDeviceFilter[] = STEELSERIES_KEYBOARD_P usage: STEELSERIES_CONFIG_USAGE, })); +/** + * Keychron Hall-effect boards expose the HE command group on the VIA raw-HID + * collection (0xFF60:0x61). Each catalogued HE product id is filtered + * explicitly so a non-HE Keychron keyboard never reaches the picker. + */ +export const KEYCHRON_HID_FILTERS: HIDDeviceFilter[] = KEYCHRON_HE_PRODUCT_IDS.map((productId) => ({ + vendorId: KEYCHRON_VENDOR_ID, + productId, + usagePage: KEYCHRON_CONFIG_USAGE_PAGE, + usage: KEYCHRON_CONFIG_USAGE, +})); + /** * Arbiter Studio keyboards expose one configuration collection per catalog * entry. Each product id is paired with its own vendor id and usage page @@ -133,5 +152,6 @@ export const SUPPORTED_HID_FILTERS: HIDDeviceFilter[] = [ ...RAZER_HID_FILTERS, ...LOGITECH_HID_FILTERS, ...STEELSERIES_HID_FILTERS, + ...KEYCHRON_HID_FILTERS, ...ARBITER_HID_FILTERS, ]; diff --git a/src/index.ts b/src/index.ts index 2308c07..ac81405 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,4 +3,5 @@ export * as kochi from "./kochi/index.js"; export * as razer from "./razer/index.js"; export * as logitech from "./logitech/index.js"; export * as steelseries from "./steelseries/index.js"; +export * as keychron from "./keychron/index.js"; export * as arbiter from "./arbiter/index.js"; diff --git a/src/keychron/custom-keycodes.ts b/src/keychron/custom-keycodes.ts new file mode 100644 index 0000000..5183ad9 --- /dev/null +++ b/src/keychron/custom-keycodes.ts @@ -0,0 +1,247 @@ +/** + * Keychron custom keycodes per board, from Launcher's definitions + * (`customKeycodes`). Index `n` is the keycode `base + n`, where `base` depends on + * the board's VIA protocol version (see `keychronCustomKeycodeBase`). Each entry + * is `[shortName, title]`. + */ + +const CUSTOM_LISTS: readonly (readonly (readonly [short: string, title: string])[])[] = [ + [["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["Lock", "Lock Screenin Windows"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["SideHue", "side led hue"], ["SideStep", "side led step"], ["SideBD", "side brightness decrease"], ["SideBI", "side brightness increase"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["Mac/Win", "Switch between windows and macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["TGWM", "Toggle to WIN/MAC"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Launch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["Mac/Win", "Switch between windows and macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between macOS and Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in MacOS"], ["LPad", "Lanuch Pad in MacOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["Mac/Win", "Switch between windows and macOS"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between macOS and Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["Mac/Win", "Switch between windows and macOS"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between Windows and macOS"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["Pair", "Wireless Mode Pairing"], ["SR", "Screen Recording"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["TGWM", "Toggle to WIN/MAC"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["Boot", "BootLoader"], ["2.4G", "2.4G Pair"], ["SCRLOCK", "Screen lock in macOS"], ["Cmd-Comma", "Open preferences for the front app in macOS"], ["Opt", "Left Option"], ["Opt", "Right Option"], ["Cmd", "Left Command"], ["Cmd", "Right Command"], ["DESKTOP_L-m", "Switch desktops Left in macOS"], ["DESKTOP_R-m", "Switch desktops Right in macOS"], ["Emoji-m", "Open emoji in macOS"], ["Task", "Task View in Windows"], ["DESKTOP_L-w", "Switch desktops Left in Windows"], ["DESKTOP_R-w", "Switch desktops Right in Windows"], ["File", "File Explorer in Windows"], ["WinLock", "Lock your PC or switch accounts"], ["Set", "Open Settings in Windows"], ["Emoji-w", "Open emoji in Windows"], ["PrtSc-w", "Print Screen in Windows"], ["SShot", "Screenshot in macOS"], ["Batt", "Show battery level"], ["Siri", "call siri"], ["Cort", "call cortana"], ["MCtl", "Mission Control in macOS"], ["LPad", "Launch Pad in macOS"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["Mac/Win", "Switch between windows and macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["BL_SPI", "BL_SPI"], ["BL_SPD", "BL_SPD"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["Mac/Win", "Switch between windows and macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["TGWM", "Toggle to WIN/MAC"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana on Windows"], ["Voice", "Voice Input on Windows"], ["WLCK", "Lock Screen on Windows"], ["MLCK", "Lock Screen on macOS"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between macOS and Windows"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Globe", "Globe"], ["Focus", "Focus"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["OS Tog", "Toggle macOS/Windows mode"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Keychron Launcher in macOS"], ["WCHR", "Keychron Launcher in Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Globe", "Globe"], ["Focus", "Focus"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["OS Tog", "Toggle macOS/Windows mode"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Keychron Launcher in macOS"], ["WCHR", "Keychron Launcher in Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control on macOS"], ["LPad", "Launch Pad on macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View on Windows"], ["File", "File Explorer on Windows"], ["SShot", "Screenshot on macOS"], ["Cortana", "Cortana on Windows 10"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between macOS and Windows"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Globe", "Globe"], ["Focus", "Focus"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Keychron Launcher in macOS"], ["WCHR", "Keychron Launcher in Windows"]], + [["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["Lock", "Lock Screen in Windows"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOption", "Left Option"], ["ROption", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Launch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["Lock", "Lock Screenin Windows"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control on macOS"], ["LPad", "Launch Pad on macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View on Windows"], ["File", "File Explorer on Windows"], ["SShot", "Screenshot on macOS"], ["Cortana", "Cortana on Windows 10"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri on macOS"], ["BT1", "Bluetooth Host 1"], ["BT2", "Bluetooth Host 2"], ["BT3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control on macOS"], ["LPad", "Launch Pad on macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View on Windows"], ["File", "File Explorer on Windows"], ["SShot", "Screenshot on macOS"], ["Cortana", "Cortana on Windows 10"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri on macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["L Opt", "Left Option"], ["R Opt", "Right Option"], ["L Cmd", "Left Command"], ["R Cmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control on macOS"], ["LPad", "Launch Pad on macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View on Windows"], ["File", "File Explorer on Windows"], ["SShot", "Screenshot on macOS"], ["Cortana", "Cortana on Windows"], ["Siri", "Siri on macOS"], ["BT1", "Bluetooth Host 1"], ["BT2", "Bluetooth Host 2"], ["BT3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Launch Pad in Mac"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["TGWM", "Toggle to WIN/MAC"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOption", "Left Option"], ["ROption", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Launch Pad in Windows"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["OSTog", "Toggle between Windows and macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["TGWM", "Toggle to WIN/MAC"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in Mac"], ["LPad", "Lanuch Pad in Windows"], ["Globe", "Globe"], ["Focus", "Focus"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["MCHR", "Keychron Launcher in macOS"], ["WCHR", "Keychron Launcher in Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Mission Control on macOS"], ["LPad", "Launch Pad on macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View on Windows"], ["File", "File Explorer on Windows"], ["SShot", "Screenshot on macOS"], ["Cortana", "Cortana on Windows 10"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri on macOS"], ["BT1", "Bluetooth Host 1"], ["BT2", "Bluetooth Host 2"], ["BT3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OS_TOGGL", "OS_TOGGL"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana on Windows"], ["Voice", "Voice Input on Windows"], ["WLCK", "Lock Screen on Windows"], ["MLCK", "Lock Screen on macOS"], ["Siri", "Siri in macOS"], ["BTH1", "Bluetooth Host 1"], ["BTH2", "Bluetooth Host 2"], ["BTH3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["OSTog", "Toggle between macOS and Windows"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"], ["SideHue", "side led hue"], ["SideStep", "side led step"], ["SideBD", "side brightness decrease"], ["SideBI", "side brightness increase"], ["SideSPI", "side speed increase"], ["SideSPD", "side speed decrease"]], + [["LOpt", "Left Option"], ["ROpt", "Right Option"], ["LCmd", "Left Command"], ["RCmd", "Right Command"], ["MCtl", "Misson Control in macOS"], ["LPad", "Lanuch Pad in macOS"], ["Glob", "Globe/Fn on macOS"], ["Focus", "Toggle focus mode on macOS"], ["Task", "Task View in Windows"], ["File", "File Explorer in Windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in Windows"], ["Voice", "Voice Input in Windows"], ["Siri", "Siri in macOS"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["TGWM", "Toggle to WIN/MAC"]], + [["LOpt", "Left Option in macOS"], ["ROpt", "Right Option in macOS"], ["LCmd", "Left Command in macOS"], ["RCmd", "Right Command in macOS"], ["MCtl", "Mission Control in macOS"], ["LPad", "Launch Pad in macOS"], ["Task", "Task View in windows"], ["File", "File Explorer in windows"], ["SShot", "Screenshot in macOS"], ["Cortana", "Cortana in windows"], ["Voice", "Voice Input on Windows"], ["Siri", "Siri in macOS"], ["BT1", "Bluetooth Host 1"], ["BT2", "Bluetooth Host 2"], ["BT3", "Bluetooth Host 3"], ["2.4G", "2.4G"], ["Batt", "Show battery level"], ["PROF1", "Profile 1"], ["PROF2", "Profile 2"], ["PROF3", "Profile 3"], ["MCHR", "Open Keychron Launcher on macOS"], ["WCHR", "Open Keychron Launcher on Windows"]], +]; + +const CUSTOM_BY_PRODUCT: Readonly> = { + 0x0402: 0, + 0x0403: 0, + 0x040c: 1, + 0x0416: 2, + 0x0417: 3, + 0x0418: 4, + 0x0419: 5, + 0x041b: 6, + 0x041c: 6, + 0x041e: 7, + 0x041f: 1, + 0x0429: 8, + 0x042f: 8, + 0x043b: 9, + 0x0441: 7, + 0x0445: 7, + 0x0446: 4, + 0x0449: 10, + 0x044a: 4, + 0x044b: 7, + 0x0450: 11, + 0x0454: 10, + 0x045a: 12, + 0x045b: 13, + 0x045c: 14, + 0x045d: 14, + 0x045e: 6, + 0x045f: 6, + 0x0460: 15, + 0x0464: 16, + 0x0471: 15, + 0x0472: 15, + 0x0476: 16, + 0x047b: 17, + 0x047c: 15, + 0x047d: 18, + 0x047e: 19, + 0x0480: 19, + 0x0481: 16, + 0x0484: 20, + 0x0485: 19, + 0x0486: 16, + 0x048a: 21, + 0x048e: 8, + 0x048f: 22, + 0x0490: 16, + 0x0494: 23, + 0x0497: 24, + 0x0498: 15, + 0x049b: 17, + 0x049c: 25, + 0x04a1: 26, + 0x04a2: 27, + 0x04a5: 26, + 0x04a6: 26, + 0x0511: 28, + 0x0b00: 1, + 0x0b01: 1, + 0x0b02: 1, + 0x0b10: 29, + 0x0b11: 1, + 0x0b12: 1, + 0x0b13: 30, + 0x0b14: 31, + 0x0b15: 31, + 0x0b16: 32, + 0x0b20: 33, + 0x0b30: 12, + 0x0b31: 1, + 0x0b32: 1, + 0x0b33: 34, + 0x0b40: 1, + 0x0b50: 1, + 0x0b51: 1, + 0x0b52: 1, + 0x0b53: 32, + 0x0b60: 1, + 0x0b61: 1, + 0x0b62: 12, + 0x0b63: 32, + 0x0b64: 1, + 0x0b65: 32, + 0x0b66: 32, + 0x0ba0: 1, + 0x0bb0: 31, + 0x0bc0: 1, + 0x0bc1: 1, + 0x0e20: 35, + 0x0e21: 1, + 0x0e22: 1, + 0x0e23: 1, + 0x0e24: 32, + 0x0e25: 36, + 0x0e26: 36, + 0x0e27: 32, + 0x0e2a: 32, + 0x0e30: 1, + 0x0e31: 1, + 0x0e32: 37, + 0x0e35: 37, + 0x0e40: 1, + 0x0e41: 1, + 0x0e42: 38, + 0x0e43: 1, + 0x0e44: 1, + 0x0e45: 32, + 0x0e60: 1, + 0x0e61: 1, + 0x0e80: 1, + 0x0e81: 39, + 0x0e82: 39, + 0x0e83: 32, + 0x0e84: 32, + 0x0e85: 32, + 0x0e86: 32, + 0x0ea0: 1, + 0x0ea1: 1, + 0x0ea2: 1, + 0x0ea3: 1, + 0x0ea4: 1, + 0x0ea5: 1, + 0x0ea6: 1, + 0x0ea7: 32, + 0x0ea8: 32, + 0x0ea9: 32, + 0x0ec0: 1, + 0x1001: 16, + 0x1004: 14, + 0x1005: 15, + 0x1010: 40, + 0x1011: 12, + 0x1012: 14, + 0x1013: 14, + 0x1014: 41, + 0x1015: 14, + 0x1016: 41, + 0x1020: 40, + 0x1023: 42, + 0x1030: 43, + 0x1031: 43, + 0x1032: 14, + 0x1033: 16, + 0x1050: 44, + 0x1053: 45, + 0x1060: 40, + 0x1061: 16, + 0x1062: 16, + 0x1063: 41, + 0x1064: 16, + 0x10f3: 43, + 0x10f4: 14, + 0x1234: 1, + 0x1500: 2, + 0x1532: 44, + 0x1533: 20, + 0x1535: 15, + 0x1536: 46, + 0x1540: 47, + 0x1541: 15, + 0x1710: 12, + 0x1711: 48, + 0x1728: 49, + 0x1729: 32, + 0x172c: 50, + 0x172d: 51, + 0x1740: 16, + 0x17c0: 15, + 0x17f0: 15, + 0x1860: 52, +}; + +export interface KeychronCustomKeycode { + /** Index within the board's custom keycodes. */ + index: number; + shortName: string; + title: string; +} + +/** The custom keycodes of a catalogued board, or an empty list. */ +export function keychronCustomKeycodes(productId: number): readonly KeychronCustomKeycode[] { + const list = CUSTOM_LISTS[CUSTOM_BY_PRODUCT[productId] ?? -1] ?? []; + return list.map(([shortName, title], index) => ({ index, shortName, title })); +} diff --git a/src/keychron/index.ts b/src/keychron/index.ts new file mode 100644 index 0000000..1458f55 --- /dev/null +++ b/src/keychron/index.ts @@ -0,0 +1,659 @@ +/** + * Keychron Hall-effect keyboard protocol (the `KC_HE` command group, 0xA9) — + * transport-independent codec. + * + * Decoded from the public Keychron Launcher web app (launcher.keychron.com, + * `main.d60cabdb24f8f1c7.js`, the five `getCommandVersion()` classes that + * return 1-5) and its per-board definitions. See docs/keychron-support.md for + * the evidence, what is and is not hardware-verified, and the product catalog. + * + * Every command is one 32-byte report on the VIA raw-HID collection (usage page + * 0xFF60, usage 0x61, report id 0): + * + * [0xA9, subcommand, ...arguments, zero padding] + * + * and the board answers with a report that echoes `[0xA9, subcommand]`. The + * board reports its HE command version (1-5) for `AMC_GET_VERSION`; the + * version selects the key-slot layout and the width of the travel fields: + * + * v1-v4 one byte per travel value, in 0.1 mm steps + * v5 16-bit little-endian travel values, in a step the board reports + * (0.1, 0.01 or 0.001 mm) in its profile-info reply + * + * Nothing here has been run against a physical Keychron board. Frames mirror + * what Launcher sends; the unit tests pin the byte layout, not firmware + * behaviour. + */ + +export const KEYCHRON_VENDOR_ID = 0x3434; +export const KEYCHRON_CONFIG_USAGE_PAGE = 0xff60; +export const KEYCHRON_CONFIG_USAGE = 0x61; +export const KEYCHRON_REPORT_ID = 0; +export const KEYCHRON_REPORT_SIZE = 32; +/** `KC_HE` in Launcher's command enum. */ +export const KEYCHRON_HE_COMMAND = 0xa9; + +export const KEYCHRON_HE_SUBCOMMAND = { + getVersion: 0x01, + getProfilesInfo: 0x10, + selectProfile: 0x11, + getProfileBuffer: 0x12, + setProfileName: 0x13, + setTravel: 0x14, + setAdvanceMode: 0x15, + setActOnAxis: 0x16, + resetSingleKey: 0x1d, + clearProfileBuffer: 0x1e, + saveProfileBuffer: 0x1f, + getCurve: 0x20, + setCurve: 0x21, + getJoyKeyboard: 0x22, + setJoyKeyboard: 0x23, + getRealtimeTravel: 0x30, + calibrate: 0x40, + getCalibrateState: 0x41, + getCalibratedValue: 0x42, + getAxisType: 0x50, + setAxisType: 0x51, +} as const; +export type KeychronHeSubcommand = (typeof KEYCHRON_HE_SUBCOMMAND)[keyof typeof KEYCHRON_HE_SUBCOMMAND]; + +/** `AMC_CALIBRATE` argument: start the calibration sweep / stop it. */ +export const KEYCHRON_CALIBRATE = { start: 2, stop: 4 } as const; + +/** + * `workMode` byte of a travel write. Launcher's `hw` enum: Global 0, Static 1, + * QuickTrigger 2 (rapid trigger). + */ +export const KEYCHRON_WORK_MODE = { global: 0, static: 1, quickTrigger: 2 } as const; +export type KeychronWorkMode = (typeof KEYCHRON_WORK_MODE)[keyof typeof KEYCHRON_WORK_MODE]; + +/** `keyMode` byte of a travel write: 1 applies to every key, 0 to the keys set in a bitmap. */ +export const KEYCHRON_KEY_MODE = { perKey: 0, allKeys: 1 } as const; +/** Per-key bitmap: three bytes per row, eight columns per byte, low bit first. */ +export const KEYCHRON_KEY_BITMAP_SIZE = 24; +/** Profile names are 28 bytes: up to 14 UTF-16BE units, zero padded. */ +export const KEYCHRON_PROFILE_NAME_BYTES = 28; + +export interface KeychronKeyPosition { row: number; col: number } + +/** Bitmap of `keys` in Launcher's layout: byte `3 * row + floor(col / 8)`, bit `col % 8`. */ +export function keychronKeyBitmap(keys: readonly KeychronKeyPosition[]): Uint8Array { + const bitmap = new Uint8Array(KEYCHRON_KEY_BITMAP_SIZE); + for (const { row, col } of keys) { + const at = 3 * row + Math.floor(col / 8); + if (!Number.isInteger(row) || !Number.isInteger(col) || row < 0 || col < 0 || col >= 24 || at >= bitmap.length) { + throw new RangeError(`Key [${row},${col}] is outside the 8x24 bitmap.`); + } + bitmap[at]! |= 1 << (col % 8); + } + return bitmap; +} + +/** `keyMode` and `buffer` for a travel write: every key (no keys given) or just `keys`. */ +export function keychronKeyTarget(keys?: readonly KeychronKeyPosition[]): { keyMode: number; buffer?: number[] } { + if (!keys) return { keyMode: KEYCHRON_KEY_MODE.allKeys }; + if (keys.length === 0) throw new RangeError("A per-key write needs at least one key."); + return { keyMode: KEYCHRON_KEY_MODE.perKey, buffer: [...keychronKeyBitmap(keys)] }; +} + +/** Name bytes and length for `setProfileName`: trimmed, BMP only, up to 14 characters. */ +export function keychronProfileNameBytes(name: string): { chars: number[]; length: number } { + const units = [...name.trim()]; + if (units.length === 0 || units.length > 14) throw new RangeError("Profile names are 1-14 characters."); + const chars = new Array(KEYCHRON_PROFILE_NAME_BYTES).fill(0); + units.forEach((unit, index) => { + const code = unit.codePointAt(0)!; + if (code > 0xffff) throw new RangeError("Profile names are limited to the Basic Multilingual Plane."); + chars[2 * index] = code >> 8; + chars[2 * index + 1] = code & U8; + }); + return { chars, length: 2 * units.length }; +} + +export type KeychronHeVersion = 1 | 2 | 3 | 4 | 5; + +/** Capability bits of the `AMC_GET_VERSION` reply (byte 4, bit 0 first). */ +export interface KeychronHeFeatures { + switchAxis: boolean; + resetSingleKey: boolean; + dkr: boolean; + turbo: boolean; + gamepadDisable: boolean; + supportMechanical: boolean; +} + +export interface KeychronHeVersionInfo { + version: number; + features: KeychronHeFeatures; +} + +export interface KeychronProfilesInfo { + /** Active profile slot. */ + current: number; + total: number; + /** Size in bytes of one profile buffer. */ + size: number; + /** v4+ only: DKS slots the board supports. */ + dksCount: number | null; + /** v4+ only: snap-tap slots the board supports. */ + snapTapCount: number | null; + /** Millimetres per travel step. */ + unit: number; +} + +/** What a key's four-byte (v1-4) / seven-byte (v5) slot says to do. */ +export const KEYCHRON_ADVANCE_MODE = { + none: 0, + dks: 3, + analog: 4, + toggle: 5, + dkr: 7, + turbo: 8, +} as const; + +export interface KeychronKeySlot { + /** Raw 2-bit actuation mode. */ + mode: number; + /** Actuation travel, in `unit` steps. */ + distance: number; + /** Rapid-trigger press sensitivity, in `unit` steps. */ + advancePress: number; + /** Rapid-trigger release sensitivity, in `unit` steps. */ + advanceRelease: number; + /** One of KEYCHRON_ADVANCE_MODE (or an unknown raw value). */ + advanceMode: number; + /** DKS / turbo slot index when `advanceMode` uses one. */ + index: number; +} + +export interface KeychronDksSlot { + index: number; + /** Four trigger travels, in `unit` steps. */ + travel: readonly number[]; + /** Four 16-bit keycodes. */ + keycodes: readonly number[]; + /** Four packed action nibbles per keycode: [press, bottom, release, top]. */ + actions: readonly (readonly number[])[]; +} + +export interface KeychronSnapTapSlot { + index: number; + keys: readonly [{ row: number; col: number }, { row: number; col: number }]; + type: number; +} + +export interface KeychronProfileBuffer { + global: KeychronKeySlot; + /** `keys[row][col]`. */ + keys: readonly (readonly KeychronKeySlot[])[]; + /** Occupied DKS slots (null entries are empty). v1+ layout differs by version. */ + dks: readonly (KeychronDksSlot | null)[]; + /** Occupied snap-tap slots; v4+ only. */ + snapTap: readonly KeychronSnapTapSlot[]; +} + +export interface KeychronTravelSetting { + /** KEYCHRON_WORK_MODE: global 0, static 1, quickTrigger 2. */ + workMode: number; + /** Actuation, in `unit` steps. */ + press?: number; + /** Rapid-trigger press sensitivity, in `unit` steps. */ + sensitivePress?: number; + /** Rapid-trigger release sensitivity; defaults to `sensitivePress`. */ + sensitiveRelease?: number; + /** KEYCHRON_KEY_MODE: 0 writes the keys in `buffer`, 1 applies to every key. */ + keyMode: number; + /** Per-key bytes (only sent when `keyMode` is 0). */ + buffer?: readonly number[]; +} + +export type KeychronCurve = readonly [ + readonly [number, number], readonly [number, number], + readonly [number, number], readonly [number, number], +]; + +export interface KeychronAxisType { + type: number; + /** Maximum travel in millimetres. */ + maxMm: number; +} + +export interface KeychronCalibrationState { + /** Per-key flags, 8 per byte, low bit first. */ + keys: readonly boolean[]; + state: number; +} + +const U8 = 0xff; + +function frame(subcommand: number, ...args: number[]): Uint8Array { + if (args.length > KEYCHRON_REPORT_SIZE - 2) throw new RangeError("Keychron HE command is too long."); + const out = new Uint8Array(KEYCHRON_REPORT_SIZE); + out[0] = KEYCHRON_HE_COMMAND; + out[1] = subcommand; + args.forEach((value, index) => { + if (!Number.isInteger(value) || value < 0 || value > U8) throw new RangeError("Keychron HE argument must be a byte."); + out[index + 2] = value; + }); + return out; +} + +function profile(slot: number): number { + if (!Number.isInteger(slot) || slot < 0 || slot > U8) throw new RangeError("Invalid Keychron profile slot."); + return slot; +} + +function putWord(out: Uint8Array, at: number, value: number): void { + if (!Number.isInteger(value) || value < 0 || value > 0xffff) throw new RangeError("Keychron HE word out of range."); + out[at] = value & U8; + out[at + 1] = value >> 8; +} + +export function isKeychronHeVersion(version: number): version is KeychronHeVersion { + return version >= 1 && version <= 5 && Number.isInteger(version); +} + +/** Key slot size in the profile buffer: 4 bytes up to v4, 7 from v5. */ +export const keychronKeySlotSize = (version: KeychronHeVersion): number => (version >= 5 ? 7 : 4); +/** DKS slot size: 19 bytes up to v4, 21 from v5. */ +export const keychronDksSlotSize = (version: KeychronHeVersion): number => (version >= 5 ? 21 : 19); +export const KEYCHRON_DKS_SLOTS = 20; +export const KEYCHRON_SNAP_TAP_SLOTS = 20; +const SNAP_TAP_SLOT_SIZE = 3; + +export const keychronHeFrames = { + version: () => frame(KEYCHRON_HE_SUBCOMMAND.getVersion), + profilesInfo: () => frame(KEYCHRON_HE_SUBCOMMAND.getProfilesInfo), + selectProfile: (slot: number) => frame(KEYCHRON_HE_SUBCOMMAND.selectProfile, profile(slot)), + /** + * Read a profile buffer from `offset`. A reply carries 26 payload bytes; the + * name read in v1-4 still sends 30 in the length byte, as Launcher does. + */ + readProfile(slot: number, offset: number, length: number) { + if (!Number.isInteger(offset) || offset < 0 || offset > 0xffff) throw new RangeError("Invalid profile offset."); + if (!Number.isInteger(length) || length < 1 || length > 30) throw new RangeError("Profile reads carry 1-30 bytes."); + return frame(KEYCHRON_HE_SUBCOMMAND.getProfileBuffer, profile(slot), offset & U8, offset >> 8, length); + }, + saveProfile: (slot: number) => frame(KEYCHRON_HE_SUBCOMMAND.saveProfileBuffer, profile(slot)), + clearProfile: (slot: number) => frame(KEYCHRON_HE_SUBCOMMAND.clearProfileBuffer, profile(slot)), + /** Use `keychronProfileNameBytes`; Launcher follows a rename with `saveProfile`. */ + setProfileName(slot: number, chars: readonly number[], length: number) { + return frame(KEYCHRON_HE_SUBCOMMAND.setProfileName, profile(slot), length, ...chars); + }, + setTravel(version: KeychronHeVersion, slot: number, setting: KeychronTravelSetting): Uint8Array { + const out = frame(KEYCHRON_HE_SUBCOMMAND.setTravel, profile(slot), setting.workMode); + const press = setting.press ?? 0; + const sensitivePress = setting.sensitivePress ?? 0; + const sensitiveRelease = setting.sensitiveRelease ?? setting.sensitivePress ?? 0; + let next: number; + if (version >= 5) { + putWord(out, 4, press); + putWord(out, 6, sensitivePress); + putWord(out, 8, sensitiveRelease); + next = 10; + } else { + for (const [at, value] of [[4, press], [5, sensitivePress], [6, sensitiveRelease]] as const) { + if (!Number.isInteger(value) || value < 0 || value > U8) throw new RangeError("Keychron v1-4 travel is one byte."); + out[at] = value; + } + next = 7; + } + out[next] = setting.keyMode; + if (setting.keyMode === 0) { + const buffer = setting.buffer ?? []; + if (next + 1 + buffer.length > KEYCHRON_REPORT_SIZE) throw new RangeError("Per-key buffer does not fit one report."); + buffer.forEach((value, index) => { out[next + 1 + index] = value & U8; }); + } + return out; + }, + /** Turn one DKS/advanced-key slot off for the key at `row`,`col`. */ + removeAdvanceKey: (slot: number, row: number, col: number) => + frame(KEYCHRON_HE_SUBCOMMAND.setAdvanceMode, profile(slot), 0, row, col), + setAdvanceKey(version: KeychronHeVersion, slot: number, key: { + workMode?: number; row: number; col: number; position: number; + distance: readonly [number, number, number, number]; + keycodes: readonly number[]; actions: readonly number[]; + }) { + const out = frame(KEYCHRON_HE_SUBCOMMAND.setAdvanceMode, profile(slot), key.workMode || 1, key.row, key.col, key.position); + // Launcher sends the four travels in the order [0, 3, 1, 2]. + const order = [0, 3, 1, 2] as const; + let at = 7; + for (const index of order) { + const value = key.distance[index]; + if (version >= 5) { putWord(out, at, value); at += 2; } else { out[at++] = value & U8; } + } + key.keycodes.slice(0, 4).forEach((code, index) => putWord(out, at + 2 * index, code)); + at += 8; + key.actions.forEach((value, index) => { out[at + index] = value & U8; }); + return out; + }, + getCurve: () => frame(KEYCHRON_HE_SUBCOMMAND.getCurve), + setCurve(curve: KeychronCurve) { + return frame(KEYCHRON_HE_SUBCOMMAND.setCurve, ...curve.flat()); + }, + /** Live travel of the key at `row`,`col`. */ + realtimeTravel: (row: number, col: number) => frame(KEYCHRON_HE_SUBCOMMAND.getRealtimeTravel, row, col), + calibrate: () => frame(KEYCHRON_HE_SUBCOMMAND.calibrate, KEYCHRON_CALIBRATE.start), + stopCalibration: () => frame(KEYCHRON_HE_SUBCOMMAND.calibrate, KEYCHRON_CALIBRATE.stop), + calibrationState: () => frame(KEYCHRON_HE_SUBCOMMAND.getCalibrateState), + getAxisType: () => frame(KEYCHRON_HE_SUBCOMMAND.getAxisType), + setAxisType: (type: number) => frame(KEYCHRON_HE_SUBCOMMAND.setAxisType, type), + /** Snap-tap pair: `keys` are [col, row] pairs as Launcher sends them. */ + setSnapTap(slot: number, snap: { keys: readonly [readonly [number, number], readonly [number, number]]; index: number; wordMode: number }) { + return frame(KEYCHRON_HE_SUBCOMMAND.setActOnAxis, profile(slot), + snap.keys[0][0], snap.keys[0][1], snap.keys[1][0], snap.keys[1][1], snap.index, snap.wordMode); + }, + getJoyKeyboard: () => frame(KEYCHRON_HE_SUBCOMMAND.getJoyKeyboard), + /** Launcher packs three flags into one byte via its own bit order; pass the packed byte. */ + setJoyKeyboard: (packed: number) => frame(KEYCHRON_HE_SUBCOMMAND.setJoyKeyboard, packed), + resetSingleKey: (slot: number, row: number, col: number) => + frame(KEYCHRON_HE_SUBCOMMAND.resetSingleKey, profile(slot), row, col), +} as const; + +/** + * The standard VIA/QMK dynamic-keymap commands Launcher uses to read legends. + * They share the same 32-byte raw-HID report as `KC_HE` but use their own + * command ids (not 0xA9). + */ +export const KEYCHRON_VIA_COMMAND = { + getProtocolVersion: 0x01, + getKeycode: 0x04, + setKeycode: 0x05, + getLayerCount: 0x11, + getKeymapBuffer: 0x12, + getEncoder: 0x14, + setEncoder: 0x15, +} as const; +/** Keys per keymap read: a reply carries up to 28 bytes, two per keycode. */ +export const KEYCHRON_KEYMAP_KEYS_PER_READ = 14; + +export interface KeychronKeymapRead { offset: number; bytes: number } + +/** + * Reads that cover one layer of a `rows` x `cols` matrix. Offsets are bytes + * from the start of the keymap: `layer * rows * cols * 2 + 28 * chunk`. + */ +export function keychronKeymapReadPlan(layer: number, rows: number, cols: number): KeychronKeymapRead[] { + if (!Number.isInteger(layer) || layer < 0 || layer > U8) throw new RangeError("Invalid keymap layer."); + const keys = rows * cols; + const reads: KeychronKeymapRead[] = []; + for (let first = 0; first < keys; first += KEYCHRON_KEYMAP_KEYS_PER_READ) { + const count = Math.min(KEYCHRON_KEYMAP_KEYS_PER_READ, keys - first); + const offset = (layer * keys + first) * 2; + if (offset > 0xffff) throw new RangeError("Keymap offset exceeds the 16-bit address space."); + reads.push({ offset, bytes: count * 2 }); + } + return reads; +} + +function viaFrame(command: number, ...args: number[]): Uint8Array { + const out = new Uint8Array(KEYCHRON_REPORT_SIZE); + out[0] = command; + args.forEach((value, index) => { out[index + 1] = value; }); + return out; +} + +function viaByte(value: number, what: string): number { + if (!Number.isInteger(value) || value < 0 || value > U8) throw new RangeError(`Invalid ${what}.`); + return value; +} + +function viaCode(code: number): [number, number] { + if (!Number.isInteger(code) || code < 0 || code > 0xffff) throw new RangeError("Invalid keycode."); + return [code >> 8, code & U8]; +} + +export const keychronViaFrames = { + protocolVersion: () => viaFrame(KEYCHRON_VIA_COMMAND.getProtocolVersion), + /** Read one key's keycode. */ + getKeycode: (layer: number, row: number, col: number) => + viaFrame(KEYCHRON_VIA_COMMAND.getKeycode, viaByte(layer, "layer"), viaByte(row, "row"), viaByte(col, "column")), + /** Set one key's keycode (VIA dynamic_keymap_set_keycode). */ + setKeycode(layer: number, row: number, col: number, code: number) { + return viaFrame(KEYCHRON_VIA_COMMAND.setKeycode, viaByte(layer, "layer"), viaByte(row, "row"), viaByte(col, "column"), ...viaCode(code)); + }, + getEncoder: (layer: number, encoder: number, clockwise: boolean) => + viaFrame(KEYCHRON_VIA_COMMAND.getEncoder, viaByte(layer, "layer"), viaByte(encoder, "encoder"), clockwise ? 1 : 0), + setEncoder(layer: number, encoder: number, clockwise: boolean, code: number) { + return viaFrame(KEYCHRON_VIA_COMMAND.setEncoder, viaByte(layer, "layer"), viaByte(encoder, "encoder"), clockwise ? 1 : 0, ...viaCode(code)); + }, + layerCount: () => viaFrame(KEYCHRON_VIA_COMMAND.getLayerCount), + keymapBuffer(read: KeychronKeymapRead) { + if (read.bytes < 2 || read.bytes > 28 || read.bytes % 2 !== 0) throw new RangeError("A keymap read carries 1-14 keycodes."); + return viaFrame(KEYCHRON_VIA_COMMAND.getKeymapBuffer, read.offset >> 8, read.offset & U8, read.bytes); + }, +} as const; + +/** True when `report` answers the keymap read at `offset`. */ +export function isKeychronKeymapReply(report: Uint8Array, offset: number): boolean { + return report.length >= 4 && report[0] === KEYCHRON_VIA_COMMAND.getKeymapBuffer + && report[1] === offset >> 8 && report[2] === (offset & U8); +} + +/** Protocol version reply: Launcher reads byte 2 (the low byte), treating 0 as 5. */ +export function decodeKeychronViaProtocol(report: Uint8Array): number | null { + return report.length >= 3 && report[0] === KEYCHRON_VIA_COMMAND.getProtocolVersion ? report[2]! || 5 : null; +} + +/** True when `report` answers a get-keycode for this key. */ +export function isKeychronKeycodeReply(report: Uint8Array, layer: number, row: number, col: number): boolean { + return report.length >= 6 && report[0] === KEYCHRON_VIA_COMMAND.getKeycode + && report[1] === layer && report[2] === row && report[3] === col; +} + +/** Keycode in a get-keycode reply: big-endian at bytes 4-5. */ +export function decodeKeychronKeycode(report: Uint8Array): number | null { + return report.length >= 6 && report[0] === KEYCHRON_VIA_COMMAND.getKeycode ? (report[4]! << 8) | report[5]! : null; +} + +/** Layer count reply: byte 1. */ +export function decodeKeychronLayerCount(report: Uint8Array): number | null { + return report.length >= 2 && report[0] === KEYCHRON_VIA_COMMAND.getLayerCount ? report[1]! : null; +} + +/** Keycodes in a keymap reply: big-endian 16-bit values starting at byte 4. */ +export function decodeKeychronKeymapChunk(report: Uint8Array, bytes: number): number[] | null { + if (report.length < 4 + bytes || report[0] !== KEYCHRON_VIA_COMMAND.getKeymapBuffer) return null; + const codes: number[] = []; + for (let i = 0; i < bytes; i += 2) codes.push((report[4 + i]! << 8) | report[5 + i]!); + return codes; +} + +/** Fold the chunks of one layer into `keycodes[row][col]`. */ +export function joinKeychronKeymap(chunks: readonly (readonly number[])[], rows: number, cols: number): number[][] { + const flat = chunks.flat(); + if (flat.length < rows * cols) throw new RangeError("Keymap is shorter than its matrix."); + return Array.from({ length: rows }, (_, row) => flat.slice(row * cols, (row + 1) * cols)); +} + +/** True when `report` is an answer to the given HE subcommand. */ +export function isKeychronHeReply(report: Uint8Array, subcommand: KeychronHeSubcommand): boolean { + return report.length >= 2 && report[0] === KEYCHRON_HE_COMMAND && report[1] === subcommand; +} + +export function decodeKeychronHeVersion(report: Uint8Array): KeychronHeVersionInfo | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getVersion) || report.length < 5) return null; + const bits = report[4]!; + return { + version: report[2]!, + features: { + switchAxis: Boolean(bits & 1), + resetSingleKey: Boolean(bits & 2), + dkr: Boolean(bits & 4), + turbo: Boolean(bits & 8), + gamepadDisable: Boolean(bits & 16), + supportMechanical: Boolean(bits & 32), + }, + }; +} + +/** Millimetres per step for a v5 profile-info unit code (2 -> 0.01, 3 -> 0.001, else 0.1). */ +export const keychronUnit = (code: number | undefined): number => (code === 2 ? 0.01 : code === 3 ? 0.001 : 0.1); + +export function decodeKeychronProfilesInfo(report: Uint8Array, version: KeychronHeVersion): KeychronProfilesInfo | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getProfilesInfo) || report.length < 6) return null; + return { + current: report[2]!, + total: report[3]!, + size: (report[5]! << 8) | report[4]!, + dksCount: version >= 4 ? report[6]! : null, + snapTapCount: version >= 4 ? report[7]! : null, + unit: version >= 5 ? keychronUnit(report[8]) : 0.1, + }; +} + +/** + * Where a profile's name lives and how much to read: the last bytes of the + * profile buffer. v1 starts 33 bytes from the end, later versions 32, and v5 + * reads 26 bytes where earlier versions read 30. + */ +export function keychronNameWindow(version: KeychronHeVersion, size: number): { offset: number; length: number } { + return { offset: size - (version === 1 ? 33 : 32), length: version >= 5 ? 26 : 30 }; +} + +/** Decode a profile name from a read reply: bytes 6.. are big-endian UTF-16 units, zero pairs skipped. */ +export function decodeKeychronProfileName(report: Uint8Array): string | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getProfileBuffer)) return null; + let name = ""; + for (let i = 6; i + 1 < KEYCHRON_REPORT_SIZE && i + 1 < report.length; i += 2) { + if (report[i] === 0 && report[i + 1] === 0) continue; + name += String.fromCharCode((report[i]! << 8) | report[i + 1]!); + } + return name; +} + +/** Payload bytes of a profile-buffer read reply. */ +export function keychronProfileChunk(report: Uint8Array): Uint8Array | null { + return isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getProfileBuffer) ? report.slice(6, 32) : null; +} + +/** Reassemble a buffer from consecutive chunks, trimmed to `size`. */ +export function joinKeychronProfile(chunks: readonly Uint8Array[], size: number): Uint8Array { + const out = new Uint8Array(chunks.reduce((sum, chunk) => sum + chunk.length, 0)); + let at = 0; + for (const chunk of chunks) { out.set(chunk, at); at += chunk.length; } + return out.slice(0, size); +} + +/** Read plan for a whole profile: (offset, length) pairs of up to 26 bytes. */ +export function keychronProfileReadPlan(size: number): { offset: number; length: number }[] { + const plan: { offset: number; length: number }[] = []; + for (let offset = 0; offset < size; offset += 26) plan.push({ offset, length: Math.min(26, size - offset) }); + return plan; +} + +function bits(value: bigint, low: number, width: number): number { + return Number((value >> BigInt(low)) & ((1n << BigInt(width)) - 1n)); +} + +function littleEndian(bytes: Uint8Array, start: number, end: number): bigint { + let value = 0n; + for (let i = end - 1; i >= start; i--) value = (value << 8n) | BigInt(bytes[i]!); + return value; +} + +/** One key's slot. v1-4: 32 bits LE (mode 2, distance 6, press 6, release 6, advance 4, index 8). v5: 6 bytes LE of 14-bit fields, then the index byte. */ +export function decodeKeychronKeySlot(version: KeychronHeVersion, slot: Uint8Array): KeychronKeySlot { + if (version >= 5) { + const word = littleEndian(slot, 0, 6); + return { + mode: bits(word, 0, 2), distance: bits(word, 2, 14), advancePress: bits(word, 16, 14), + advanceRelease: bits(word, 30, 14), advanceMode: bits(word, 44, 4), index: slot[6]!, + }; + } + const word = littleEndian(slot, 0, 4); + return { + mode: bits(word, 0, 2), distance: bits(word, 2, 6), advancePress: bits(word, 8, 6), + advanceRelease: bits(word, 14, 6), advanceMode: bits(word, 20, 4), index: bits(word, 24, 8), + }; +} + +function decodeActions(a: number, b: number): number[] { + return [a & 0xf, b & 0xf, b >> 4, a >> 4]; +} + +function decodeDksSlot(version: KeychronHeVersion, bytes: Uint8Array, index: number): KeychronDksSlot | null { + const packed = version >= 5 ? 5 : 3; + const word = littleEndian(bytes, 0, packed); + if (word === 0n) return null; + const travel = version >= 5 + ? [bits(word, 0, 10), bits(word, 20, 10), bits(word, 30, 10), bits(word, 10, 10)] + : [bits(word, 0, 6), bits(word, 12, 6), bits(word, 18, 6), bits(word, 6, 6)]; + const keycodes = [0, 1, 2, 3].map((i) => bytes[packed + 2 * i]! | (bytes[packed + 2 * i + 1]! << 8)); + const actionStart = packed + 8; + const actions = [0, 1, 2, 3].map((i) => decodeActions(bytes[actionStart + 2 * i]!, bytes[actionStart + 2 * i + 1]!)); + return { index, travel, keycodes, actions }; +} + +/** Decode the whole profile buffer for a board with `rows` x `cols` keys. */ +export function decodeKeychronProfileBuffer( + version: KeychronHeVersion, buffer: Uint8Array, rows: number, cols: number, +): KeychronProfileBuffer { + const slot = keychronKeySlotSize(version); + const keyBytes = slot * (rows * cols + 1); + if (buffer.length < keyBytes) throw new RangeError("Profile buffer is shorter than its key matrix."); + const keys = Array.from({ length: rows }, (_, row) => Array.from({ length: cols }, (_, col) => { + const start = slot * (row * cols + col + 1); + return decodeKeychronKeySlot(version, buffer.subarray(start, start + slot)); + })); + const dksSize = keychronDksSlotSize(version); + const dks: (KeychronDksSlot | null)[] = []; + for (let i = 0; i < KEYCHRON_DKS_SLOTS; i++) { + const start = keyBytes + dksSize * i; + dks.push(start + dksSize <= buffer.length ? decodeDksSlot(version, buffer.subarray(start, start + dksSize), i) : null); + } + const snapTap: KeychronSnapTapSlot[] = []; + if (version >= 4) { + const snapStart = keyBytes + dksSize * KEYCHRON_DKS_SLOTS; + for (let i = 0; i < KEYCHRON_SNAP_TAP_SLOTS; i++) { + const start = snapStart + SNAP_TAP_SLOT_SIZE * i; + if (start + SNAP_TAP_SLOT_SIZE > buffer.length) break; + const [a, b, type] = [buffer[start]!, buffer[start + 1]!, buffer[start + 2]!]; + if (a === 0 && b === 0) continue; + snapTap.push({ index: i, type, keys: [{ col: a >> 3, row: a & 7 }, { col: b >> 3, row: b & 7 }] }); + } + } + return { + global: decodeKeychronKeySlot(version, buffer.subarray(0, slot)), + keys, dks, snapTap, + }; +} + +export function decodeKeychronRealtimeTravel( + report: Uint8Array, version: KeychronHeVersion, row: number, col: number, +): number | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getRealtimeTravel)) return null; + // v1 and v2 answer with the bare distance in byte 2; v3 onward echo the key. + if (version >= 3 && (report[3] !== row || report[4] !== col)) return null; + if (version >= 5) return (report[6]! << 8) | report[5]!; + return version >= 3 ? report[5]! : report[2]!; +} + +export function decodeKeychronCurve(report: Uint8Array): KeychronCurve | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getCurve) || report.length < 10) return null; + return [[report[2]!, report[3]!], [report[4]!, report[5]!], [report[6]!, report[7]!], [report[8]!, report[9]!]]; +} + +export function decodeKeychronAxisType(report: Uint8Array, unit: number): KeychronAxisType | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getAxisType) || report.length < 5) return null; + return { type: report[2]!, maxMm: Number((((report[4]! << 8) + report[3]!) * unit).toFixed(2)) }; +} + +/** Calibration state: byte 3 is the state, bytes 4-21 are per-key flags. */ +export function decodeKeychronCalibrationState(report: Uint8Array): KeychronCalibrationState | null { + if (!isKeychronHeReply(report, KEYCHRON_HE_SUBCOMMAND.getCalibrateState) || report.length < 22) return null; + const keys: boolean[] = []; + for (const byte of report.slice(4, 22)) for (let bit = 0; bit < 8; bit++) keys.push(Boolean((byte >> bit) & 1)); + return { state: report[3]!, keys }; +} + +/** Write-style replies (`setTravel`, `saveProfile`, …) carry 0 in byte 2 on success. */ +export function keychronHeAcknowledged(report: Uint8Array, subcommand: KeychronHeSubcommand): boolean { + return isKeychronHeReply(report, subcommand) && report[2] === 0; +} + +export * from "./products.js"; +export * from "./layouts.js"; +export * from "./keycodes.js"; +export * from "./custom-keycodes.js"; diff --git a/src/keychron/keycodes.ts b/src/keychron/keycodes.ts new file mode 100644 index 0000000..4df0451 --- /dev/null +++ b/src/keychron/keycodes.ts @@ -0,0 +1,197 @@ +/** + * QMK keycodes for the Keychron Hall-effect boards: short legends for drawing + * a keymap, and a catalog for choosing what a key should do. + * + * The basic keycodes (0x0000-0x00FF) mean the same on every firmware. The + * layer keys and the custom (board-specific) range moved between QMK versions, + * and Launcher picks its table from the VIA protocol version the board + * reports, so everything here takes that version. Table values are from + * Launcher's four keycode tables: + * + * protocol >= 12 layer keys at 0x5200 (TO) / 0x5220 (MO) ...; custom at 0x7E00 + * protocol == 11 same layer keys; custom at 0x7F00 + * protocol <= 10 layer keys at 0x5000/0x5010 (TO), 0x5100 (MO) ...; custom at 0x5F80 + * + * Anything not recognised is shown by its hex value and cannot be chosen, so + * a key is never labelled as something it is not. + */ +import { keychronCustomKeycodes } from "./custom-keycodes.js"; + +export interface KeychronLegend { + /** What to draw on the key; empty for an unassigned key. */ + label: string; + /** Longer name for a tooltip. */ + title: string; + /** True when the code is not recognised and `label` is its hex value. */ + unknown: boolean; +} + +export interface KeychronKeycodeContext { + /** VIA protocol version the board reports. Defaults to 12 (current QMK). */ + protocol?: number; + /** Board-specific keycodes from `keychronCustomKeycodes`. */ + custom?: readonly { index: number; shortName: string; title: string }[]; +} + +/** Context for a board: its protocol version and its own custom keycodes. */ +export function keychronKeycodeContext(productId: number, protocol: number): Required { + return { protocol, custom: keychronCustomKeycodes(productId) }; +} + +const LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; +const DIGITS = "1234567890"; + +const BASIC: Readonly> = { + 0x28: ["Enter", "Enter"], 0x29: ["Esc", "Escape"], 0x2a: ["Bksp", "Backspace"], 0x2b: ["Tab", "Tab"], + 0x2c: ["Space", "Space"], 0x2d: ["-", "Minus"], 0x2e: ["=", "Equal"], 0x2f: ["[", "Left bracket"], + 0x30: ["]", "Right bracket"], 0x31: ["\\", "Backslash"], 0x32: ["#", "Non-US hash"], 0x33: [";", "Semicolon"], + 0x34: ["'", "Quote"], 0x35: ["`", "Grave"], 0x36: [",", "Comma"], 0x37: [".", "Period"], 0x38: ["/", "Slash"], + 0x39: ["Caps", "Caps Lock"], 0x46: ["PrtSc", "Print Screen"], 0x47: ["ScrLk", "Scroll Lock"], + 0x48: ["Pause", "Pause"], 0x49: ["Ins", "Insert"], 0x4a: ["Home", "Home"], 0x4b: ["PgUp", "Page Up"], + 0x4c: ["Del", "Delete"], 0x4d: ["End", "End"], 0x4e: ["PgDn", "Page Down"], 0x4f: ["→", "Right arrow"], + 0x50: ["←", "Left arrow"], 0x51: ["↓", "Down arrow"], 0x52: ["↑", "Up arrow"], 0x53: ["Num", "Num Lock"], + 0x54: ["/", "Keypad slash"], 0x55: ["*", "Keypad asterisk"], 0x56: ["-", "Keypad minus"], + 0x57: ["+", "Keypad plus"], 0x58: ["Ent", "Keypad enter"], 0x62: ["0", "Keypad 0"], 0x63: [".", "Keypad period"], + 0x64: ["\\", "Non-US backslash"], 0x65: ["Menu", "Application"], + 0xe0: ["Ctrl", "Left Control"], 0xe1: ["Shift", "Left Shift"], 0xe2: ["Alt", "Left Alt"], 0xe3: ["Win", "Left GUI"], + 0xe4: ["Ctrl", "Right Control"], 0xe5: ["Shift", "Right Shift"], 0xe6: ["Alt", "Right Alt"], 0xe7: ["Win", "Right GUI"], + 0xa8: ["Mute", "Mute"], 0xa9: ["Vol+", "Volume up"], 0xaa: ["Vol-", "Volume down"], 0xab: ["Next", "Next track"], + 0xac: ["Prev", "Previous track"], 0xad: ["Stop", "Stop"], 0xae: ["Play", "Play/pause"], +}; + +const MOD_BITS = [["Ctrl", 0x01], ["Shift", 0x02], ["Alt", 0x04], ["Win", 0x08]] as const; + +/** Layer-key bases per protocol range, each covering 32 layers. */ +const LAYER_BASES = { + modern: { to: 0x5200, mo: 0x5220, df: 0x5240, tg: 0x5260, osl: 0x5280, tt: 0x52c0 }, + legacy: { to: 0x5010, mo: 0x5100, df: 0x5200, tg: 0x5300, osl: 0x5400, tt: 0x5800 }, +} as const; +type LayerKind = keyof (typeof LAYER_BASES)["modern"]; +const LAYER_NAMES: Readonly> = { + to: ["TO", "Switch to layer"], mo: ["MO", "Momentary layer"], df: ["DF", "Default layer"], + tg: ["TG", "Toggle layer"], osl: ["OS", "One-shot layer"], tt: ["TT", "Layer tap-toggle"], +}; + +const layerBases = (protocol: number) => (protocol >= 11 ? LAYER_BASES.modern : LAYER_BASES.legacy); + +/** First custom keycode: 0x7E00 on protocol 12+, 0x7F00 on 11, 0x5F80 before. */ +export function keychronCustomKeycodeBase(protocol: number): number { + return protocol >= 12 ? 0x7e00 : protocol === 11 ? 0x7f00 : 0x5f80; +} + +/** How many custom keycodes the firmware can address (Launcher's table allows 16). */ +export const KEYCHRON_CUSTOM_KEYCODE_SLOTS = 16; + +function basic(code: number): [string, string] | null { + if (code >= 0x04 && code <= 0x1d) return [LETTERS[code - 0x04]!, `Key ${LETTERS[code - 0x04]}`]; + if (code >= 0x1e && code <= 0x27) return [DIGITS[code - 0x1e]!, `Key ${DIGITS[code - 0x1e]}`]; + if (code >= 0x3a && code <= 0x45) return [`F${code - 0x39}`, `F${code - 0x39}`]; + if (code >= 0x68 && code <= 0x73) return [`F${code - 0x5b}`, `F${code - 0x5b}`]; + if (code >= 0x59 && code <= 0x61) return [String(code - 0x58), `Keypad ${code - 0x58}`]; + return BASIC[code] ?? null; +} + +function layerKey(code: number, protocol: number): { kind: LayerKind; layer: number } | null { + const bases = layerBases(protocol); + for (const kind of Object.keys(bases) as LayerKind[]) { + const base = bases[kind]; + if (code >= base && code < base + 0x20) return { kind, layer: code - base }; + } + return null; +} + +/** Legend for one keycode as read from the board. */ +export function keychronKeycodeLegend(code: number, context: KeychronKeycodeContext = {}): KeychronLegend { + const protocol = context.protocol ?? 12; + if (code === 0x0000) return { label: "", title: "No key", unknown: false }; + if (code === 0x0001) return { label: "▽", title: "Transparent (falls through to the layer below)", unknown: false }; + const direct = basic(code); + if (direct) return { label: direct[0], title: direct[1], unknown: false }; + // Modifier combos: 0x0100-0x1FFF are a basic key plus mod bits. + if (code >= 0x0100 && code <= 0x1fff) { + const key = basic(code & 0xff); + const mods = MOD_BITS.filter(([, bit]) => (code >> 8) & bit).map(([name]) => name); + if (key && mods.length) return { label: key[0], title: `${mods.join("+")}+${key[1]}`, unknown: false }; + } + // Mod-tap 0x2000-0x3FFF and layer-tap 0x4000-0x4FFF: the tap key is the legend. + if (code >= 0x2000 && code <= 0x4fff) { + const key = basic(code & 0xff); + if (key) return { label: key[0], title: `${code >= 0x4000 ? "Layer-tap" : "Mod-tap"} ${key[1]}`, unknown: false }; + } + const layer = layerKey(code, protocol); + if (layer) { + const [short, title] = LAYER_NAMES[layer.kind]; + return { label: `${short}${layer.layer}`, title: `${title} ${layer.layer}`, unknown: false }; + } + const base = keychronCustomKeycodeBase(protocol); + if (code >= base && code < base + KEYCHRON_CUSTOM_KEYCODE_SLOTS) { + const entry = context.custom?.find((item) => item.index === code - base); + if (entry) return { label: entry.shortName, title: entry.title, unknown: false }; + } + const hex = `0x${code.toString(16).toUpperCase().padStart(4, "0")}`; + return { label: hex, title: `Unrecognised keycode ${hex}`, unknown: true }; +} + +export interface KeychronCatalogEntry { code: number; label: string; title: string } +export interface KeychronCatalogCategory { id: string; label: string; entries: readonly KeychronCatalogEntry[] } + +const range = (from: number, to: number, context: KeychronKeycodeContext): KeychronCatalogEntry[] => + Array.from({ length: to - from + 1 }, (_, i) => { + const legend = keychronKeycodeLegend(from + i, context); + return { code: from + i, label: legend.label, title: legend.title }; + }); + +const list = (codes: readonly number[], context: KeychronKeycodeContext): KeychronCatalogEntry[] => + codes.map((code) => { + const legend = keychronKeycodeLegend(code, context); + return { code, label: legend.label, title: legend.title }; + }); + +/** + * Keycodes a key can be set to, grouped for a picker. Basic keys are offered + * on every firmware; layer keys and the board's custom keys come from the + * table for `context.protocol`. `layerCount` limits the layer keys. + */ +export function keychronKeycodeCatalog( + context: KeychronKeycodeContext & { layerCount?: number } = {}, +): KeychronCatalogCategory[] { + const protocol = context.protocol ?? 12; + const layers = Math.min(context.layerCount ?? 4, 32); + const bases = layerBases(protocol); + const layerEntries = (Object.keys(bases) as LayerKind[]).flatMap((kind) => + Array.from({ length: layers }, (_, layer) => { + const code = bases[kind] + layer; + const legend = keychronKeycodeLegend(code, context); + return { code, label: legend.label, title: legend.title }; + })); + const custom = (context.custom ?? []) + .filter((item) => item.index < KEYCHRON_CUSTOM_KEYCODE_SLOTS) + .map((item) => ({ code: keychronCustomKeycodeBase(protocol) + item.index, label: item.shortName, title: item.title })); + const categories: KeychronCatalogCategory[] = [ + { id: "letters", label: "Letters", entries: range(0x04, 0x1d, context) }, + { id: "numbers", label: "Numbers", entries: range(0x1e, 0x27, context) }, + { id: "punctuation", label: "Punctuation", entries: list([0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38], context) }, + { id: "editing", label: "Editing", entries: list([0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x39, 0x49, 0x4c], context) }, + { id: "navigation", label: "Navigation", entries: list([0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52], context) }, + { id: "function", label: "Function keys", entries: [...range(0x3a, 0x45, context), ...range(0x68, 0x73, context)] }, + { id: "modifiers", label: "Modifiers", entries: range(0xe0, 0xe7, context) }, + { id: "keypad", label: "Keypad", entries: [...list([0x53, 0x54, 0x55, 0x56, 0x57, 0x58], context), ...range(0x59, 0x63, context)] }, + { id: "system", label: "System", entries: list([0x46, 0x47, 0x48, 0x65], context) }, + { id: "media", label: "Media", entries: range(0xa8, 0xae, context) }, + { id: "layers", label: "Layers", entries: layerEntries }, + { id: "special", label: "Special", entries: list([0x0000, 0x0001], context) }, + ]; + if (custom.length) categories.push({ id: "keychron", label: "Keychron", entries: custom }); + return categories.filter((category) => category.entries.length > 0); +} + +/** True when `code` is one this module can name for the firmware's protocol. */ +export function keychronKeycodeIsChoosable(code: number, context: KeychronKeycodeContext = {}): boolean { + if (!Number.isInteger(code) || code < 0 || code > 0xffff) return false; + return !keychronKeycodeLegend(code, context).unknown; +} + +/** True when `code` is a layer key (MO/TG/TO/DF/OSL/TT) on this firmware. */ +export function keychronIsLayerKey(code: number, protocol = 12): boolean { + return layerKey(code, protocol) !== null; +} diff --git a/src/keychron/layouts.ts b/src/keychron/layouts.ts new file mode 100644 index 0000000..0cf9ce9 --- /dev/null +++ b/src/keychron/layouts.ts @@ -0,0 +1,333 @@ +/** + * Physical key layouts for the Keychron Hall-effect catalog, from Launcher's + * per-board definitions (`layouts.keys`, decorative art removed). 102 distinct + * layouts cover every board in `KEYCHRON_HE_PRODUCTS`. Units are key widths + * (1 = a standard key). Each key is `[row, col, x, y, w, h, rotation, rx, ry, + * encoder]`: `row`/`col` are the matrix position, `rotation` is degrees around + * (`rx`, `ry`), and `encoder` is the knob index or -1. + */ + +type RawKey = readonly [number, number, number, number, number, number, number, number, number, number]; +type RawLayout = readonly [width: number, height: number, keys: readonly RawKey[]]; + +const LAYOUTS: readonly RawLayout[] = [ + [16.25,5.5,[[0,0,0,0.25,1,1,0,0,0.25,-1],[0,1,1,0.25,1,1,0,0,0.25,-1],[0,2,2,0.25,1,1,0,0,0.25,-1],[0,3,3,0.25,1,1,0,0,0.25,-1],[0,4,4,0.25,1,1,0,0,0.25,-1],[0,5,5,0.25,1,1,0,0,0.25,-1],[0,6,6,0.25,1,1,0,0,0.25,-1],[0,7,7,0.25,1,1,0,0,0.25,-1],[0,8,8,0.25,1,1,0,0,0.25,-1],[0,9,9,0.25,1,1,0,0,0.25,-1],[0,10,10,0.25,1,1,0,0,0.25,-1],[0,11,11,0.25,1,1,0,0,0.25,-1],[0,12,12,0.25,1,1,0,0,0.25,-1],[0,13,13,0.25,2,1,0,0,0.25,-1],[0,14,15.25,0,1,1,0,0,0.25,0],[1,0,0,1.25,1.5,1,0,0,0.25,-1],[1,1,1.5,1.25,1,1,0,0,0.25,-1],[1,2,2.5,1.25,1,1,0,0,0.25,-1],[1,3,3.5,1.25,1,1,0,0,0.25,-1],[1,4,4.5,1.25,1,1,0,0,0.25,-1],[1,5,5.5,1.25,1,1,0,0,0.25,-1],[1,6,6.5,1.25,1,1,0,0,0.25,-1],[1,7,7.5,1.25,1,1,0,0,0.25,-1],[1,8,8.5,1.25,1,1,0,0,0.25,-1],[1,9,9.5,1.25,1,1,0,0,0.25,-1],[1,10,10.5,1.25,1,1,0,0,0.25,-1],[1,11,11.5,1.25,1,1,0,0,0.25,-1],[1,12,12.5,1.25,1,1,0,0,0.25,-1],[1,13,13.5,1.25,1.5,1,0,0,0.25,-1],[1,14,15.25,1.25,1,1,0,0,0.25,-1],[2,0,0,2.25,1.75,1,0,0,0.25,-1],[2,1,1.75,2.25,1,1,0,0,0.25,-1],[2,2,2.75,2.25,1,1,0,0,0.25,-1],[2,3,3.75,2.25,1,1,0,0,0.25,-1],[2,4,4.75,2.25,1,1,0,0,0.25,-1],[2,5,5.75,2.25,1,1,0,0,0.25,-1],[2,6,6.75,2.25,1,1,0,0,0.25,-1],[2,7,7.75,2.25,1,1,0,0,0.25,-1],[2,8,8.75,2.25,1,1,0,0,0.25,-1],[2,9,9.75,2.25,1,1,0,0,0.25,-1],[2,10,10.75,2.25,1,1,0,0,0.25,-1],[2,11,11.75,2.25,1,1,0,0,0.25,-1],[2,12,12.75,2.25,2.25,1,0,0,0.25,-1],[2,14,15.25,2.25,1,1,0,0,0.25,-1],[3,0,0,3.25,2.25,1,0,0,0.25,-1],[3,2,2.25,3.25,1,1,0,0,0.25,-1],[3,3,3.25,3.25,1,1,0,0,0.25,-1],[3,4,4.25,3.25,1,1,0,0,0.25,-1],[3,5,5.25,3.25,1,1,0,0,0.25,-1],[3,6,6.25,3.25,1,1,0,0,0.25,-1],[3,7,7.25,3.25,1,1,0,0,0.25,-1],[3,8,8.25,3.25,1,1,0,0,0.25,-1],[3,9,9.25,3.25,1,1,0,0,0.25,-1],[3,10,10.25,3.25,1,1,0,0,0.25,-1],[3,11,11.25,3.25,1,1,0,0,0.25,-1],[3,12,12.25,3.25,1.75,1,0,0,0.25,-1],[3,13,14.25,3.5,1,1,0,0,0.25,-1],[4,0,0,4.25,1.25,1,0,0,0.25,-1],[4,1,1.25,4.25,1.25,1,0,0,0.25,-1],[4,2,2.5,4.25,1.25,1,0,0,0.25,-1],[4,6,3.75,4.25,6.25,1,0,0,0.25,-1],[4,9,10,4.25,1,1,0,0,0.25,-1],[4,10,11,4.25,1,1,0,0,0.25,-1],[4,11,12,4.25,1,1,0,0,0.25,-1],[4,12,13.25,4.5,1,1,0,0,0.25,-1],[4,13,14.25,4.5,1,1,0,0,0.25,-1],[4,14,15.25,4.5,1,1,0,0,0.25,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[3,14,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,14,15.25,4.5,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.75,1,0,0,0,-1],[5,8,9.25,5.25,1,1,0,0,0,-1],[5,9,10.25,5.25,1.25,1,0,0,0,-1],[5,10,11.5,5.25,1.25,1,0,0,0,-1],[5,11,12.75,5.25,1.25,1,0,0,0,-1],[5,12,14.25,5.5,1,1,0,0,0,-1],[5,13,15.25,5.5,1,1,0,0,0,-1],[5,14,16.25,5.5,1,1,0,0,0,-1],[5,16,17.5,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1]]], + [16.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2,1,0,0,0,-1],[4,13,14.5,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.5,1,0,0,0,-1],[5,9,10.25,5.25,1,1,0,0,0,-1],[5,10,11.25,5.25,1,1,0,0,0,-1],[5,11,12.25,5.25,1,1,0,0,0,-1],[5,12,13.5,5.25,1,1,0,0,0,-1],[5,13,14.5,5.25,1,1,0,0,0,-1],[5,14,15.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[0,16,18.5,0,1,1,0,0,0,-1],[0,17,19.5,0,1,1,0,0,0,-1],[0,18,20.5,0,1,1,0,0,0,-1],[0,19,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [16,5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,2,1,0,0,0,-1],[0,14,15,0,1,1,0,0,0,-1],[1,0,0,1,1.5,1,0,0,0,-1],[1,1,1.5,1,1,1,0,0,0,-1],[1,2,2.5,1,1,1,0,0,0,-1],[1,3,3.5,1,1,1,0,0,0,-1],[1,4,4.5,1,1,1,0,0,0,-1],[1,5,5.5,1,1,1,0,0,0,-1],[1,6,6.5,1,1,1,0,0,0,-1],[1,7,7.5,1,1,1,0,0,0,-1],[1,8,8.5,1,1,1,0,0,0,-1],[1,9,9.5,1,1,1,0,0,0,-1],[1,10,10.5,1,1,1,0,0,0,-1],[1,11,11.5,1,1,1,0,0,0,-1],[1,12,12.5,1,1,1,0,0,0,-1],[1,13,13.75,1,1.25,2,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.75,1,0,0,0,-1],[2,1,1.75,2,1,1,0,0,0,-1],[2,2,2.75,2,1,1,0,0,0,-1],[2,3,3.75,2,1,1,0,0,0,-1],[2,4,4.75,2,1,1,0,0,0,-1],[2,5,5.75,2,1,1,0,0,0,-1],[2,6,6.75,2,1,1,0,0,0,-1],[2,7,7.75,2,1,1,0,0,0,-1],[2,8,8.75,2,1,1,0,0,0,-1],[2,9,9.75,2,1,1,0,0,0,-1],[2,10,10.75,2,1,1,0,0,0,-1],[2,11,11.75,2,1,1,0,0,0,-1],[2,13,12.75,2,1,1,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.25,1,0,0,0,-1],[3,1,1.25,3,1,1,0,0,0,-1],[3,2,2.25,3,1,1,0,0,0,-1],[3,3,3.25,3,1,1,0,0,0,-1],[3,4,4.25,3,1,1,0,0,0,-1],[3,5,5.25,3,1,1,0,0,0,-1],[3,6,6.25,3,1,1,0,0,0,-1],[3,7,7.25,3,1,1,0,0,0,-1],[3,8,8.25,3,1,1,0,0,0,-1],[3,9,9.25,3,1,1,0,0,0,-1],[3,10,10.25,3,1,1,0,0,0,-1],[3,11,11.25,3,1,1,0,0,0,-1],[3,12,12.25,3,1.75,1,0,0,0,-1],[3,13,14,3,1,1,0,0,0,-1],[3,14,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1.25,1,0,0,0,-1],[4,2,2.5,4,1.25,1,0,0,0,-1],[4,6,3.75,4,6.25,1,0,0,0,-1],[4,9,10,4,1,1,0,0,0,-1],[4,10,11,4,1,1,0,0,0,-1],[4,11,12,4,1,1,0,0,0,-1],[4,12,13,4,1,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [7,8.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1.5,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1.25,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1.75,1,0,0,0,-1],[5,0,0,5,1.5,1,0,0,0,-1],[5,3,2.75,5,1,1,0,0,0,-1],[5,4,3.75,5,1,1,0,0,0,-1],[5,5,4.75,5,1,1,0,0,0,-1],[5,6,4.75,6,2.25,2.25,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,0],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15,0,1,1,0,0,0,-1],[0,15,16,0,1,1,0,0,0,-1],[0,16,17,0,1,1,0,0,0,-1],[0,17,18.25,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4.25,1.25,1,1,0,0,0,-1],[1,5,5.25,1.25,1,1,0,0,0,-1],[1,6,6.25,1.25,1,1,0,0,0,-1],[1,7,7.25,1.25,1,1,0,0,0,-1],[1,8,8.25,1.25,1,1,0,0,0,-1],[1,9,9.25,1.25,1,1,0,0,0,-1],[1,10,10.25,1.25,1,1,0,0,0,-1],[1,11,11.25,1.25,1,1,0,0,0,-1],[1,12,12.25,1.25,1,1,0,0,0,-1],[1,13,13.25,1.25,1,1,0,0,0,-1],[1,14,14.25,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[1,16,16.25,1.25,1,1,0,0,0,-1],[1,17,17.25,1.25,2,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1,1,0,0,0,-1],[2,1,1,2.25,1,1,0,0,0,-1],[2,2,2,2.25,1,1,0,0,0,-1],[2,3,3,2.25,1,2,0,0,0,-1],[2,4,4.25,2.25,1.5,1,0,0,0,-1],[2,5,5.75,2.25,1,1,0,0,0,-1],[2,6,6.75,2.25,1,1,0,0,0,-1],[2,7,7.75,2.25,1,1,0,0,0,-1],[2,8,8.75,2.25,1,1,0,0,0,-1],[2,9,9.75,2.25,1,1,0,0,0,-1],[2,10,10.75,2.25,1,1,0,0,0,-1],[2,11,11.75,2.25,1,1,0,0,0,-1],[2,12,12.75,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1,1,0,0,0,-1],[2,14,14.75,2.25,1,1,0,0,0,-1],[2,15,15.75,2.25,1,1,0,0,0,-1],[2,16,16.75,2.25,1,1,0,0,0,-1],[2,17,17.75,2.25,1.5,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1,1,0,0,0,-1],[3,1,1,3.25,1,1,0,0,0,-1],[3,2,2,3.25,1,1,0,0,0,-1],[3,4,4.25,3.25,1.75,1,0,0,0,-1],[3,5,6,3.25,1,1,0,0,0,-1],[3,6,7,3.25,1,1,0,0,0,-1],[3,7,8,3.25,1,1,0,0,0,-1],[3,8,9,3.25,1,1,0,0,0,-1],[3,9,10,3.25,1,1,0,0,0,-1],[3,10,11,3.25,1,1,0,0,0,-1],[3,11,12,3.25,1,1,0,0,0,-1],[3,12,13,3.25,1,1,0,0,0,-1],[3,13,14,3.25,1,1,0,0,0,-1],[3,14,15,3.25,1,1,0,0,0,-1],[3,15,16,3.25,1,1,0,0,0,-1],[3,16,17,3.25,2.25,1,0,0,0,-1],[3,17,19.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1,1,0,0,0,-1],[4,1,1,4.25,1,1,0,0,0,-1],[4,2,2,4.25,1,1,0,0,0,-1],[4,3,3,4.25,1,2,0,0,0,-1],[4,4,4.25,4.25,2.25,1,0,0,0,-1],[4,6,6.5,4.25,1,1,0,0,0,-1],[4,7,7.5,4.25,1,1,0,0,0,-1],[4,8,8.5,4.25,1,1,0,0,0,-1],[4,9,9.5,4.25,1,1,0,0,0,-1],[4,10,10.5,4.25,1,1,0,0,0,-1],[4,11,11.5,4.25,1,1,0,0,0,-1],[4,12,12.5,4.25,1,1,0,0,0,-1],[4,13,13.5,4.25,1,1,0,0,0,-1],[4,14,14.5,4.25,1,1,0,0,0,-1],[4,16,15.5,4.25,1,1,0,0,0,-1],[4,17,16.5,4.25,1.75,1,0,0,0,-1],[4,18,18.5,4.5,1,1,0,0,0,-1],[5,1,0,5.25,2,1,0,0,0,-1],[5,2,2,5.25,1,1,0,0,0,-1],[5,4,4.25,5.25,1.25,1,0,0,0,-1],[5,5,5.5,5.25,1.25,1,0,0,0,-1],[5,6,6.75,5.25,1.25,1,0,0,0,-1],[5,10,8,5.25,6.25,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.5,5.5,1,1,0,0,0,-1],[5,17,18.5,5.5,1,1,0,0,0,-1],[5,18,19.5,5.5,1,1,0,0,0,-1]]], + [5.25,6.25,[[0,0,0,0,1,1,0,0,0,0],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1.25,1.25,1,1,0,0,0,-1],[1,2,2.25,1.25,1,1,0,0,0,-1],[1,3,3.25,1.25,1,1,0,0,0,-1],[1,4,4.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1,1,0,0,0,-1],[2,1,1.25,2.25,1,1,0,0,0,-1],[2,2,2.25,2.25,1,1,0,0,0,-1],[2,3,3.25,2.25,1,1,0,0,0,-1],[2,4,4.25,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1,1,0,0,0,-1],[3,1,1.25,3.25,1,1,0,0,0,-1],[3,2,2.25,3.25,1,1,0,0,0,-1],[3,3,3.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1,1,0,0,0,-1],[5,1,1.25,5.25,2,1,0,0,0,-1],[5,3,3.25,5.25,1,1,0,0,0,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1],[5,16,16.5,5.25,2,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1]]], + [15,5,[[0,0,0,0,1,1,0,0,-0.25,-1],[0,1,1,0,1,1,0,0,-0.25,-1],[0,2,2,0,1,1,0,0,-0.25,-1],[0,3,3,0,1,1,0,0,-0.25,-1],[0,4,4,0,1,1,0,0,-0.25,-1],[0,5,5,0,1,1,0,0,-0.25,-1],[0,6,6,0,1,1,0,0,-0.25,-1],[0,7,7,0,1,1,0,0,-0.25,-1],[0,8,8,0,1,1,0,0,-0.25,-1],[0,9,9,0,1,1,0,0,-0.25,-1],[0,10,10,0,1,1,0,0,-0.25,-1],[0,11,11,0,1,1,0,0,-0.25,-1],[0,12,12,0,1,1,0,0,-0.25,-1],[0,13,13,0,2,1,0,0,-0.25,-1],[1,0,0,1,1.5,1,0,0,-0.25,-1],[1,1,1.5,1,1,1,0,0,-0.25,-1],[1,2,2.5,1,1,1,0,0,-0.25,-1],[1,3,3.5,1,1,1,0,0,-0.25,-1],[1,4,4.5,1,1,1,0,0,-0.25,-1],[1,5,5.5,1,1,1,0,0,-0.25,-1],[1,6,6.5,1,1,1,0,0,-0.25,-1],[1,7,7.5,1,1,1,0,0,-0.25,-1],[1,8,8.5,1,1,1,0,0,-0.25,-1],[1,9,9.5,1,1,1,0,0,-0.25,-1],[1,10,10.5,1,1,1,0,0,-0.25,-1],[1,11,11.5,1,1,1,0,0,-0.25,-1],[1,12,12.5,1,1,1,0,0,-0.25,-1],[1,13,13.5,1,1.5,1,0,0,-0.25,-1],[2,0,0,2,1.75,1,0,0,-0.25,-1],[2,1,1.75,2,1,1,0,0,-0.25,-1],[2,2,2.75,2,1,1,0,0,-0.25,-1],[2,3,3.75,2,1,1,0,0,-0.25,-1],[2,4,4.75,2,1,1,0,0,-0.25,-1],[2,5,5.75,2,1,1,0,0,-0.25,-1],[2,6,6.75,2,1,1,0,0,-0.25,-1],[2,7,7.75,2,1,1,0,0,-0.25,-1],[2,8,8.75,2,1,1,0,0,-0.25,-1],[2,9,9.75,2,1,1,0,0,-0.25,-1],[2,10,10.75,2,1,1,0,0,-0.25,-1],[2,11,11.75,2,1,1,0,0,-0.25,-1],[2,12,12.75,2,2.25,1,0,0,-0.25,-1],[3,0,0,3,2.25,1,0,0,-0.25,-1],[3,2,2.25,3,1,1,0,0,-0.25,-1],[3,3,3.25,3,1,1,0,0,-0.25,-1],[3,4,4.25,3,1,1,0,0,-0.25,-1],[3,5,5.25,3,1,1,0,0,-0.25,-1],[3,6,6.25,3,1,1,0,0,-0.25,-1],[3,7,7.25,3,1,1,0,0,-0.25,-1],[3,8,8.25,3,1,1,0,0,-0.25,-1],[3,9,9.25,3,1,1,0,0,-0.25,-1],[3,10,10.25,3,1,1,0,0,-0.25,-1],[3,11,11.25,3,1,1,0,0,-0.25,-1],[3,13,12.25,3,2.75,1,0,0,-0.25,-1],[4,0,0,4,1.25,1,0,0,-0.25,-1],[4,1,1.25,4,1.25,1,0,0,-0.25,-1],[4,2,2.5,4,1.25,1,0,0,-0.25,-1],[4,6,3.75,4,6.25,1,0,0,-0.25,-1],[4,8,10,4,1.25,1,0,0,-0.25,-1],[4,9,11.25,4,1.25,1,0,0,-0.25,-1],[4,10,12.5,4,1.25,1,0,0,-0.25,-1],[4,11,13.75,4,1.25,1,0,0,-0.25,-1]]], + [16.25,5.5,[[0,0,0,0.25,1,1,0,0,0.25,-1],[0,1,1,0.25,1,1,0,0,0.25,-1],[0,2,2,0.25,1,1,0,0,0.25,-1],[0,3,3,0.25,1,1,0,0,0.25,-1],[0,4,4,0.25,1,1,0,0,0.25,-1],[0,5,5,0.25,1,1,0,0,0.25,-1],[0,6,6,0.25,1,1,0,0,0.25,-1],[0,7,7,0.25,1,1,0,0,0.25,-1],[0,8,8,0.25,1,1,0,0,0.25,-1],[0,9,9,0.25,1,1,0,0,0.25,-1],[0,10,10,0.25,1,1,0,0,0.25,-1],[0,11,11,0.25,1,1,0,0,0.25,-1],[0,12,12,0.25,1,1,0,0,0.25,-1],[0,13,13,0.25,2,1,0,0,0.25,-1],[0,14,15.25,0,1,1,0,0,0.25,0],[1,0,0,1.25,1.5,1,0,0,0.25,-1],[1,1,1.5,1.25,1,1,0,0,0.25,-1],[1,2,2.5,1.25,1,1,0,0,0.25,-1],[1,3,3.5,1.25,1,1,0,0,0.25,-1],[1,4,4.5,1.25,1,1,0,0,0.25,-1],[1,5,5.5,1.25,1,1,0,0,0.25,-1],[1,6,6.5,1.25,1,1,0,0,0.25,-1],[1,7,7.5,1.25,1,1,0,0,0.25,-1],[1,8,8.5,1.25,1,1,0,0,0.25,-1],[1,9,9.5,1.25,1,1,0,0,0.25,-1],[1,10,10.5,1.25,1,1,0,0,0.25,-1],[1,11,11.5,1.25,1,1,0,0,0.25,-1],[1,12,12.5,1.25,1,1,0,0,0.25,-1],[1,13,13.5,1.25,1.5,1,0,0,0.25,-1],[1,14,15.25,1.25,1,1,0,0,0.25,-1],[2,0,0,2.25,1.75,1,0,0,0.25,-1],[2,1,1.75,2.25,1,1,0,0,0.25,-1],[2,2,2.75,2.25,1,1,0,0,0.25,-1],[2,3,3.75,2.25,1,1,0,0,0.25,-1],[2,4,4.75,2.25,1,1,0,0,0.25,-1],[2,5,5.75,2.25,1,1,0,0,0.25,-1],[2,6,6.75,2.25,1,1,0,0,0.25,-1],[2,7,7.75,2.25,1,1,0,0,0.25,-1],[2,8,8.75,2.25,1,1,0,0,0.25,-1],[2,9,9.75,2.25,1,1,0,0,0.25,-1],[2,10,10.75,2.25,1,1,0,0,0.25,-1],[2,11,11.75,2.25,1,1,0,0,0.25,-1],[2,12,12.75,2.25,2.25,1,0,0,0.25,-1],[2,14,15.25,2.25,1,1,0,0,0.25,-1],[3,0,0,3.25,2.25,1,0,0,0.25,-1],[3,2,2.25,3.25,1,1,0,0,0.25,-1],[3,3,3.25,3.25,1,1,0,0,0.25,-1],[3,4,4.25,3.25,1,1,0,0,0.25,-1],[3,5,5.25,3.25,1,1,0,0,0.25,-1],[3,6,6.25,3.25,1,1,0,0,0.25,-1],[3,7,7.25,3.25,1,1,0,0,0.25,-1],[3,8,8.25,3.25,1,1,0,0,0.25,-1],[3,9,9.25,3.25,1,1,0,0,0.25,-1],[3,10,10.25,3.25,1,1,0,0,0.25,-1],[3,11,11.25,3.25,1,1,0,0,0.25,-1],[3,13,12.25,3.25,1.75,1,0,0,0.25,-1],[3,14,14.25,3.5,1,1,0,0,0.25,-1],[4,0,0,4.25,1.25,1,0,0,0.25,-1],[4,1,1.25,4.25,1.25,1,0,0,0.25,-1],[4,2,2.5,4.25,1.25,1,0,0,0.25,-1],[4,6,3.75,4.25,6.25,1,0,0,0.25,-1],[4,9,10,4.25,1,1,0,0,0.25,-1],[4,10,11,4.25,1,1,0,0,0.25,-1],[4,11,12,4.25,1,1,0,0,0.25,-1],[4,12,13.25,4.5,1,1,0,0,0.25,-1],[4,13,14.25,4.5,1,1,0,0,0.25,-1],[4,14,15.25,4.5,1,1,0,0,0.25,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,13,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1,1,0,0,0,-1],[4,13,13.25,4,1.75,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,14,13.5,2,1.5,1,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,2.25,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,14,14,4,1,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [16.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[1,14,14,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1,1,0,0,0,-1],[4,14,14.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.5,1,0,0,0,-1],[5,1,1.5,5.25,1.25,1,0,0,0,-1],[5,2,2.75,5.25,1.25,1,0,0,0,-1],[5,3,4,5.25,1,1,0,0,0,-1],[5,6,5,5.25,3.75,1,0,0,0,-1],[5,8,8.75,5.25,1,1,0,0,0,-1],[5,9,9.75,5.25,1,1,0,0,0,-1],[5,10,10.75,5.25,1.5,1,0,0,0,-1],[5,11,12.25,5.25,1,1,0,0,0,-1],[5,12,13.25,5.25,1,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1]]], + [15,5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,2,1,0,0,0,-1],[1,0,0,1,1.5,1,0,0,0,-1],[1,1,1.5,1,1,1,0,0,0,-1],[1,2,2.5,1,1,1,0,0,0,-1],[1,3,3.5,1,1,1,0,0,0,-1],[1,4,4.5,1,1,1,0,0,0,-1],[1,5,5.5,1,1,1,0,0,0,-1],[1,6,6.5,1,1,1,0,0,0,-1],[1,7,7.5,1,1,1,0,0,0,-1],[1,8,8.5,1,1,1,0,0,0,-1],[1,9,9.5,1,1,1,0,0,0,-1],[1,10,10.5,1,1,1,0,0,0,-1],[1,11,11.5,1,1,1,0,0,0,-1],[1,12,12.5,1,1,1,0,0,0,-1],[1,13,13.5,1,1.5,1,0,0,0,-1],[2,0,0,2,1.75,1,0,0,0,-1],[2,1,1.75,2,1,1,0,0,0,-1],[2,2,2.75,2,1,1,0,0,0,-1],[2,3,3.75,2,1,1,0,0,0,-1],[2,4,4.75,2,1,1,0,0,0,-1],[2,5,5.75,2,1,1,0,0,0,-1],[2,6,6.75,2,1,1,0,0,0,-1],[2,7,7.75,2,1,1,0,0,0,-1],[2,8,8.75,2,1,1,0,0,0,-1],[2,9,9.75,2,1,1,0,0,0,-1],[2,10,10.75,2,1,1,0,0,0,-1],[2,11,11.75,2,1,1,0,0,0,-1],[2,13,12.75,2,2.25,1,0,0,0,-1],[3,0,0,3,2.25,1,0,0,0,-1],[3,2,2.25,3,1,1,0,0,0,-1],[3,3,3.25,3,1,1,0,0,0,-1],[3,4,4.25,3,1,1,0,0,0,-1],[3,5,5.25,3,1,1,0,0,0,-1],[3,6,6.25,3,1,1,0,0,0,-1],[3,7,7.25,3,1,1,0,0,0,-1],[3,8,8.25,3,1,1,0,0,0,-1],[3,9,9.25,3,1,1,0,0,0,-1],[3,10,10.25,3,1,1,0,0,0,-1],[3,11,11.25,3,1,1,0,0,0,-1],[3,12,12.25,3,2.75,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1.25,1,0,0,0,-1],[4,2,2.5,4,1.25,1,0,0,0,-1],[4,6,3.75,4,6.25,1,0,0,0,-1],[4,9,10,4,1.25,1,0,0,0,-1],[4,10,11.25,4,1.25,1,0,0,0,-1],[4,11,12.5,4,1.25,1,0,0,0,-1],[4,13,13.75,4,1.25,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [1.6,1.6,[[0,0,0,0,0.8,0.8,0,0,0,-1],[0,1,0.8,0,0.8,0.8,0,0,0,-1],[1,0,0,0.8,0.8,0.8,0,0,0,-1],[1,1,0.8,0.8,0.8,0.8,0,0,0,-1]]], + [3,2,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,0],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1]]], + [14.5,6.1,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,9,0.2,0.7,0.7,0,0,0,-1],[0,3,10.2,0.2,0.7,0.7,0,0,0,-1],[0,4,11.4,0.2,0.7,0.7,0,0,0,-1],[0,5,12.6,0.2,0.7,0.7,0,0,0,-1],[0,6,13.8,0.2,0.7,0.7,0,0,0,-1],[1,0,4,1.2,1,1,0,0,0,-1],[1,1,6,1.3,1,1,0,0,0,-1],[1,2,7.5,2.1,1,1,0,0,0,-1],[1,3,8.9,1.8,1,1,0,0,0,-1],[1,4,10.4,2,1,1,0,0,0,-1],[1,5,1.9,2.2,1,1,0,0,0,-1],[1,6,3.2,2.4,1,1,0,0,0,-1],[1,7,4.4,3.1,1,1,0,0,0,-1],[2,0,6,2.6,1,1,0,0,0,-1],[2,1,7.4,3.4,1,1,0,0,0,-1],[2,2,8.9,3.2,1,1,0,0,0,-1],[2,3,5.8,3.9,1,1,0,0,0,-1],[2,4,3.3,4.7,1,1,0,0,0,-1],[2,5,4.6,5.1,1,1,0,0,0,-1],[2,6,7.1,4.8,1,1,0,0,0,-1],[2,7,10.3,3.4,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[0,16,18.5,0,1,1,0,0,0,-1],[0,17,19.5,0,1,1,0,0,0,-1],[0,18,20.5,0,1,1,0,0,0,-1],[0,19,21.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.5,0,1,1,0,0,0,-1],[0,2,2.5,0,1,1,0,0,0,-1],[0,3,3.5,0,1,1,0,0,0,-1],[0,4,4.5,0,1,1,0,0,0,-1],[0,5,5.75,0,1,1,0,0,0,-1],[0,6,6.75,0,1,1,0,0,0,-1],[0,7,7.75,0,1,1,0,0,0,-1],[0,8,8.75,0,1,1,0,0,0,-1],[0,9,10,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.5,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6,1,0,0,0,-1],[5,9,9.75,5.25,1,1,0,0,0,-1],[5,10,10.75,5.25,1,1,0,0,0,-1],[5,11,11.75,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [16.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[1,14,14,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1,1,0,0,0,-1],[4,14,14.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,8,9,5.25,1,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1.25,1,0,0,0,-1],[5,11,12.25,5.25,1,1,0,0,0,-1],[5,12,13.25,5.25,1,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1]]], + [2,3,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,3,0.5,1,1,1,0,0,0,0],[1,0,0,2,1,1,0,0,0,-1],[1,1,1,2,1,1,0,0,0,-1]]], + [18,6.5,[[0,0,0,0,1.05,1.05,0,0,0,0],[0,1,1.75,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6,0,1,1,0,0,0,-1],[0,6,7.25,0,1,1,0,0,0,-1],[0,7,8.25,0,1,1,0,0,0,-1],[0,8,9.25,0,1,1,0,0,0,-1],[0,9,10.25,0,1,1,0,0,0,-1],[0,10,11.5,0,1,1,0,0,0,-1],[0,11,12.5,0,1,1,0,0,0,-1],[0,12,13.5,0,1,1,0,0,0,-1],[0,13,14.5,0,1,1,0,0,0,-1],[0,14,15.75,0,1,1,0,0,0,-1],[0,15,17,0,1,1,0,0,0,-1],[1,1,1.75,1.25,1,1,0,0,0,-1],[1,2,2.75,1.25,1,1,0,0,0,-1],[1,3,3.75,1.25,1,1,0,0,0,-1],[1,4,4.75,1.25,1,1,0,0,0,-1],[1,5,5.75,1.25,1,1,0,0,0,-1],[1,6,6.75,1.25,1,1,0,0,0,-1],[1,7,7.75,1.25,1,1,0,0,0,-1],[1,8,8.75,1.25,1,1,0,0,0,-1],[1,9,9.75,1.25,1,1,0,0,0,-1],[1,10,10.75,1.25,1,1,0,0,0,-1],[1,11,11.75,1.25,1,1,0,0,0,-1],[1,12,12.75,1.25,1,1,0,0,0,-1],[1,13,13.75,1.25,1,1,0,0,0,-1],[1,14,14.75,1.25,2,1,0,0,0,-1],[1,15,17,1.25,1,1,0,0,0,-1],[2,0,0,1.75,1.05,1.05,0,0,0,-1],[2,1,1.75,2.25,1.5,1,0,0,0,-1],[2,2,3.25,2.25,1,1,0,0,0,-1],[2,3,4.25,2.25,1,1,0,0,0,-1],[2,4,5.25,2.25,1,1,0,0,0,-1],[2,5,6.25,2.25,1,1,0,0,0,-1],[2,6,7.25,2.25,1,1,0,0,0,-1],[2,7,8.25,2.25,1,1,0,0,0,-1],[2,8,9.25,2.25,1,1,0,0,0,-1],[2,9,10.25,2.25,1,1,0,0,0,-1],[2,10,11.25,2.25,1,1,0,0,0,-1],[2,11,12.25,2.25,1,1,0,0,0,-1],[2,12,13.25,2.25,1,1,0,0,0,-1],[2,13,14.25,2.25,1,1,0,0,0,-1],[2,14,15.5,2.25,1.25,2,0,0,0,-1],[2,15,17,2.25,1,1,0,0,0,-1],[3,0,0,2.8,1.05,1.05,0,0,0,-1],[3,1,1.75,3.25,1.75,1,0,0,0,-1],[3,2,3.5,3.25,1,1,0,0,0,-1],[3,3,4.5,3.25,1,1,0,0,0,-1],[3,4,5.5,3.25,1,1,0,0,0,-1],[3,5,6.5,3.25,1,1,0,0,0,-1],[3,6,7.5,3.25,1,1,0,0,0,-1],[3,7,8.5,3.25,1,1,0,0,0,-1],[3,8,9.5,3.25,1,1,0,0,0,-1],[3,9,10.5,3.25,1,1,0,0,0,-1],[3,10,11.5,3.25,1,1,0,0,0,-1],[3,11,12.5,3.25,1,1,0,0,0,-1],[3,12,13.5,3.25,1,1,0,0,0,-1],[3,13,14.5,3.25,1,1,0,0,0,-1],[3,14,17,3.25,1,1,0,0,0,-1],[4,0,0,3.85,1.05,1.05,0,0,0,-1],[4,1,1.75,4.25,1.25,1,0,0,0,-1],[4,2,3,4.25,1,1,0,0,0,-1],[4,3,4,4.25,1,1,0,0,0,-1],[4,4,5,4.25,1,1,0,0,0,-1],[4,5,6,4.25,1,1,0,0,0,-1],[4,6,7,4.25,1,1,0,0,0,-1],[4,7,8,4.25,1,1,0,0,0,-1],[4,8,9,4.25,1,1,0,0,0,-1],[4,9,10,4.25,1,1,0,0,0,-1],[4,10,11,4.25,1,1,0,0,0,-1],[4,11,12,4.25,1,1,0,0,0,-1],[4,12,13,4.25,1,1,0,0,0,-1],[4,14,14,4.25,1.7,1,0,0,0,-1],[4,15,16,4.5,1,1,0,0,0,-1],[5,0,0,4.9,1.05,1.05,0,0,0,-1],[5,1,1.75,5.25,1.25,1,0,0,0,-1],[5,2,3,5.25,1.25,1,0,0,0,-1],[5,3,4.25,5.25,1.25,1,0,0,0,-1],[5,6,5.5,5.25,6.25,1,0,0,0,-1],[5,10,11.75,5.25,1,1,0,0,0,-1],[5,11,12.75,5.25,1,1,0,0,0,-1],[5,12,13.75,5.25,1,1,0,0,0,-1],[5,13,15,5.5,1,1,0,0,0,-1],[5,14,16,5.5,1,1,0,0,0,-1],[5,15,17,5.5,1,1,0,0,0,-1]]], + [16.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[3,14,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1,1,0,0,0,-1],[4,14,14.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,8,9,5.25,1.25,1,0,0,0,-1],[5,9,10.25,5.25,1,1,0,0,0,-1],[5,10,11.25,5.25,1,1,0,0,0,-1],[5,11,12.25,5.25,1,1,0,0,0,-1],[5,12,13.25,5.25,1,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[3,14,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,15,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[4,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,14,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[5,5,14,0,1,1,0,0,0,0],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[3,12,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,8,9,5.25,1,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[5,5,14,0,1,1,0,0,0,0],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [22.65,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.5,0,1,1,0,0,0,-1],[0,2,2.5,0,1,1,0,0,0,-1],[0,3,3.5,0,1,1,0,0,0,-1],[0,4,4.5,0,1,1,0,0,0,-1],[0,5,5.75,0,1,1,0,0,0,-1],[0,6,6.75,0,1,1,0,0,0,-1],[0,7,7.75,0,1,1,0,0,0,-1],[0,8,8.75,0,1,1,0,0,0,-1],[0,9,10,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14.25,0,1,1,0,0,0,0],[0,14,15.4,0,1,1,0,0,0,-1],[0,15,16.4,0,1,1,0,0,0,-1],[0,16,17.4,0,1,1,0,0,0,-1],[0,17,18.65,0,1,1,0,0,0,-1],[0,18,19.65,0,1,1,0,0,0,-1],[0,19,20.65,0,1,1,0,0,0,-1],[0,20,21.65,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.35,1.25,1,1,0,0,0,-1],[1,15,16.35,1.25,1,1,0,0,0,-1],[1,16,17.35,1.25,1,1,0,0,0,-1],[1,17,18.6,1.25,1,1,0,0,0,-1],[1,18,19.6,1.25,1,1,0,0,0,-1],[1,19,20.6,1.25,1,1,0,0,0,-1],[1,20,21.6,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.35,2.25,1,1,0,0,0,-1],[2,15,16.35,2.25,1,1,0,0,0,-1],[2,16,17.35,2.25,1,1,0,0,0,-1],[2,17,18.6,2.25,1,1,0,0,0,-1],[2,18,19.6,2.25,1,1,0,0,0,-1],[2,19,20.6,2.25,1,1,0,0,0,-1],[2,20,21.6,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.6,3.25,1,1,0,0,0,-1],[3,18,19.6,3.25,1,1,0,0,0,-1],[3,19,20.6,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.35,4.25,1,1,0,0,0,-1],[4,17,18.6,4.25,1,1,0,0,0,-1],[4,18,19.6,4.25,1,1,0,0,0,-1],[4,19,20.6,4.25,1,1,0,0,0,-1],[4,20,21.6,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.35,5.25,1,1,0,0,0,-1],[5,15,16.35,5.25,1,1,0,0,0,-1],[5,16,17.35,5.25,1,1,0,0,0,-1],[5,17,18.6,5.25,2,1,0,0,0,-1],[5,18,20.6,5.25,1,1,0,0,0,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[5,5,14,0,1,1,0,0,0,0],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,13,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,14,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[3,15,17.25,5.25,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1],[5,16,16.5,5.25,2,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1]]], + [16.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15.25,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.5,2,1.5,1,0,0,0,-1],[2,14,15.25,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,2.25,1,0,0,0,-1],[3,13,15.25,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,12,11.25,4,1,1,0,0,0,-1],[4,13,12.25,4,1.75,1,0,0,0,-1],[4,14,14.25,4.25,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13.25,5.25,1,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1]]], + [19.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[0,16,18.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,13,15.5,3.25,1,1,0,0,0,-1],[3,14,16.5,3.25,1,1,0,0,0,-1],[3,15,17.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1,1,0,0,0,-1],[5,11,11,5.25,1,1,0,0,0,-1],[5,12,12,5.25,1,1,0,0,0,-1],[5,13,13.25,5.5,1,1,0,0,0,-1],[5,14,14.25,5.5,1,1,0,0,0,-1],[5,15,15.25,5.5,1,1,0,0,0,-1],[5,16,16.5,5.25,1,1,0,0,0,-1],[5,17,17.5,5.25,1,1,0,0,0,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,15,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1,1,0,0,0,-1],[5,11,11,5.25,1,1,0,0,0,-1],[5,12,12,5.25,1,1,0,0,0,-1],[5,13,13.25,5.5,1,1,0,0,0,-1],[5,14,14.25,5.5,1,1,0,0,0,-1],[5,15,15.25,5.5,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[5,5,14,0,1,1,0,0,0,0],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[3,13,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,9,17.25,5.25,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,2.25,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,16,16.5,5.25,2,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,11,11,5.25,1,1,0,0,0,-1],[5,12,12,5.25,1,1,0,0,0,-1],[5,16,16.5,5.25,2,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1],[5,13,13.25,5.5,1,1,0,0,0,-1],[5,14,14.25,5.5,1,1,0,0,0,-1],[5,15,15.25,5.5,1,1,0,0,0,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.5,2,1.5,1,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,2.25,1,0,0,0,-1],[3,14,15,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,13,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [16.3,6.4,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,8,7.5,0,1,1,0,0,0,-1],[0,9,8.5,0,1,1,0,0,0,-1],[0,10,9.75,0,1,1,0,0,0,-1],[0,11,10.75,0,1,1,0,0,0,-1],[0,12,11.75,0,1,1,0,0,0,-1],[0,13,12.75,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15.3,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,8,7,1.25,1,1,0,0,0,-1],[1,9,8,1.25,1,1,0,0,0,-1],[1,10,9,1.25,1,1,0,0,0,-1],[1,11,10,1.25,1,1,0,0,0,-1],[1,12,11,1.25,1,1,0,0,0,-1],[1,13,12,1.25,1,1,0,0,0,-1],[1,14,13,1.25,2,1,0,0,0,-1],[1,15,15.3,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,8,7.5,2.25,1,1,0,0,0,-1],[2,9,8.5,2.25,1,1,0,0,0,-1],[2,10,9.5,2.25,1,1,0,0,0,-1],[2,11,10.5,2.25,1,1,0,0,0,-1],[2,12,11.5,2.25,1,1,0,0,0,-1],[2,13,12.5,2.25,1,1,0,0,0,-1],[2,14,13.5,2.25,1.5,1,0,0,0,-1],[2,15,15.3,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,8,7.75,3.25,1,1,0,0,0,-1],[3,9,8.75,3.25,1,1,0,0,0,-1],[3,10,9.75,3.25,1,1,0,0,0,-1],[3,11,10.75,3.25,1,1,0,0,0,-1],[3,12,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,2.25,1,0,0,0,-1],[3,15,15.3,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,8,7.25,4.25,1,1,0,0,0,-1],[4,9,8.25,4.25,1,1,0,0,0,-1],[4,10,9.25,4.25,1,1,0,0,0,-1],[4,11,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.15,4.4,1,1,0,0,0,-1],[4,15,15.3,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1,1,0,0,0,-1],[5,11,11,5.25,1,1,0,0,0,-1],[5,12,12,5.25,1,1,0,0,0,-1],[5,13,13.15,5.4,1,1,0,0,0,-1],[5,14,14.15,5.4,1,1,0,0,0,-1],[5,15,15.15,5.4,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[0,16,18.5,0,1,1,0,0,0,-1],[0,17,19.5,0,1,1,0,0,0,-1],[0,18,20.5,0,1,1,0,0,0,-1],[0,19,21.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,14,13,1,2,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.5,2,1.5,1,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,13,12.75,3,2.25,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,13,12.25,4,1.75,1,0,0,0,-1],[4,14,14,4,1,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,10,10,5,1,1,0,0,0,-1],[5,11,11,5,1,1,0,0,0,-1],[5,12,12,5,1,1,0,0,0,-1],[5,13,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,1,1,0,0,0,-1],[1,14,14,1,1,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,13,15,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1,1,0,0,0,-1],[4,13,13.25,4,1,1,0,0,0,-1],[4,14,14.25,4,1,1,0,0,0,-1],[5,0,0,5,1,1,0,0,0,-1],[5,1,1,5,1,1,0,0,0,-1],[5,2,2,5,1,1,0,0,0,-1],[5,3,3,5,1,1,0,0,0,-1],[5,6,4,5,5,1,0,0,0,-1],[5,8,9,5,1,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [15,5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,2,1,0,0,0,-1],[1,0,0,1,1.5,1,0,0,0,-1],[1,1,1.5,1,1,1,0,0,0,-1],[1,2,2.5,1,1,1,0,0,0,-1],[1,3,3.5,1,1,1,0,0,0,-1],[1,4,4.5,1,1,1,0,0,0,-1],[1,5,5.5,1,1,1,0,0,0,-1],[1,6,6.5,1,1,1,0,0,0,-1],[1,7,7.5,1,1,1,0,0,0,-1],[1,8,8.5,1,1,1,0,0,0,-1],[1,9,9.5,1,1,1,0,0,0,-1],[1,10,10.5,1,1,1,0,0,0,-1],[1,11,11.5,1,1,1,0,0,0,-1],[1,12,12.5,1,1,1,0,0,0,-1],[1,13,13.5,1,1.5,1,0,0,0,-1],[2,0,0,2,1.75,1,0,0,0,-1],[2,1,1.75,2,1,1,0,0,0,-1],[2,2,2.75,2,1,1,0,0,0,-1],[2,3,3.75,2,1,1,0,0,0,-1],[2,4,4.75,2,1,1,0,0,0,-1],[2,5,5.75,2,1,1,0,0,0,-1],[2,6,6.75,2,1,1,0,0,0,-1],[2,7,7.75,2,1,1,0,0,0,-1],[2,8,8.75,2,1,1,0,0,0,-1],[2,9,9.75,2,1,1,0,0,0,-1],[2,10,10.75,2,1,1,0,0,0,-1],[2,11,11.75,2,1,1,0,0,0,-1],[2,12,12.75,2,2.25,1,0,0,0,-1],[3,0,0,3,2.25,1,0,0,0,-1],[3,2,2.25,3,1,1,0,0,0,-1],[3,3,3.25,3,1,1,0,0,0,-1],[3,4,4.25,3,1,1,0,0,0,-1],[3,5,5.25,3,1,1,0,0,0,-1],[3,6,6.25,3,1,1,0,0,0,-1],[3,7,7.25,3,1,1,0,0,0,-1],[3,8,8.25,3,1,1,0,0,0,-1],[3,9,9.25,3,1,1,0,0,0,-1],[3,10,10.25,3,1,1,0,0,0,-1],[3,12,11.25,3,1,1,0,0,0,-1],[3,13,12.25,3,2.75,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1.25,1,0,0,0,-1],[4,2,2.5,4,1.25,1,0,0,0,-1],[4,6,3.75,4,6.25,1,0,0,0,-1],[4,10,10,4,1.25,1,0,0,0,-1],[4,11,11.25,4,1.25,1,0,0,0,-1],[4,12,12.5,4,1.25,1,0,0,0,-1],[4,13,13.75,4,1.25,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[1,14,14,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[1,16,16.25,1.25,1,1,0,0,0,-1],[1,17,17.25,1.25,1,1,0,0,0,-1],[1,18,18.5,1.25,1,1,0,0,0,-1],[1,19,19.5,1.25,1,1,0,0,0,-1],[1,20,20.5,1.25,1,1,0,0,0,-1],[1,21,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,15,15.25,2.25,1,1,0,0,0,-1],[2,16,16.25,2.25,1,1,0,0,0,-1],[2,17,17.25,2.25,1,1,0,0,0,-1],[2,18,18.5,2.25,1,1,0,0,0,-1],[2,19,19.5,2.25,1,1,0,0,0,-1],[2,20,20.5,2.25,1,1,0,0,0,-1],[2,21,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,18,18.5,3.25,1,1,0,0,0,-1],[3,19,19.5,3.25,1,1,0,0,0,-1],[3,20,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,16,16.25,4.25,1,1,0,0,0,-1],[4,18,18.5,4.25,1,1,0,0,0,-1],[4,19,19.5,4.25,1,1,0,0,0,-1],[4,20,20.5,4.25,1,1,0,0,0,-1],[4,21,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,9,9,5.25,1,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,15,15.25,5.25,1,1,0,0,0,-1],[5,16,16.25,5.25,1,1,0,0,0,-1],[5,17,17.25,5.25,1,1,0,0,0,-1],[5,18,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[3,13,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,9,9,5.25,1,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [5,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[2,0,0,2,1,1,0,0,0,-1],[2,1,1,2,1,1,0,0,0,-1],[2,2,2,2,1,1,0,0,0,-1],[2,3,3,2,1,1,0,0,0,-1],[2,4,4,2,1,2,0,0,0,-1],[3,0,0,3,1,1,0,0,0,-1],[3,1,1,3,1,1,0,0,0,-1],[3,2,2,3,1,1,0,0,0,-1],[3,3,3,3,1,1,0,0,0,-1],[4,0,0,4,1,1,0,0,0,-1],[4,1,1,4,1,1,0,0,0,-1],[4,2,2,4,1,1,0,0,0,-1],[4,3,3,4,1,1,0,0,0,-1],[4,4,4,4,1,2,0,0,0,-1],[5,0,0,5,1,1,0,0,0,-1],[5,2,1,5,2,1,0,0,0,-1],[5,3,3,5,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,15,15.25,0,1,1,0,0,0,-1],[0,16,16.25,0,1,1,0,0,0,-1],[0,17,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[1,14,14,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[1,16,16.25,1.25,1,1,0,0,0,-1],[1,17,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,15,15.25,2.25,1,1,0,0,0,-1],[2,16,16.25,2.25,1,1,0,0,0,-1],[2,17,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,16,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,9,9,5.25,1,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,15,15.25,5.25,1,1,0,0,0,-1],[5,16,16.25,5.25,1,1,0,0,0,-1],[5,17,17.25,5.25,1,1,0,0,0,-1]]], + [16,5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,2,1,0,0,0,-1],[0,14,15,0,1,1,0,0,0,-1],[1,0,0,1,1.5,1,0,0,0,-1],[1,1,1.5,1,1,1,0,0,0,-1],[1,2,2.5,1,1,1,0,0,0,-1],[1,3,3.5,1,1,1,0,0,0,-1],[1,4,4.5,1,1,1,0,0,0,-1],[1,5,5.5,1,1,1,0,0,0,-1],[1,6,6.5,1,1,1,0,0,0,-1],[1,7,7.5,1,1,1,0,0,0,-1],[1,8,8.5,1,1,1,0,0,0,-1],[1,9,9.5,1,1,1,0,0,0,-1],[1,10,10.5,1,1,1,0,0,0,-1],[1,11,11.5,1,1,1,0,0,0,-1],[1,12,12.5,1,1,1,0,0,0,-1],[1,13,13.5,1,1.5,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.75,1,0,0,0,-1],[2,1,1.75,2,1,1,0,0,0,-1],[2,2,2.75,2,1,1,0,0,0,-1],[2,3,3.75,2,1,1,0,0,0,-1],[2,4,4.75,2,1,1,0,0,0,-1],[2,5,5.75,2,1,1,0,0,0,-1],[2,6,6.75,2,1,1,0,0,0,-1],[2,7,7.75,2,1,1,0,0,0,-1],[2,8,8.75,2,1,1,0,0,0,-1],[2,9,9.75,2,1,1,0,0,0,-1],[2,10,10.75,2,1,1,0,0,0,-1],[2,11,11.75,2,1,1,0,0,0,-1],[2,13,12.75,2,2.25,1,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,2.25,1,0,0,0,-1],[3,2,2.25,3,1,1,0,0,0,-1],[3,3,3.25,3,1,1,0,0,0,-1],[3,4,4.25,3,1,1,0,0,0,-1],[3,5,5.25,3,1,1,0,0,0,-1],[3,6,6.25,3,1,1,0,0,0,-1],[3,7,7.25,3,1,1,0,0,0,-1],[3,8,8.25,3,1,1,0,0,0,-1],[3,9,9.25,3,1,1,0,0,0,-1],[3,10,10.25,3,1,1,0,0,0,-1],[3,11,11.25,3,1,1,0,0,0,-1],[3,12,12.25,3,1.75,1,0,0,0,-1],[3,13,14,3,1,1,0,0,0,-1],[3,14,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1.25,1,0,0,0,-1],[4,2,2.5,4,1.25,1,0,0,0,-1],[4,6,3.75,4,6.25,1,0,0,0,-1],[4,9,10,4,1,1,0,0,0,-1],[4,10,11,4,1,1,0,0,0,-1],[4,11,12,4,1,1,0,0,0,-1],[4,12,13,4,1,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1]]], + [16,5,[[0,0,0,0,1,1,0,0,-0.25,-1],[0,1,1,0,1,1,0,0,-0.25,-1],[0,2,2,0,1,1,0,0,-0.25,-1],[0,3,3,0,1,1,0,0,-0.25,-1],[0,4,4,0,1,1,0,0,-0.25,-1],[0,5,5,0,1,1,0,0,-0.25,-1],[0,6,6,0,1,1,0,0,-0.25,-1],[0,7,7,0,1,1,0,0,-0.25,-1],[0,8,8,0,1,1,0,0,-0.25,-1],[0,9,9,0,1,1,0,0,-0.25,-1],[0,10,10,0,1,1,0,0,-0.25,-1],[0,11,11,0,1,1,0,0,-0.25,-1],[0,12,12,0,1,1,0,0,-0.25,-1],[0,13,13,0,2,1,0,0,-0.25,-1],[0,14,15,0,1,1,0,0,-0.25,-1],[1,0,0,1,1.5,1,0,0,-0.25,-1],[1,1,1.5,1,1,1,0,0,-0.25,-1],[1,2,2.5,1,1,1,0,0,-0.25,-1],[1,3,3.5,1,1,1,0,0,-0.25,-1],[1,4,4.5,1,1,1,0,0,-0.25,-1],[1,5,5.5,1,1,1,0,0,-0.25,-1],[1,6,6.5,1,1,1,0,0,-0.25,-1],[1,7,7.5,1,1,1,0,0,-0.25,-1],[1,8,8.5,1,1,1,0,0,-0.25,-1],[1,9,9.5,1,1,1,0,0,-0.25,-1],[1,10,10.5,1,1,1,0,0,-0.25,-1],[1,11,11.5,1,1,1,0,0,-0.25,-1],[1,12,12.5,1,1,1,0,0,-0.25,-1],[1,13,13.5,1,1.5,1,0,0,-0.25,-1],[1,14,15,1,1,1,0,0,-0.25,-1],[2,0,0,2,1.75,1,0,0,-0.25,-1],[2,1,1.75,2,1,1,0,0,-0.25,-1],[2,2,2.75,2,1,1,0,0,-0.25,-1],[2,3,3.75,2,1,1,0,0,-0.25,-1],[2,4,4.75,2,1,1,0,0,-0.25,-1],[2,5,5.75,2,1,1,0,0,-0.25,-1],[2,6,6.75,2,1,1,0,0,-0.25,-1],[2,7,7.75,2,1,1,0,0,-0.25,-1],[2,8,8.75,2,1,1,0,0,-0.25,-1],[2,9,9.75,2,1,1,0,0,-0.25,-1],[2,10,10.75,2,1,1,0,0,-0.25,-1],[2,11,11.75,2,1,1,0,0,-0.25,-1],[2,12,12.75,2,2.25,1,0,0,-0.25,-1],[2,14,15,2,1,1,0,0,-0.25,-1],[3,0,0,3,2.25,1,0,0,-0.25,-1],[3,2,2.25,3,1,1,0,0,-0.25,-1],[3,3,3.25,3,1,1,0,0,-0.25,-1],[3,4,4.25,3,1,1,0,0,-0.25,-1],[3,5,5.25,3,1,1,0,0,-0.25,-1],[3,6,6.25,3,1,1,0,0,-0.25,-1],[3,7,7.25,3,1,1,0,0,-0.25,-1],[3,8,8.25,3,1,1,0,0,-0.25,-1],[3,9,9.25,3,1,1,0,0,-0.25,-1],[3,10,10.25,3,1,1,0,0,-0.25,-1],[3,11,11.25,3,1,1,0,0,-0.25,-1],[3,12,12.25,3,1.75,1,0,0,-0.25,-1],[3,13,14,3,1,1,0,0,-0.25,-1],[3,14,15,3,1,1,0,0,-0.25,-1],[4,0,0,4,1.25,1,0,0,-0.25,-1],[4,1,1.25,4,1.25,1,0,0,-0.25,-1],[4,2,2.5,4,1.25,1,0,0,-0.25,-1],[4,6,3.75,4,6.25,1,0,0,-0.25,-1],[4,9,10,4,1,1,0,0,-0.25,-1],[4,10,11,4,1,1,0,0,-0.25,-1],[4,11,12,4,1,1,0,0,-0.25,-1],[4,12,13,4,1,1,0,0,-0.25,-1],[4,13,14,4,1,1,0,0,-0.25,-1],[4,14,15,4,1,1,0,0,-0.25,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [19.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.4,0,1,1,0,0,0,-1],[0,2,2.4,0,1,1,0,0,0,-1],[0,3,3.4,0,1,1,0,0,0,-1],[0,4,4.4,0,1,1,0,0,0,-1],[0,5,5.8,0,1,1,0,0,0,-1],[0,6,6.8,0,1,1,0,0,0,-1],[0,7,7.8,0,1,1,0,0,0,-1],[0,8,8.8,0,1,1,0,0,0,-1],[0,9,10.2,0,1,1,0,0,0,-1],[0,10,11.2,0,1,1,0,0,0,-1],[0,11,12.2,0,1,1,0,0,0,-1],[0,12,13.2,0,1,1,0,0,0,-1],[0,16,17.45,0,1,1,0,0,0,-1],[0,17,18.45,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,15,15.5,3.25,1,1,0,0,0,-1],[3,16,16.5,3.25,1,1,0,0,0,-1],[3,17,17.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1],[5,15,16.5,5.25,1,1,0,0,0,-1],[5,16,17.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[3,14,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,15,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[4,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,14,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,14,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [16.25,5.5,[[0,0,0,0.25,1,1,0,0,0.25,-1],[0,1,1,0.25,1,1,0,0,0.25,-1],[0,2,2,0.25,1,1,0,0,0.25,-1],[0,3,3,0.25,1,1,0,0,0.25,-1],[0,4,4,0.25,1,1,0,0,0.25,-1],[0,5,5,0.25,1,1,0,0,0.25,-1],[0,6,6,0.25,1,1,0,0,0.25,-1],[0,7,7,0.25,1,1,0,0,0.25,-1],[0,8,8,0.25,1,1,0,0,0.25,-1],[0,9,9,0.25,1,1,0,0,0.25,-1],[0,10,10,0.25,1,1,0,0,0.25,-1],[0,11,11,0.25,1,1,0,0,0.25,-1],[0,12,12,0.25,1,1,0,0,0.25,-1],[0,13,13,0.25,2,1,0,0,0.25,-1],[0,14,15.25,0,1,1,0,0,0.25,0],[1,0,0,1.25,1.5,1,0,0,0.25,-1],[1,1,1.5,1.25,1,1,0,0,0.25,-1],[1,2,2.5,1.25,1,1,0,0,0.25,-1],[1,3,3.5,1.25,1,1,0,0,0.25,-1],[1,4,4.5,1.25,1,1,0,0,0.25,-1],[1,5,5.5,1.25,1,1,0,0,0.25,-1],[1,6,6.5,1.25,1,1,0,0,0.25,-1],[1,7,7.5,1.25,1,1,0,0,0.25,-1],[1,8,8.5,1.25,1,1,0,0,0.25,-1],[1,9,9.5,1.25,1,1,0,0,0.25,-1],[1,10,10.5,1.25,1,1,0,0,0.25,-1],[1,11,11.5,1.25,1,1,0,0,0.25,-1],[1,12,12.5,1.25,1,1,0,0,0.25,-1],[1,13,13.5,1.25,1.5,1,0,0,0.25,-1],[1,14,15.25,1.25,1,1,0,0,0.25,-1],[2,0,0,2.25,1.75,1,0,0,0.25,-1],[2,1,1.75,2.25,1,1,0,0,0.25,-1],[2,2,2.75,2.25,1,1,0,0,0.25,-1],[2,3,3.75,2.25,1,1,0,0,0.25,-1],[2,4,4.75,2.25,1,1,0,0,0.25,-1],[2,5,5.75,2.25,1,1,0,0,0.25,-1],[2,6,6.75,2.25,1,1,0,0,0.25,-1],[2,7,7.75,2.25,1,1,0,0,0.25,-1],[2,8,8.75,2.25,1,1,0,0,0.25,-1],[2,9,9.75,2.25,1,1,0,0,0.25,-1],[2,10,10.75,2.25,1,1,0,0,0.25,-1],[2,11,11.75,2.25,1,1,0,0,0.25,-1],[2,13,12.75,2.25,2.25,1,0,0,0.25,-1],[2,14,15.25,2.25,1,1,0,0,0.25,-1],[3,0,0,3.25,2.25,1,0,0,0.25,-1],[3,2,2.25,3.25,1,1,0,0,0.25,-1],[3,3,3.25,3.25,1,1,0,0,0.25,-1],[3,4,4.25,3.25,1,1,0,0,0.25,-1],[3,5,5.25,3.25,1,1,0,0,0.25,-1],[3,6,6.25,3.25,1,1,0,0,0.25,-1],[3,7,7.25,3.25,1,1,0,0,0.25,-1],[3,8,8.25,3.25,1,1,0,0,0.25,-1],[3,9,9.25,3.25,1,1,0,0,0.25,-1],[3,10,10.25,3.25,1,1,0,0,0.25,-1],[3,11,11.25,3.25,1,1,0,0,0.25,-1],[3,12,12.25,3.25,1.75,1,0,0,0.25,-1],[3,13,14.25,3.5,1,1,0,0,0.25,-1],[4,0,0,4.25,1.25,1,0,0,0.25,-1],[4,1,1.25,4.25,1.25,1,0,0,0.25,-1],[4,2,2.5,4.25,1.25,1,0,0,0.25,-1],[4,6,3.75,4.25,6.25,1,0,0,0.25,-1],[4,9,10,4.25,1,1,0,0,0.25,-1],[4,10,11,4.25,1,1,0,0,0.25,-1],[4,11,12,4.25,1,1,0,0,0.25,-1],[4,12,13.25,4.5,1,1,0,0,0.25,-1],[4,13,14.25,4.5,1,1,0,0,0.25,-1],[4,14,15.25,4.5,1,1,0,0,0.25,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [16,5,[[0,0,0,0,1,1,0,0,-0.25,-1],[0,1,1,0,1,1,0,0,-0.25,-1],[0,2,2,0,1,1,0,0,-0.25,-1],[0,3,3,0,1,1,0,0,-0.25,-1],[0,4,4,0,1,1,0,0,-0.25,-1],[0,5,5,0,1,1,0,0,-0.25,-1],[0,6,6,0,1,1,0,0,-0.25,-1],[0,7,7,0,1,1,0,0,-0.25,-1],[0,8,8,0,1,1,0,0,-0.25,-1],[0,9,9,0,1,1,0,0,-0.25,-1],[0,10,10,0,1,1,0,0,-0.25,-1],[0,11,11,0,1,1,0,0,-0.25,-1],[0,12,12,0,1,1,0,0,-0.25,-1],[0,13,13,0,2,1,0,0,-0.25,-1],[0,14,15,0,1,1,0,0,-0.25,-1],[1,0,0,1,1.5,1,0,0,-0.25,-1],[1,1,1.5,1,1,1,0,0,-0.25,-1],[1,2,2.5,1,1,1,0,0,-0.25,-1],[1,3,3.5,1,1,1,0,0,-0.25,-1],[1,4,4.5,1,1,1,0,0,-0.25,-1],[1,5,5.5,1,1,1,0,0,-0.25,-1],[1,6,6.5,1,1,1,0,0,-0.25,-1],[1,7,7.5,1,1,1,0,0,-0.25,-1],[1,8,8.5,1,1,1,0,0,-0.25,-1],[1,9,9.5,1,1,1,0,0,-0.25,-1],[1,10,10.5,1,1,1,0,0,-0.25,-1],[1,11,11.5,1,1,1,0,0,-0.25,-1],[1,12,12.5,1,1,1,0,0,-0.25,-1],[1,13,13.75,1,1.25,2,0,0,-0.25,-1],[1,14,15,1,1,1,0,0,-0.25,-1],[2,0,0,2,1.75,1,0,0,-0.25,-1],[2,1,1.75,2,1,1,0,0,-0.25,-1],[2,2,2.75,2,1,1,0,0,-0.25,-1],[2,3,3.75,2,1,1,0,0,-0.25,-1],[2,4,4.75,2,1,1,0,0,-0.25,-1],[2,5,5.75,2,1,1,0,0,-0.25,-1],[2,6,6.75,2,1,1,0,0,-0.25,-1],[2,7,7.75,2,1,1,0,0,-0.25,-1],[2,8,8.75,2,1,1,0,0,-0.25,-1],[2,9,9.75,2,1,1,0,0,-0.25,-1],[2,10,10.75,2,1,1,0,0,-0.25,-1],[2,11,11.75,2,1,1,0,0,-0.25,-1],[2,12,12.75,2,1,1,0,0,-0.25,-1],[2,14,15,2,1,1,0,0,-0.25,-1],[3,0,0,3,1.25,1,0,0,-0.25,-1],[3,1,1.25,3,1,1,0,0,-0.25,-1],[3,2,2.25,3,1,1,0,0,-0.25,-1],[3,3,3.25,3,1,1,0,0,-0.25,-1],[3,4,4.25,3,1,1,0,0,-0.25,-1],[3,5,5.25,3,1,1,0,0,-0.25,-1],[3,6,6.25,3,1,1,0,0,-0.25,-1],[3,7,7.25,3,1,1,0,0,-0.25,-1],[3,8,8.25,3,1,1,0,0,-0.25,-1],[3,9,9.25,3,1,1,0,0,-0.25,-1],[3,10,10.25,3,1,1,0,0,-0.25,-1],[3,11,11.25,3,1,1,0,0,-0.25,-1],[3,12,12.25,3,1.75,1,0,0,-0.25,-1],[3,13,14,3,1,1,0,0,-0.25,-1],[3,14,15,3,1,1,0,0,-0.25,-1],[4,0,0,4,1.25,1,0,0,-0.25,-1],[4,1,1.25,4,1.25,1,0,0,-0.25,-1],[4,2,2.5,4,1.25,1,0,0,-0.25,-1],[4,6,3.75,4,6.25,1,0,0,-0.25,-1],[4,9,10,4,1,1,0,0,-0.25,-1],[4,10,11,4,1,1,0,0,-0.25,-1],[4,11,12,4,1,1,0,0,-0.25,-1],[4,12,13,4,1,1,0,0,-0.25,-1],[4,13,14,4,1,1,0,0,-0.25,-1],[4,14,15,4,1,1,0,0,-0.25,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.5,0,1,1,0,0,0,-1],[0,16,17.5,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.5,1.25,1,1,0,0,0,-1],[1,16,17.5,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.5,2.25,1,1,0,0,0,-1],[2,16,17.5,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[3,15,16.5,3.25,1,1,0,0,0,-1],[3,16,17.5,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[4,15,16.5,4.25,1,1,0,0,0,-1],[4,16,17.5,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1],[5,16,16.5,5.25,2,1,0,0,0,-1],[5,17,18.5,5.25,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,13,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,19,20.5,5.25,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,14,13,1,2,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,13,12.75,3,1,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,13,12.25,4,1.75,1,0,0,0,-1],[4,14,14,4,1,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,10,10,5,1,1,0,0,0,-1],[5,11,11,5,1,1,0,0,0,-1],[5,12,12,5,1,1,0,0,0,-1],[5,13,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.5,2,1.5,1,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,2.25,1,0,0,0,-1],[3,13,15,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [16,5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,2,1,0,0,0,-1],[0,14,15,0,1,1,0,0,0,0],[1,0,0,1,1.5,1,0,0,0,-1],[1,1,1.5,1,1,1,0,0,0,-1],[1,2,2.5,1,1,1,0,0,0,-1],[1,3,3.5,1,1,1,0,0,0,-1],[1,4,4.5,1,1,1,0,0,0,-1],[1,5,5.5,1,1,1,0,0,0,-1],[1,6,6.5,1,1,1,0,0,0,-1],[1,7,7.5,1,1,1,0,0,0,-1],[1,8,8.5,1,1,1,0,0,0,-1],[1,9,9.5,1,1,1,0,0,0,-1],[1,10,10.5,1,1,1,0,0,0,-1],[1,11,11.5,1,1,1,0,0,0,-1],[1,12,12.5,1,1,1,0,0,0,-1],[1,13,13.5,1,1.5,1,0,0,0,-1],[1,14,15,1,1,1,0,0,0,-1],[2,0,0,2,1.75,1,0,0,0,-1],[2,1,1.75,2,1,1,0,0,0,-1],[2,2,2.75,2,1,1,0,0,0,-1],[2,3,3.75,2,1,1,0,0,0,-1],[2,4,4.75,2,1,1,0,0,0,-1],[2,5,5.75,2,1,1,0,0,0,-1],[2,6,6.75,2,1,1,0,0,0,-1],[2,7,7.75,2,1,1,0,0,0,-1],[2,8,8.75,2,1,1,0,0,0,-1],[2,9,9.75,2,1,1,0,0,0,-1],[2,10,10.75,2,1,1,0,0,0,-1],[2,11,11.75,2,1,1,0,0,0,-1],[2,12,12.75,2,2.25,1,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,2.25,1,0,0,0,-1],[3,2,2.25,3,1,1,0,0,0,-1],[3,3,3.25,3,1,1,0,0,0,-1],[3,4,4.25,3,1,1,0,0,0,-1],[3,5,5.25,3,1,1,0,0,0,-1],[3,6,6.25,3,1,1,0,0,0,-1],[3,7,7.25,3,1,1,0,0,0,-1],[3,8,8.25,3,1,1,0,0,0,-1],[3,9,9.25,3,1,1,0,0,0,-1],[3,10,10.25,3,1,1,0,0,0,-1],[3,11,11.25,3,1,1,0,0,0,-1],[3,12,12.25,3,1.75,1,0,0,0,-1],[3,13,14,3,1,1,0,0,0,-1],[3,14,15,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1.25,1,0,0,0,-1],[4,2,2.5,4,1.25,1,0,0,0,-1],[4,6,3.75,4,6.25,1,0,0,0,-1],[4,9,10,4,1.25,1,0,0,0,-1],[4,10,11.25,4,1.25,1,0,0,0,-1],[4,12,13,4,1,1,0,0,0,-1],[4,13,14,4,1,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,2.25,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1.75,1,0,0,0,-1],[4,13,14.25,4.5,1,1,0,0,0,-1],[4,14,15.5,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,1,1,0,0,0,-1],[1,14,14,1,1,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,13,12.75,3,1,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,13,12.25,4,1,1,0,0,0,-1],[4,14,13.25,4,1.75,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1,1,0,0,0,-1],[5,2,2.25,5,1.25,1,0,0,0,-1],[5,3,3.5,5,1,1,0,0,0,-1],[5,6,4.5,5,4.5,1,0,0,0,-1],[5,9,9,5,1,1,0,0,0,-1],[5,10,10,5,1,1,0,0,0,-1],[5,11,11,5,1,1,0,0,0,-1],[5,12,12,5,1,1,0,0,0,-1],[5,13,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [16.5,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,14,15.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[4,15,15.5,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,13,15.25,0,1,1,0,0,0,-1],[0,14,16.25,0,1,1,0,0,0,-1],[0,15,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[3,12,13,1.25,1,1,0,0,0,-1],[1,13,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[3,14,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[3,15,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,13,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,8,9,5.25,1,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,13,15.25,5.25,1,1,0,0,0,-1],[5,14,16.25,5.25,1,1,0,0,0,-1],[5,15,17.25,5.25,1,1,0,0,0,-1]]], + [16.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,14,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1,1,0,0,0,-1],[4,14,14.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1,1,0,0,0,-1],[5,11,12.25,5.25,1,1,0,0,0,-1],[5,12,13.25,5.25,1,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1]]], + [19.85,6.785,[[0,0,0.5,0.053,1,1,0,0,0.053,0],[0,1,2,0.053,1,1,0,0,0.053,-1],[0,2,3.25,0.053,1,1,0,0,0.053,-1],[0,3,4.25,0.053,1,1,0,0,0.053,-1],[0,12,14.6,0.053,1,1,0,0,0.053,-1],[0,13,15.6,0.053,1,1,0,0,0.053,-1],[0,14,17.05,0.053,1,1,0,0,0.053,-1],[0,15,18.5,0.053,1,1,0,0,0.053,-1],[1,0,0.75,1.303,1,1,0,0,0.053,-1],[1,1,2.25,1.303,1,1,0,0,0.053,-1],[1,2,3.25,1.303,1,1,0,0,0.053,-1],[1,3,4.25,1.303,1,1,0,0,0.053,-1],[1,12,13.9,1.303,1,1,0,0,0.053,-1],[1,13,14.9,1.303,1,1,0,0,0.053,-1],[1,14,15.9,1.303,2,1,0,0,0.053,-1],[1,15,18.5,1.303,1,1,0,0,0.053,-1],[2,0,0.5,2.303,1,1,0,0,0.053,-1],[2,1,2,2.303,1.5,1,0,0,0.053,-1],[2,2,3.5,2.303,1,1,0,0,0.053,-1],[2,12,14.4,2.303,1,1,0,0,0.053,-1],[2,13,15.4,2.303,1,1,0,0,0.053,-1],[2,14,16.4,2.303,1.75,1,0,0,0.053,-1],[2,15,18.65,2.303,1,1,0,0,0.053,-1],[3,0,0.25,3.303,1,1,0,0,0.053,-1],[3,1,1.75,3.303,1.75,1,0,0,0.053,-1],[3,2,3.5,3.303,1,1,0,0,0.053,-1],[3,11,14.1,3.303,1,1,0,0,0.053,-1],[3,12,15.1,3.303,1,1,0,0,0.053,-1],[3,13,16.1,3.303,2.25,1,0,0,0.053,-1],[3,15,18.85,3.303,1,1,0,0,0.053,-1],[4,0,0,4.303,1,1,0,0,0.053,-1],[4,1,1.5,4.303,2.25,1,0,0,0.053,-1],[4,3,3.75,4.303,1,1,0,0,0.053,-1],[4,13,14.7,4.303,1,1,0,0,0.053,-1],[4,14,15.7,4.303,1.75,1,0,0,0.053,-1],[4,15,17.7,4.553,1,1,0,0,0.053,-1],[5,0,0,5.303,1,1,0,0,0.053,-1],[5,1,1.5,5.303,1.25,1,0,0,0.053,-1],[5,2,2.75,5.303,1.25,1,0,0,0.053,-1],[5,13,16.7,5.553,1,1,0,0,0.053,-1],[5,14,17.7,5.553,1,1,0,0,0.053,-1],[5,15,18.7,5.553,1,1,0,0,0.053,-1],[0,4,5.4,-0.497,1,1,6,0,0.053,-1],[0,5,6.4,-0.497,1,1,6,0,0.053,-1],[0,6,7.65,-0.497,1,1,6,0,0.053,-1],[0,7,8.65,-0.497,1,1,6,0,0.053,-1],[1,4,5.55,0.753,1,1,6,0,0.053,-1],[1,5,6.55,0.753,1,1,6,0,0.053,-1],[1,6,7.55,0.753,1,1,6,0,0.053,-1],[1,7,8.55,0.753,1,1,6,0,0.053,-1],[2,3,4.9,1.753,1,1,6,0,0.053,-1],[2,4,5.9,1.753,1,1,6,0,0.053,-1],[2,5,6.9,1.753,1,1,6,0,0.053,-1],[2,6,7.9,1.753,1,1,6,0,0.053,-1],[3,3,5,2.753,1,1,6,0,0.053,-1],[3,4,6,2.753,1,1,6,0,0.053,-1],[3,5,7,2.753,1,1,6,0,0.053,-1],[3,6,8,2.753,1,1,6,0,0.053,-1],[4,4,5.35,3.753,1,1,6,0,0.053,-1],[4,5,6.35,3.753,1,1,6,0,0.053,-1],[4,6,7.35,3.753,1,1,6,0,0.053,-1],[4,7,8.35,3.753,1,1,6,0,0.053,-1],[5,5,5.35,4.753,1.25,1,6,0,0.053,-1],[5,6,6.6,4.753,2.25,1,6,0,0.053,-1],[5,7,8.85,4.753,1,1,6,0,0.053,-1],[0,8,10.05,1.503,1,1,-6,0,0.053,-1],[0,9,11.05,1.503,1,1,-6,0,0.053,-1],[0,10,12.3,1.503,1,1,-6,0,0.053,-1],[0,11,13.3,1.503,1,1,-6,0,0.053,-1],[1,8,9.4,2.753,1,1,-6,0,0.053,-1],[1,9,10.4,2.753,1,1,-6,0,0.053,-1],[1,10,11.4,2.753,1,1,-6,0,0.053,-1],[1,11,12.4,2.753,1,1,-6,0,0.053,-1],[2,7,8.9,3.753,1,1,-6,0,0.053,-1],[2,8,9.9,3.753,1,1,-6,0,0.053,-1],[2,9,10.9,3.753,1,1,-6,0,0.053,-1],[2,10,11.9,3.753,1,1,-6,0,0.053,-1],[2,11,12.9,3.753,1,1,-6,0,0.053,-1],[3,7,9.4,4.753,1,1,-6,0,0.053,-1],[3,8,10.4,4.753,1,1,-6,0,0.053,-1],[3,9,11.4,4.753,1,1,-6,0,0.053,-1],[3,10,12.4,4.753,1,1,-6,0,0.053,-1],[4,8,8.85,5.753,1,1,-6,0,0.053,-1],[4,9,9.85,5.753,1,1,-6,0,0.053,-1],[4,10,10.85,5.753,1,1,-6,0,0.053,-1],[4,11,11.85,5.753,1,1,-6,0,0.053,-1],[4,12,12.85,5.753,1,1,-6,0,0.053,-1],[5,8,8.85,6.753,2.55,1,-6,0,0.053,-1],[5,9,11.4,6.753,1,1,-6,0,0.053,-1],[5,10,12.4,6.753,1,1,-6,0,0.053,-1]]], + [16,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,1,1,0,0,0,-1],[1,14,14,1,1,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,13,13.75,2,1.25,2,0,0,0,-1],[2,14,15,2,1,1,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,13,15,3,1,1,0,0,0,-1],[4,0,0,4,2.25,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1,1,0,0,0,-1],[4,13,13.25,4,1.75,1,0,0,0,-1],[4,14,15,4,1,1,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1,1,0,0,0,-1],[5,2,2.25,5,1.25,1,0,0,0,-1],[5,3,3.5,5,1,1,0,0,0,-1],[5,6,4.5,5,4.5,1,0,0,0,-1],[5,8,9,5,1,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,13,14,5,1,1,0,0,0,-1],[5,14,15,5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,14,13.75,2,1.25,2,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1.75,1,0,0,0,-1],[4,14,14,4,1,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.5,0,1,1,0,0,0,-1],[0,10,11,0,1,1,0,0,0,-1],[0,11,12,0,1,1,0,0,0,-1],[0,12,13,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1.25,1,0,0,0,-1],[4,1,1.25,4.25,1,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,16,18.5,0,1,1,0,0,0,-1],[0,17,19.5,0,1,1,0,0,0,-1],[0,18,20.5,0,1,1,0,0,0,-1],[0,19,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [19,6,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4,0,1,1,0,0,0,-1],[0,5,5,0,1,1,0,0,0,-1],[0,6,6,0,1,1,0,0,0,-1],[0,7,7,0,1,1,0,0,0,-1],[0,8,8,0,1,1,0,0,0,-1],[0,9,9,0,1,1,0,0,0,-1],[0,10,10,0,1,1,0,0,0,-1],[0,11,11,0,1,1,0,0,0,-1],[0,12,12,0,1,1,0,0,0,-1],[0,13,13,0,1,1,0,0,0,-1],[0,14,14,0,1,1,0,0,0,-1],[0,15,15,0,1,1,0,0,0,-1],[0,16,16,0,1,1,0,0,0,-1],[0,17,17,0,1,1,0,0,0,-1],[0,18,18,0,1,1,0,0,0,-1],[1,0,0,1,1,1,0,0,0,-1],[1,1,1,1,1,1,0,0,0,-1],[1,2,2,1,1,1,0,0,0,-1],[1,3,3,1,1,1,0,0,0,-1],[1,4,4,1,1,1,0,0,0,-1],[1,5,5,1,1,1,0,0,0,-1],[1,6,6,1,1,1,0,0,0,-1],[1,7,7,1,1,1,0,0,0,-1],[1,8,8,1,1,1,0,0,0,-1],[1,9,9,1,1,1,0,0,0,-1],[1,10,10,1,1,1,0,0,0,-1],[1,11,11,1,1,1,0,0,0,-1],[1,12,12,1,1,1,0,0,0,-1],[1,13,13,1,2,1,0,0,0,-1],[1,15,15,1,1,1,0,0,0,-1],[1,16,16,1,1,1,0,0,0,-1],[1,17,17,1,1,1,0,0,0,-1],[1,18,18,1,1,1,0,0,0,-1],[2,0,0,2,1.5,1,0,0,0,-1],[2,1,1.5,2,1,1,0,0,0,-1],[2,2,2.5,2,1,1,0,0,0,-1],[2,3,3.5,2,1,1,0,0,0,-1],[2,4,4.5,2,1,1,0,0,0,-1],[2,5,5.5,2,1,1,0,0,0,-1],[2,6,6.5,2,1,1,0,0,0,-1],[2,7,7.5,2,1,1,0,0,0,-1],[2,8,8.5,2,1,1,0,0,0,-1],[2,9,9.5,2,1,1,0,0,0,-1],[2,10,10.5,2,1,1,0,0,0,-1],[2,11,11.5,2,1,1,0,0,0,-1],[2,12,12.5,2,1,1,0,0,0,-1],[2,14,13.75,2,1.25,2,0,0,0,-1],[2,15,15,2,1,1,0,0,0,-1],[2,16,16,2,1,1,0,0,0,-1],[2,17,17,2,1,1,0,0,0,-1],[2,18,18,2,1,2,0,0,0,-1],[3,0,0,3,1.75,1,0,0,0,-1],[3,1,1.75,3,1,1,0,0,0,-1],[3,2,2.75,3,1,1,0,0,0,-1],[3,3,3.75,3,1,1,0,0,0,-1],[3,4,4.75,3,1,1,0,0,0,-1],[3,5,5.75,3,1,1,0,0,0,-1],[3,6,6.75,3,1,1,0,0,0,-1],[3,7,7.75,3,1,1,0,0,0,-1],[3,8,8.75,3,1,1,0,0,0,-1],[3,9,9.75,3,1,1,0,0,0,-1],[3,10,10.75,3,1,1,0,0,0,-1],[3,11,11.75,3,1,1,0,0,0,-1],[3,12,12.75,3,1,1,0,0,0,-1],[3,15,15,3,1,1,0,0,0,-1],[3,16,16,3,1,1,0,0,0,-1],[3,17,17,3,1,1,0,0,0,-1],[4,0,0,4,1.25,1,0,0,0,-1],[4,1,1.25,4,1,1,0,0,0,-1],[4,2,2.25,4,1,1,0,0,0,-1],[4,3,3.25,4,1,1,0,0,0,-1],[4,4,4.25,4,1,1,0,0,0,-1],[4,5,5.25,4,1,1,0,0,0,-1],[4,6,6.25,4,1,1,0,0,0,-1],[4,7,7.25,4,1,1,0,0,0,-1],[4,8,8.25,4,1,1,0,0,0,-1],[4,9,9.25,4,1,1,0,0,0,-1],[4,10,10.25,4,1,1,0,0,0,-1],[4,11,11.25,4,1,1,0,0,0,-1],[4,12,12.25,4,1,1,0,0,0,-1],[4,14,13.25,4,1.75,1,0,0,0,-1],[4,15,15,4,1,1,0,0,0,-1],[4,16,16,4,1,1,0,0,0,-1],[4,17,17,4,1,1,0,0,0,-1],[4,18,18,4,1,2,0,0,0,-1],[5,0,0,5,1.25,1,0,0,0,-1],[5,1,1.25,5,1.25,1,0,0,0,-1],[5,2,2.5,5,1.25,1,0,0,0,-1],[5,6,3.75,5,6.25,1,0,0,0,-1],[5,9,10,5,1,1,0,0,0,-1],[5,10,11,5,1,1,0,0,0,-1],[5,11,12,5,1,1,0,0,0,-1],[5,12,13,5,1,1,0,0,0,-1],[5,14,14,5,1,1,0,0,0,-1],[5,15,15,5,1,1,0,0,0,-1],[5,16,16,5,1,1,0,0,0,-1],[5,17,17,5,1,1,0,0,0,-1]]], + [15,5,[[0,0,0,0,1,1,0,0,-0.25,-1],[0,1,1,0,1,1,0,0,-0.25,-1],[0,2,2,0,1,1,0,0,-0.25,-1],[0,3,3,0,1,1,0,0,-0.25,-1],[0,4,4,0,1,1,0,0,-0.25,-1],[0,5,5,0,1,1,0,0,-0.25,-1],[0,6,6,0,1,1,0,0,-0.25,-1],[0,7,7,0,1,1,0,0,-0.25,-1],[0,8,8,0,1,1,0,0,-0.25,-1],[0,9,9,0,1,1,0,0,-0.25,-1],[0,10,10,0,1,1,0,0,-0.25,-1],[0,11,11,0,1,1,0,0,-0.25,-1],[0,12,12,0,1,1,0,0,-0.25,-1],[0,13,13,0,2,1,0,0,-0.25,-1],[1,0,0,1,1.5,1,0,0,-0.25,-1],[1,1,1.5,1,1,1,0,0,-0.25,-1],[1,2,2.5,1,1,1,0,0,-0.25,-1],[1,3,3.5,1,1,1,0,0,-0.25,-1],[1,4,4.5,1,1,1,0,0,-0.25,-1],[1,5,5.5,1,1,1,0,0,-0.25,-1],[1,6,6.5,1,1,1,0,0,-0.25,-1],[1,7,7.5,1,1,1,0,0,-0.25,-1],[1,8,8.5,1,1,1,0,0,-0.25,-1],[1,9,9.5,1,1,1,0,0,-0.25,-1],[1,10,10.5,1,1,1,0,0,-0.25,-1],[1,11,11.5,1,1,1,0,0,-0.25,-1],[1,12,12.5,1,1,1,0,0,-0.25,-1],[1,13,13.5,1,1.5,1,0,0,-0.25,-1],[2,0,0,2,1.75,1,0,0,-0.25,-1],[2,1,1.75,2,1,1,0,0,-0.25,-1],[2,2,2.75,2,1,1,0,0,-0.25,-1],[2,3,3.75,2,1,1,0,0,-0.25,-1],[2,4,4.75,2,1,1,0,0,-0.25,-1],[2,5,5.75,2,1,1,0,0,-0.25,-1],[2,6,6.75,2,1,1,0,0,-0.25,-1],[2,7,7.75,2,1,1,0,0,-0.25,-1],[2,8,8.75,2,1,1,0,0,-0.25,-1],[2,9,9.75,2,1,1,0,0,-0.25,-1],[2,10,10.75,2,1,1,0,0,-0.25,-1],[2,11,11.75,2,1,1,0,0,-0.25,-1],[2,12,12.75,2,2.25,1,0,0,-0.25,-1],[3,0,0,3,2.25,1,0,0,-0.25,-1],[3,2,2.25,3,1,1,0,0,-0.25,-1],[3,3,3.25,3,1,1,0,0,-0.25,-1],[3,4,4.25,3,1,1,0,0,-0.25,-1],[3,5,5.25,3,1,1,0,0,-0.25,-1],[3,6,6.25,3,1,1,0,0,-0.25,-1],[3,7,7.25,3,1,1,0,0,-0.25,-1],[3,8,8.25,3,1,1,0,0,-0.25,-1],[3,9,9.25,3,1,1,0,0,-0.25,-1],[3,10,10.25,3,1,1,0,0,-0.25,-1],[3,12,11.25,3,1,1,0,0,-0.25,-1],[3,13,12.25,3,2.75,1,0,0,-0.25,-1],[4,0,0,4,1.25,1,0,0,-0.25,-1],[4,1,1.25,4,1.25,1,0,0,-0.25,-1],[4,2,2.5,4,1.25,1,0,0,-0.25,-1],[4,6,3.75,4,6.25,1,0,0,-0.25,-1],[4,10,10,4,1.25,1,0,0,-0.25,-1],[4,11,11.25,4,1.25,1,0,0,-0.25,-1],[4,12,12.5,4,1.25,1,0,0,-0.25,-1],[4,13,13.75,4,1.25,1,0,0,-0.25,-1]]], + [16.25,6.5,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,0],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,13,15.25,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,12,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,1.75,1,0,0,0,-1],[4,14,14.25,4.5,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,9,10,5.25,1,1,0,0,0,-1],[5,10,11,5.25,1,1,0,0,0,-1],[5,11,12,5.25,1,1,0,0,0,-1],[5,12,13.25,5.5,1,1,0,0,0,-1],[5,13,14.25,5.5,1,1,0,0,0,-1],[5,14,15.25,5.5,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,2,0,1,1,0,0,0,-1],[0,2,3,0,1,1,0,0,0,-1],[0,3,4,0,1,1,0,0,0,-1],[0,4,5,0,1,1,0,0,0,-1],[0,5,6.5,0,1,1,0,0,0,-1],[0,6,7.5,0,1,1,0,0,0,-1],[0,7,8.5,0,1,1,0,0,0,-1],[0,8,9.5,0,1,1,0,0,0,-1],[0,9,11,0,1,1,0,0,0,-1],[0,10,12,0,1,1,0,0,0,-1],[0,11,13,0,1,1,0,0,0,-1],[0,12,14,0,1,1,0,0,0,-1],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,2,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.5,2.25,1.5,1,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,2.25,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,13,12.25,4.25,2.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1.25,1,0,0,0,-1],[5,2,2.5,5.25,1.25,1,0,0,0,-1],[5,6,3.75,5.25,6.25,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [22.5,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[3,13,14,0,1,1,0,0,0,0],[0,14,15.25,0,1,1,0,0,0,-1],[0,15,16.25,0,1,1,0,0,0,-1],[0,16,17.25,0,1,1,0,0,0,-1],[0,17,18.5,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[0,19,20.5,0,1,1,0,0,0,-1],[0,20,21.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[0,13,14,1.25,1,1,0,0,0,-1],[1,14,15.25,1.25,1,1,0,0,0,-1],[1,15,16.25,1.25,1,1,0,0,0,-1],[1,16,17.25,1.25,1,1,0,0,0,-1],[1,17,18.5,1.25,1,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[1,19,20.5,1.25,1,1,0,0,0,-1],[1,20,21.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,14,15.25,2.25,1,1,0,0,0,-1],[2,15,16.25,2.25,1,1,0,0,0,-1],[2,16,17.25,2.25,1,1,0,0,0,-1],[2,17,18.5,2.25,1,1,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[2,19,20.5,2.25,1,1,0,0,0,-1],[2,20,21.5,2.25,1,2,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[3,17,18.5,3.25,1,1,0,0,0,-1],[3,18,19.5,3.25,1,1,0,0,0,-1],[3,19,20.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,15,16.25,4.25,1,1,0,0,0,-1],[4,17,18.5,4.25,1,1,0,0,0,-1],[4,18,19.5,4.25,1,1,0,0,0,-1],[4,19,20.5,4.25,1,1,0,0,0,-1],[4,20,21.5,4.25,1,2,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,8,9,5.25,1,1,0,0,0,-1],[5,9,10,5.25,1.25,1,0,0,0,-1],[5,10,11.25,5.25,1.25,1,0,0,0,-1],[5,11,12.5,5.25,1.25,1,0,0,0,-1],[5,12,13.75,5.25,1.25,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.25,5.25,1,1,0,0,0,-1],[5,17,18.5,5.25,2,1,0,0,0,-1],[5,18,20.5,5.25,1,1,0,0,0,-1]]], + [18.25,6.25,[[0,0,0,0,1,1,0,0,0,-1],[0,1,1.25,0,1,1,0,0,0,-1],[0,2,2.25,0,1,1,0,0,0,-1],[0,3,3.25,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,0],[0,15,15.25,0,1,1,0,0,0,-1],[0,16,16.25,0,1,1,0,0,0,-1],[0,17,17.25,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4,1.25,1,1,0,0,0,-1],[1,5,5,1.25,1,1,0,0,0,-1],[1,6,6,1.25,1,1,0,0,0,-1],[1,7,7,1.25,1,1,0,0,0,-1],[1,8,8,1.25,1,1,0,0,0,-1],[1,9,9,1.25,1,1,0,0,0,-1],[1,10,10,1.25,1,1,0,0,0,-1],[1,11,11,1.25,1,1,0,0,0,-1],[1,12,12,1.25,1,1,0,0,0,-1],[1,13,13,1.25,1,1,0,0,0,-1],[1,14,14,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[1,16,16.25,1.25,1,1,0,0,0,-1],[1,17,17.25,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1.5,1,0,0,0,-1],[2,1,1.5,2.25,1,1,0,0,0,-1],[2,2,2.5,2.25,1,1,0,0,0,-1],[2,3,3.5,2.25,1,1,0,0,0,-1],[2,4,4.5,2.25,1,1,0,0,0,-1],[2,5,5.5,2.25,1,1,0,0,0,-1],[2,6,6.5,2.25,1,1,0,0,0,-1],[2,7,7.5,2.25,1,1,0,0,0,-1],[2,8,8.5,2.25,1,1,0,0,0,-1],[2,9,9.5,2.25,1,1,0,0,0,-1],[2,10,10.5,2.25,1,1,0,0,0,-1],[2,11,11.5,2.25,1,1,0,0,0,-1],[2,12,12.5,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1.25,2,0,0,0,-1],[2,15,15.25,2.25,1,1,0,0,0,-1],[2,16,16.25,2.25,1,1,0,0,0,-1],[2,17,17.25,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1.75,1,0,0,0,-1],[3,1,1.75,3.25,1,1,0,0,0,-1],[3,2,2.75,3.25,1,1,0,0,0,-1],[3,3,3.75,3.25,1,1,0,0,0,-1],[3,4,4.75,3.25,1,1,0,0,0,-1],[3,5,5.75,3.25,1,1,0,0,0,-1],[3,6,6.75,3.25,1,1,0,0,0,-1],[3,7,7.75,3.25,1,1,0,0,0,-1],[3,8,8.75,3.25,1,1,0,0,0,-1],[3,9,9.75,3.25,1,1,0,0,0,-1],[3,10,10.75,3.25,1,1,0,0,0,-1],[3,11,11.75,3.25,1,1,0,0,0,-1],[3,12,12.75,3.25,1,1,0,0,0,-1],[4,0,0,4.25,2.25,1,0,0,0,-1],[4,2,2.25,4.25,1,1,0,0,0,-1],[4,3,3.25,4.25,1,1,0,0,0,-1],[4,4,4.25,4.25,1,1,0,0,0,-1],[4,5,5.25,4.25,1,1,0,0,0,-1],[4,6,6.25,4.25,1,1,0,0,0,-1],[4,7,7.25,4.25,1,1,0,0,0,-1],[4,8,8.25,4.25,1,1,0,0,0,-1],[4,9,9.25,4.25,1,1,0,0,0,-1],[4,10,10.25,4.25,1,1,0,0,0,-1],[4,11,11.25,4.25,1,1,0,0,0,-1],[4,12,12.25,4.25,1,1,0,0,0,-1],[4,13,13.25,4.25,1.75,1,0,0,0,-1],[4,16,16.25,4.25,1,1,0,0,0,-1],[5,0,0,5.25,1.25,1,0,0,0,-1],[5,1,1.25,5.25,1,1,0,0,0,-1],[5,2,2.25,5.25,1.25,1,0,0,0,-1],[5,3,3.5,5.25,1,1,0,0,0,-1],[5,6,4.5,5.25,4.5,1,0,0,0,-1],[5,9,9,5.25,1,1,0,0,0,-1],[5,10,10,5.25,1.25,1,0,0,0,-1],[5,11,11.25,5.25,1.25,1,0,0,0,-1],[5,12,12.5,5.25,1.25,1,0,0,0,-1],[5,13,13.75,5.25,1.25,1,0,0,0,-1],[5,15,15.25,5.25,1,1,0,0,0,-1],[5,16,16.25,5.25,1,1,0,0,0,-1],[5,17,17.25,5.25,1,1,0,0,0,-1]]], + [20.5,6.5,[[0,0,0,0,1,1,0,0,0,0],[0,1,1,0,1,1,0,0,0,-1],[0,2,2,0,1,1,0,0,0,-1],[0,3,3,0,1,1,0,0,0,-1],[0,4,4.25,0,1,1,0,0,0,-1],[0,5,5.5,0,1,1,0,0,0,-1],[0,6,6.5,0,1,1,0,0,0,-1],[0,7,7.5,0,1,1,0,0,0,-1],[0,8,8.5,0,1,1,0,0,0,-1],[0,9,9.75,0,1,1,0,0,0,-1],[0,10,10.75,0,1,1,0,0,0,-1],[0,11,11.75,0,1,1,0,0,0,-1],[0,12,12.75,0,1,1,0,0,0,-1],[0,13,14,0,1,1,0,0,0,-1],[0,14,15,0,1,1,0,0,0,-1],[0,15,16,0,1,1,0,0,0,-1],[0,16,17,0,1,1,0,0,0,-1],[0,17,18.25,0,1,1,0,0,0,-1],[0,18,19.5,0,1,1,0,0,0,-1],[1,0,0,1.25,1,1,0,0,0,-1],[1,1,1,1.25,1,1,0,0,0,-1],[1,2,2,1.25,1,1,0,0,0,-1],[1,3,3,1.25,1,1,0,0,0,-1],[1,4,4.25,1.25,1,1,0,0,0,-1],[1,5,5.25,1.25,1,1,0,0,0,-1],[1,6,6.25,1.25,1,1,0,0,0,-1],[1,7,7.25,1.25,1,1,0,0,0,-1],[1,8,8.25,1.25,1,1,0,0,0,-1],[1,9,9.25,1.25,1,1,0,0,0,-1],[1,10,10.25,1.25,1,1,0,0,0,-1],[1,11,11.25,1.25,1,1,0,0,0,-1],[1,12,12.25,1.25,1,1,0,0,0,-1],[1,13,13.25,1.25,1,1,0,0,0,-1],[1,14,14.25,1.25,1,1,0,0,0,-1],[1,15,15.25,1.25,1,1,0,0,0,-1],[1,16,16.25,1.25,1,1,0,0,0,-1],[1,17,17.25,1.25,2,1,0,0,0,-1],[1,18,19.5,1.25,1,1,0,0,0,-1],[2,0,0,2.25,1,1,0,0,0,-1],[2,1,1,2.25,1,1,0,0,0,-1],[2,2,2,2.25,1,1,0,0,0,-1],[2,3,3,2.25,1,2,0,0,0,-1],[2,4,4.25,2.25,1.5,1,0,0,0,-1],[2,5,5.75,2.25,1,1,0,0,0,-1],[2,6,6.75,2.25,1,1,0,0,0,-1],[2,7,7.75,2.25,1,1,0,0,0,-1],[2,8,8.75,2.25,1,1,0,0,0,-1],[2,9,9.75,2.25,1,1,0,0,0,-1],[2,10,10.75,2.25,1,1,0,0,0,-1],[2,11,11.75,2.25,1,1,0,0,0,-1],[2,12,12.75,2.25,1,1,0,0,0,-1],[2,13,13.75,2.25,1,1,0,0,0,-1],[2,14,14.75,2.25,1,1,0,0,0,-1],[2,15,15.75,2.25,1,1,0,0,0,-1],[2,16,16.75,2.25,1,1,0,0,0,-1],[2,17,18,2.25,1.25,2,0,0,0,-1],[2,18,19.5,2.25,1,1,0,0,0,-1],[3,0,0,3.25,1,1,0,0,0,-1],[3,1,1,3.25,1,1,0,0,0,-1],[3,2,2,3.25,1,1,0,0,0,-1],[3,4,4.25,3.25,1.75,1,0,0,0,-1],[3,5,6,3.25,1,1,0,0,0,-1],[3,6,7,3.25,1,1,0,0,0,-1],[3,7,8,3.25,1,1,0,0,0,-1],[3,8,9,3.25,1,1,0,0,0,-1],[3,9,10,3.25,1,1,0,0,0,-1],[3,10,11,3.25,1,1,0,0,0,-1],[3,11,12,3.25,1,1,0,0,0,-1],[3,12,13,3.25,1,1,0,0,0,-1],[3,13,14,3.25,1,1,0,0,0,-1],[3,14,15,3.25,1,1,0,0,0,-1],[3,15,16,3.25,1,1,0,0,0,-1],[3,16,17,3.25,1,1,0,0,0,-1],[3,17,19.5,3.25,1,1,0,0,0,-1],[4,0,0,4.25,1,1,0,0,0,-1],[4,1,1,4.25,1,1,0,0,0,-1],[4,2,2,4.25,1,1,0,0,0,-1],[4,3,3,4.25,1,2,0,0,0,-1],[4,4,4.25,4.25,1.25,1,0,0,0,-1],[4,5,5.5,4.25,1,1,0,0,0,-1],[4,6,6.5,4.25,1,1,0,0,0,-1],[4,7,7.5,4.25,1,1,0,0,0,-1],[4,8,8.5,4.25,1,1,0,0,0,-1],[4,9,9.5,4.25,1,1,0,0,0,-1],[4,10,10.5,4.25,1,1,0,0,0,-1],[4,11,11.5,4.25,1,1,0,0,0,-1],[4,12,12.5,4.25,1,1,0,0,0,-1],[4,13,13.5,4.25,1,1,0,0,0,-1],[4,14,14.5,4.25,1,1,0,0,0,-1],[4,16,15.5,4.25,1,1,0,0,0,-1],[4,17,16.5,4.25,1.75,1,0,0,0,-1],[4,18,18.5,4.5,1,1,0,0,0,-1],[5,1,0,5.25,2,1,0,0,0,-1],[5,2,2,5.25,1,1,0,0,0,-1],[5,4,4.25,5.25,1.25,1,0,0,0,-1],[5,5,5.5,5.25,1.25,1,0,0,0,-1],[5,6,6.75,5.25,1.25,1,0,0,0,-1],[5,10,8,5.25,6.25,1,0,0,0,-1],[5,13,14.25,5.25,1,1,0,0,0,-1],[5,14,15.25,5.25,1,1,0,0,0,-1],[5,15,16.25,5.25,1,1,0,0,0,-1],[5,16,17.5,5.5,1,1,0,0,0,-1],[5,17,18.5,5.5,1,1,0,0,0,-1],[5,18,19.5,5.5,1,1,0,0,0,-1]]], +]; + +/** Index into the layout table for each product id. */ +const LAYOUT_BY_PRODUCT: Readonly> = { + 0x0402: 98, + 0x0403: 65, + 0x040c: 41, + 0x0416: 46, + 0x0417: 71, + 0x0418: 5, + 0x0419: 24, + 0x041b: 66, + 0x041c: 75, + 0x041e: 76, + 0x041f: 40, + 0x0429: 90, + 0x042f: 9, + 0x043b: 22, + 0x0441: 76, + 0x0445: 76, + 0x0446: 21, + 0x0449: 23, + 0x044a: 47, + 0x044b: 76, + 0x0450: 20, + 0x0454: 23, + 0x045a: 71, + 0x045b: 0, + 0x045c: 37, + 0x045d: 37, + 0x045e: 41, + 0x045f: 41, + 0x0460: 24, + 0x0464: 18, + 0x0471: 97, + 0x0472: 64, + 0x0476: 19, + 0x047b: 79, + 0x047c: 47, + 0x047d: 25, + 0x047e: 38, + 0x0480: 38, + 0x0481: 57, + 0x0484: 38, + 0x0485: 38, + 0x0486: 97, + 0x048a: 71, + 0x048e: 9, + 0x048f: 51, + 0x0490: 44, + 0x0494: 93, + 0x0497: 81, + 0x0498: 21, + 0x049b: 59, + 0x049c: 94, + 0x04a1: 41, + 0x04a2: 71, + 0x04a5: 41, + 0x04a6: 41, + 0x0511: 26, + 0x0b00: 8, + 0x0b01: 8, + 0x0b02: 8, + 0x0b10: 98, + 0x0b11: 65, + 0x0b12: 27, + 0x0b13: 98, + 0x0b14: 71, + 0x0b15: 71, + 0x0b16: 32, + 0x0b20: 70, + 0x0b30: 39, + 0x0b31: 30, + 0x0b32: 29, + 0x0b33: 34, + 0x0b40: 16, + 0x0b50: 35, + 0x0b51: 74, + 0x0b52: 1, + 0x0b53: 43, + 0x0b60: 91, + 0x0b61: 33, + 0x0b62: 100, + 0x0b63: 91, + 0x0b64: 91, + 0x0b65: 33, + 0x0b66: 91, + 0x0ba0: 86, + 0x0bb0: 69, + 0x0bc0: 7, + 0x0bc1: 102, + 0x0e20: 78, + 0x0e21: 45, + 0x0e22: 87, + 0x0e23: 13, + 0x0e24: 44, + 0x0e25: 44, + 0x0e26: 68, + 0x0e27: 44, + 0x0e2a: 68, + 0x0e30: 78, + 0x0e31: 45, + 0x0e32: 49, + 0x0e35: 49, + 0x0e40: 48, + 0x0e41: 77, + 0x0e42: 82, + 0x0e43: 14, + 0x0e44: 96, + 0x0e45: 89, + 0x0e60: 63, + 0x0e61: 4, + 0x0e80: 54, + 0x0e81: 55, + 0x0e82: 84, + 0x0e83: 67, + 0x0e84: 67, + 0x0e85: 28, + 0x0e86: 28, + 0x0ea0: 56, + 0x0ea1: 17, + 0x0ea2: 53, + 0x0ea3: 56, + 0x0ea4: 88, + 0x0ea5: 61, + 0x0ea6: 56, + 0x0ea7: 42, + 0x0ea8: 42, + 0x0ea9: 88, + 0x0ec0: 50, + 0x1001: 44, + 0x1004: 3, + 0x1005: 97, + 0x1010: 71, + 0x1011: 5, + 0x1012: 15, + 0x1013: 85, + 0x1014: 44, + 0x1015: 2, + 0x1016: 71, + 0x1020: 12, + 0x1023: 12, + 0x1030: 59, + 0x1031: 58, + 0x1032: 101, + 0x1033: 59, + 0x1050: 10, + 0x1053: 10, + 0x1060: 94, + 0x1061: 92, + 0x1062: 52, + 0x1063: 94, + 0x1064: 94, + 0x10f3: 64, + 0x10f4: 72, + 0x1234: 45, + 0x1500: 6, + 0x1532: 62, + 0x1533: 80, + 0x1535: 62, + 0x1536: 80, + 0x1540: 99, + 0x1541: 99, + 0x1710: 73, + 0x1711: 71, + 0x1728: 36, + 0x1729: 44, + 0x172c: 60, + 0x172d: 47, + 0x1740: 11, + 0x17c0: 83, + 0x17f0: 95, + 0x1860: 31, +}; + +export interface KeychronKeyShape { + row: number; + col: number; + /** Position of the key's top-left corner, in key widths. */ + x: number; + y: number; + w: number; + h: number; + /** Degrees clockwise around (`rx`, `ry`); 0 for most keys. */ + rotation: number; + rx: number; + ry: number; + /** Rotary encoder index when this position is a knob, else null. */ + encoder: number | null; +} + +export interface KeychronLayout { + /** Overall size in key widths. */ + width: number; + height: number; + keys: readonly KeychronKeyShape[]; +} + +const cache = new Map(); + +/** The physical layout of a catalogued Hall-effect board, or null for an unknown product id. */ +export function keychronLayoutFor(productId: number): KeychronLayout | null { + const cached = cache.get(productId); + if (cached) return cached; + const index = LAYOUT_BY_PRODUCT[productId]; + const raw = index === undefined ? undefined : LAYOUTS[index]; + if (!raw) return null; + const layout: KeychronLayout = { + width: raw[0], + height: raw[1], + keys: raw[2].map(([row, col, x, y, w, h, rotation, rx, ry, encoder]) => ({ + row, col, x, y, w, h, rotation, rx, ry, encoder: encoder < 0 ? null : encoder, + })), + }; + cache.set(productId, layout); + return layout; +} diff --git a/src/keychron/products.ts b/src/keychron/products.ts new file mode 100644 index 0000000..13ab34a --- /dev/null +++ b/src/keychron/products.ts @@ -0,0 +1,189 @@ +/** + * Keychron Hall-effect (HE/TMR) keyboards that Keychron Launcher serves a + * definition for, keyed by USB product id under VID 0x3434. Generated from + * launcher.keychron.com `static/device/{vid*65536+pid}/json/v3.json` on + * 2026-10-30. `launcherFlag` is false for the few boards whose definition + * names them HE/TMR without declaring the HE feature. + * `travel` is the definition's `extra.he.distance` in millimetres. + */ +export interface KeychronHeProduct { + name: string; + rows: number; + cols: number; + travel?: { min?: number; max?: number; deadzone?: number }; + launcherFlag: boolean; +} + +export const KEYCHRON_HE_PRODUCTS: Readonly> = { + 0x0402: { name: "Keychron P1 HE DAYZ", rows: 6, cols: 15, launcherFlag: true }, + 0x0403: { name: "Keychron P1 HE DAYZ", rows: 6, cols: 15, launcherFlag: true }, + 0x040c: { name: "Keychron J3 HE ANSI", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0416: { name: "Keychron J2 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0417: { name: "Keychron J8 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0418: { name: "Keychron J8 HE 8K ISO", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0419: { name: "Keychron J8 HE 8K JIS", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x041b: { name: "Keychron J14 HE ANSI", rows: 6, cols: 18, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x041c: { name: "Keychron J12 HE ANSI", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x041e: { name: "Keychron J5 HE ANSI KNOB", rows: 6, cols: 21, travel: { min: 0.1, max: 3.4, deadzone: 0.1 }, launcherFlag: true }, + 0x041f: { name: "Keychron J4 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0429: { name: "Keychron J15 HE ANSI", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x042f: { name: "Keychron V1 HE ANSI Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.35, deadzone: 0.2 }, launcherFlag: true }, + 0x043b: { name: "Keychron C3 Pro HE ANSI RGB", rows: 6, cols: 17, travel: { min: 0.1, max: 3.8 }, launcherFlag: true }, + 0x0441: { name: "Keychron V6 HE ANSI KNOB", rows: 6, cols: 21, travel: { min: 0.1, max: 3.4, deadzone: 0.1 }, launcherFlag: true }, + 0x0445: { name: "Keychron J5 TMR ANSI KNOB", rows: 6, cols: 21, travel: { min: 0.1, max: 3.4, deadzone: 0.1 }, launcherFlag: true }, + 0x0446: { name: "Keychron J5 HE 8K ISO", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0449: { name: "Keychron J2 TMR", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x044a: { name: "Keychron C100 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x044b: { name: "Keychron J5 TMR ANSI KNOB", rows: 6, cols: 21, travel: { min: 0.1, max: 3.1, deadzone: 0.4 }, launcherFlag: true }, + 0x0450: { name: "Keychron T2 HE", rows: 3, cols: 8, launcherFlag: true }, + 0x0454: { name: "Keychron J2 TMR ANSI KNOB", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x045a: { name: "Keychron eX75 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x045b: { name: "Keychron eX67 HE 8K ANSI", rows: 5, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x045c: { name: "Keychron eX99 HE 8K ANSI", rows: 6, cols: 18, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x045d: { name: "Keychron eX99 HE 8K ANSI", rows: 6, cols: 18, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x045e: { name: "Keychron J3 TMR ANSI", rows: 6, cols: 19, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x045f: { name: "Keychron J3 TMR ANSI Silent", rows: 6, cols: 19, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0460: { name: "Keychron C75 TMR 8K JIS", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0464: { name: "Keychron F4 HE 8K", rows: 2, cols: 2, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0471: { name: "Keychron Carbon 60 HE 8K", rows: 5, cols: 14, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0472: { name: "Keychron Carbon 68 HE 8K", rows: 5, cols: 15, travel: { min: 0.1, max: 3.45 }, launcherFlag: true }, + 0x0476: { name: "Keychron F6 HE 8K", rows: 2, cols: 3, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x047b: { name: "Keychron C65 HE 8K ANSI", rows: 5, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x047c: { name: "Keychron C6 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x047d: { name: "Keychron Q17 HE Knob", rows: 2, cols: 5, launcherFlag: false }, + 0x047e: { name: "Keychron C75 HE ANSI WHITE", rows: 6, cols: 16, travel: { min: 0.1, max: 3.5, deadzone: 0 }, launcherFlag: true }, + 0x0480: { name: "Keychron EX75 HE Lite ANSE Red", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x0481: { name: "Keychron Carbon0 HE 8K", rows: 6, cols: 5, travel: { min: 0.2, max: 3.5 }, launcherFlag: true }, + 0x0484: { name: "Keychron C75 HE 1K ANSI WHITE", rows: 6, cols: 16, launcherFlag: true }, + 0x0485: { name: "Keychron EX75 HE Lite ANSE Red", rows: 6, cols: 16, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0486: { name: "Keychron Z2-60 HE 8K", rows: 5, cols: 14, travel: { min: 0.1, max: 3.55 }, launcherFlag: true }, + 0x048a: { name: "Keychron J8 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x048e: { name: "Keychron K18 HE ANSI Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.35, deadzone: 0.2 }, launcherFlag: true }, + 0x048f: { name: "Keychron Q17 HE ANSI Knob", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0490: { name: "Keychron Carbon 75 HE 8K", rows: 6, cols: 16, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0494: { name: "Keychron J5 HE 8K", rows: 6, cols: 21, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0497: { name: "Keychron K20 HE 8K", rows: 6, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x0498: { name: "Keychron C100 HE 8K ISO", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x049b: { name: "Keychron Carbon 87 HE 8K ANSI", rows: 6, cols: 17, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x049c: { name: "Keychron Carbon 108 HE 8K ANSI", rows: 6, cols: 21, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x04a1: { name: "Keychron J3 HE ANSI SILENT Knob", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x04a2: { name: "Keychron V1 8K", rows: 6, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x04a5: { name: "Keychron J3 HE ANSI Knob", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.1 }, launcherFlag: true }, + 0x04a6: { name: "Keychron J3 HE ANSI SILENT Knob", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0511: { name: "Lemokey L1 HE ISO", rows: 6, cols: 16, launcherFlag: false }, + 0x0b00: { name: "Keychron Q0 HE Knob", rows: 6, cols: 5, launcherFlag: true }, + 0x0b01: { name: "Keychron Q0 HE V2 Knob", rows: 6, cols: 5, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b02: { name: "Keychron Q0 HE V2 Knob", rows: 6, cols: 5, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b10: { name: "Keychron Q1 HE ANSI Knob", rows: 6, cols: 15, launcherFlag: true }, + 0x0b11: { name: "Keychron Q1 HE ISO Knob", rows: 6, cols: 15, launcherFlag: true }, + 0x0b12: { name: "Keychron Q1 HE JIS Knob", rows: 6, cols: 15, launcherFlag: true }, + 0x0b13: { name: "Keychron Q1 HE DAYZ", rows: 6, cols: 15, launcherFlag: true }, + 0x0b14: { name: "Keychron Q1 HE ANSI Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b15: { name: "Keychron Q1 HE ANSI Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b16: { name: "Keychron Q1 HE ISO Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b20: { name: "Keychron Q2 HE ANSI Knob", rows: 5, cols: 15, launcherFlag: true }, + 0x0b30: { name: "Keychron Q3 HE ANSI Knob", rows: 6, cols: 16, launcherFlag: true }, + 0x0b31: { name: "Keychron Q3 HE ISO Knob", rows: 6, cols: 16, launcherFlag: true }, + 0x0b32: { name: "Keychron Q3 HE JIS Knob", rows: 6, cols: 16, launcherFlag: true }, + 0x0b33: { name: "Keychron Q3 HE ANSI Knob", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b40: { name: "Keychron Q4 HE ANSI", rows: 5, cols: 14, launcherFlag: true }, + 0x0b50: { name: "Keychron Q5 HE ANSI Knob", rows: 6, cols: 19, launcherFlag: true }, + 0x0b51: { name: "Keychron Q5 HE ISO Knob", rows: 6, cols: 19, launcherFlag: true }, + 0x0b52: { name: "Keychron Q5 HE JIS Knob", rows: 6, cols: 19, launcherFlag: true }, + 0x0b53: { name: "Keychron Q5 HE V2 ANSI Knob", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b60: { name: "Keychron Q6 HE ANSI Knob", rows: 6, cols: 21, launcherFlag: true }, + 0x0b61: { name: "Keychron Q6 HE ISO Knob", rows: 6, cols: 21, launcherFlag: true }, + 0x0b62: { name: "Keychron Q6 HE JIS Knob", rows: 6, cols: 21, launcherFlag: true }, + 0x0b63: { name: "Keychron Q6 HE Version 2 ANSI Knob", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b64: { name: "Keychron Q6 HE Version 2 ANSI Knob", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b65: { name: "Keychron Q6 HE ISO Knob", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0b66: { name: "Keychron Q6 HE Version 3 ANSI Knob", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ba0: { name: "Keychron Q10 HE ANSI knob", rows: 6, cols: 16, launcherFlag: true }, + 0x0bb0: { name: "Keychron Q11 HE ANSI Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0bc0: { name: "Keychron Q12 HE ANSI Knob", rows: 6, cols: 19, launcherFlag: true }, + 0x0bc1: { name: "Keychron Q12 HE ISO Knob", rows: 6, cols: 19, launcherFlag: true }, + 0x0e20: { name: "Keychron K2 HE ANSI RGB", rows: 6, cols: 16, launcherFlag: true }, + 0x0e21: { name: "Keychron K2 HE ISO RGB", rows: 6, cols: 16, launcherFlag: true }, + 0x0e22: { name: "Keychron K2 HE JIS RGB", rows: 6, cols: 16, launcherFlag: true }, + 0x0e23: { name: "Keychron K2 HE BR RGB", rows: 6, cols: 16, launcherFlag: true }, + 0x0e24: { name: "Keychron K2 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e25: { name: "Keychron K2 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e26: { name: "Keychron K2 HE V2 ISO", rows: 6, cols: 16, travel: { min: 0.2, max: 3.4, deadzone: 0.1 }, launcherFlag: true }, + 0x0e27: { name: "Keychron K2 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e2a: { name: "Keychron K2 HE V3 ISO", rows: 6, cols: 16, launcherFlag: true }, + 0x0e30: { name: "Keychron K3 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 2.8, deadzone: 0.1 }, launcherFlag: true }, + 0x0e31: { name: "Keychron K3 HE ISO", rows: 6, cols: 16, travel: { min: 0.2, max: 2.8, deadzone: 0.1 }, launcherFlag: true }, + 0x0e32: { name: "Keychron K3 HE JIS RGB", rows: 6, cols: 16, travel: { min: 0.2, max: 2.8, deadzone: 0.1 }, launcherFlag: true }, + 0x0e35: { name: "Keychron K3 HE JIS RGB", rows: 6, cols: 16, travel: { min: 0.2, max: 2.8, deadzone: 0.1 }, launcherFlag: true }, + 0x0e40: { name: "Keychron K4 HE ANSI", rows: 6, cols: 19, launcherFlag: true }, + 0x0e41: { name: "Keychron K4 HE ISO", rows: 6, cols: 19, launcherFlag: true }, + 0x0e42: { name: "Keychron K4 HE JIS", rows: 6, cols: 19, launcherFlag: true }, + 0x0e43: { name: "Keychron K4 HE ANSI", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.1 }, launcherFlag: true }, + 0x0e44: { name: "Keychron K4 HE ABNT2", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e45: { name: "Keychron K4 HE ISO V2", rows: 6, cols: 19, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e60: { name: "Keychron K6 HE ANSI", rows: 5, cols: 15, launcherFlag: true }, + 0x0e61: { name: "Keychron K6 HE ISO", rows: 5, cols: 15, launcherFlag: true }, + 0x0e80: { name: "Keychron K8 HE", rows: 6, cols: 16, launcherFlag: true }, + 0x0e81: { name: "Keychron K8 HE ISO", rows: 6, cols: 16, launcherFlag: true }, + 0x0e82: { name: "Keychron K8 HE JIS", rows: 6, cols: 16, launcherFlag: true }, + 0x0e83: { name: "Keychron K8 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e84: { name: "Keychron K8 HE ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.3 }, launcherFlag: true }, + 0x0e85: { name: "Keychron K8 HE ISO", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0e86: { name: "Keychron K8 HE ISO", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea0: { name: "Keychron K10 HE ANSI RGB", rows: 6, cols: 21, launcherFlag: true }, + 0x0ea1: { name: "Keychron K10 HE ISO RGB", rows: 6, cols: 21, launcherFlag: true }, + 0x0ea2: { name: "Keychron K10 HE JIS", rows: 6, cols: 21, launcherFlag: true }, + 0x0ea3: { name: "Keychron K10 HE V2 ANSI RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea4: { name: "Keychron K10 HE ISO RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea5: { name: "Keychron K10 HE ABNT2", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea6: { name: "Keychron K10 HE V2 ANSI RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.2, deadzone: 0.3 }, launcherFlag: true }, + 0x0ea7: { name: "Keychron K10 HE ANSI RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea8: { name: "Keychron K10 HE ANSI RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ea9: { name: "Keychron K10 HE ISO RGB", rows: 6, cols: 21, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x0ec0: { name: "Keychron K12 HE ANSI RGB", rows: 5, cols: 14, launcherFlag: true }, + 0x1001: { name: "Keychron Q18 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1004: { name: "Keychron Q20 HE 8K ANSI", rows: 6, cols: 21, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1005: { name: "Keychron Q19 HE 8K", rows: 5, cols: 14, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1010: { name: "Keychron Q1 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1011: { name: "Keychron Q1 HE 8K ISO", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1012: { name: "Keychron Q1 HE 8K JIS", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1013: { name: "Keychron Q1 HE 8K ABNT2", rows: 6, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1014: { name: "Keychron Q1 HE Marble 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.55 }, launcherFlag: true }, + 0x1015: { name: "Keychron Q1 SE 8K ANSI", rows: 6, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1016: { name: "Keychron Q1 HE 8K ANSI", rows: 6, cols: 16, travel: { min: 0.1, max: 3.45 }, launcherFlag: true }, + 0x1020: { name: "Keychron Q2 HE 8K ANSI", rows: 5, cols: 16, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1023: { name: "Keychron Q2 HE 8K ANSI V2", rows: 5, cols: 16, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1030: { name: "Keychron Q3 HE 8K ANSI", rows: 6, cols: 17, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1031: { name: "Keychron Q3 HE 8K ISO", rows: 6, cols: 17, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1032: { name: "Keychron Q3 HE 8K JIS", rows: 6, cols: 18, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1033: { name: "Keychron Q3 HE 8K ANSI", rows: 6, cols: 17, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1050: { name: "Keychron Q5 HE 8K ANSI", rows: 6, cols: 20, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1053: { name: "Keychron Q5 HE 8K ANSI", rows: 6, cols: 20, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1060: { name: "Keychron Q6 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1061: { name: "Keychron Q6 HE 8K ISO", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1062: { name: "Keychron Q6 HE 8K JIS", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1063: { name: "Keychron Q6 HE 8K", rows: 6, cols: 22, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1064: { name: "Keychron Q6 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x10f3: { name: "Keychron Q16 HE 8K ANSI", rows: 5, cols: 15, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x10f4: { name: "Keychron Q16 HE 8K ISO", rows: 5, cols: 15, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1234: { name: "Keychron K2 HE ISO RGB", rows: 6, cols: 16, launcherFlag: false }, + 0x1500: { name: "Keychron C0 HE 8K", rows: 6, cols: 7, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1532: { name: "Keychron C3 HE 8K JIS", rows: 6, cols: 18, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1533: { name: "Keychron C3 HE ANSI", rows: 6, cols: 17, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1535: { name: "Keychron C3 HE 8K JIS", rows: 6, cols: 18, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1536: { name: "Keychron C3 HE ANSI", rows: 6, cols: 17, travel: { min: 0.2, max: 3.5 }, launcherFlag: true }, + 0x1540: { name: "Keychron C4 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1541: { name: "Keychron C4 HE 8K ANSI", rows: 6, cols: 22, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1710: { name: "V1 HE 8K SE ANSI", rows: 6, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1711: { name: "Keychron V1 HE 8K", rows: 6, cols: 15, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1728: { name: "Keychron J2 HE ANSI RGB", rows: 6, cols: 15, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x1729: { name: "Antec WH1 ANSI", rows: 6, cols: 16, travel: { min: 0.2, max: 3.3, deadzone: 0.2 }, launcherFlag: true }, + 0x172c: { name: "K004 ISO Knob", rows: 6, cols: 15, travel: { min: 0.2, max: 3.5 }, launcherFlag: true }, + 0x172d: { name: "Secret Gear \u00d7 Keychron KX100 Magnetic", rows: 6, cols: 22, travel: { min: 0.1, max: 3.35 }, launcherFlag: true }, + 0x1740: { name: "Keychron V4 HE 8K", rows: 5, cols: 14, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x17c0: { name: "Keychron V12 HE 8K", rows: 6, cols: 16, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x17f0: { name: "Keychron V15 HE 8K", rows: 6, cols: 22, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, + 0x1860: { name: "Keychron V6 ULTRA HE ANSI ENCODER", rows: 6, cols: 21, travel: { min: 0.1, max: 3.5 }, launcherFlag: true }, +}; + +export const KEYCHRON_HE_PRODUCT_IDS: readonly number[] = Object.keys(KEYCHRON_HE_PRODUCTS).map(Number); diff --git a/src/keychron/protocol.test.ts b/src/keychron/protocol.test.ts new file mode 100644 index 0000000..18cace9 --- /dev/null +++ b/src/keychron/protocol.test.ts @@ -0,0 +1,298 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + KEYCHRON_HE_COMMAND, keychronCustomKeycodeBase, keychronCustomKeycodes, keychronKeycodeCatalog, keychronKeycodeContext, keychronKeycodeIsChoosable, decodeKeychronViaProtocol, decodeKeychronKeycode, decodeKeychronKeymapChunk, joinKeychronKeymap, keychronKeycodeLegend, keychronKeymapReadPlan, keychronLayoutFor, keychronViaFrames, KEYCHRON_KEY_MODE, KEYCHRON_WORK_MODE, keychronKeyBitmap, keychronKeyTarget, keychronProfileNameBytes, KEYCHRON_HE_PRODUCTS, KEYCHRON_HE_PRODUCT_IDS, KEYCHRON_HE_SUBCOMMAND, + decodeKeychronAxisType, decodeKeychronCalibrationState, decodeKeychronCurve, decodeKeychronHeVersion, + decodeKeychronKeySlot, decodeKeychronProfileBuffer, decodeKeychronProfileName, decodeKeychronProfilesInfo, + decodeKeychronRealtimeTravel, joinKeychronProfile, keychronHeAcknowledged, keychronHeFrames, + keychronNameWindow, keychronProfileReadPlan, keychronUnit, +} from "./index.ts"; + +const reply = (sub: number, ...bytes: number[]) => { + const out = new Uint8Array(32); + out.set([KEYCHRON_HE_COMMAND, sub, ...bytes]); + return out; +}; +const head = (frame: Uint8Array, length: number) => [...frame.slice(0, length)]; + +test("frames are 32-byte KC_HE reports", () => { + const frame = keychronHeFrames.version(); + assert.equal(frame.length, 32); + assert.deepEqual(head(frame, 3), [0xa9, 0x01, 0]); + assert.deepEqual(head(keychronHeFrames.selectProfile(2), 3), [0xa9, 0x11, 2]); + assert.deepEqual(head(keychronHeFrames.readProfile(1, 0x0134, 26), 6), [0xa9, 0x12, 1, 0x34, 0x01, 26]); + assert.deepEqual(head(keychronHeFrames.realtimeTravel(3, 7), 4), [0xa9, 0x30, 3, 7]); + assert.deepEqual(head(keychronHeFrames.calibrate(), 3), [0xa9, 0x40, 2]); + assert.deepEqual(head(keychronHeFrames.stopCalibration(), 3), [0xa9, 0x40, 4]); + assert.deepEqual(head(keychronHeFrames.setAxisType(2), 3), [0xa9, 0x51, 2]); +}); + +test("frame arguments are range checked", () => { + assert.throws(() => keychronHeFrames.selectProfile(256), RangeError); + assert.throws(() => keychronHeFrames.readProfile(0, 0, 31), RangeError); + assert.throws(() => keychronHeFrames.readProfile(0, 0x10000, 4), RangeError); + assert.throws(() => keychronHeFrames.setTravel(4, 0, { workMode: 1, press: 300, keyMode: 1 }), RangeError); +}); + +test("setTravel packs one byte per value up to v4 and 16-bit words in v5", () => { + const v4 = keychronHeFrames.setTravel(4, 1, { workMode: 1, press: 20, sensitivePress: 4, keyMode: 1 }); + assert.deepEqual(head(v4, 9), [0xa9, 0x14, 1, 1, 20, 4, 4, 1, 0]); + const v5 = keychronHeFrames.setTravel(5, 2, { workMode: 1, press: 0x0123, sensitivePress: 40, sensitiveRelease: 50, keyMode: 1 }); + assert.deepEqual(head(v5, 12), [0xa9, 0x14, 2, 1, 0x23, 0x01, 40, 0, 50, 0, 1, 0]); + const perKey = keychronHeFrames.setTravel(4, 0, { workMode: 1, keyMode: 0, buffer: [9, 8, 7] }); + assert.deepEqual(head(perKey, 11), [0xa9, 0x14, 0, 1, 0, 0, 0, 0, 9, 8, 7]); +}); + +test("version reply exposes the version and capability bits", () => { + const info = decodeKeychronHeVersion(reply(KEYCHRON_HE_SUBCOMMAND.getVersion, 4, 0, 0b101011)); + assert.equal(info?.version, 4); + assert.deepEqual(info?.features, { + switchAxis: true, resetSingleKey: true, dkr: false, turbo: true, gamepadDisable: false, supportMechanical: true, + }); + assert.equal(decodeKeychronHeVersion(reply(0x02, 4)), null); +}); + +test("profile info reads the version-dependent tail", () => { + const raw = reply(KEYCHRON_HE_SUBCOMMAND.getProfilesInfo, 1, 3, 0x5c, 0x03, 20, 18, 2); + assert.deepEqual(decodeKeychronProfilesInfo(raw, 3), { + current: 1, total: 3, size: 0x035c, dksCount: null, snapTapCount: null, unit: 0.1, + }); + assert.deepEqual(decodeKeychronProfilesInfo(raw, 5), { + current: 1, total: 3, size: 0x035c, dksCount: 20, snapTapCount: 18, unit: 0.01, + }); + assert.equal(keychronUnit(3), 0.001); + assert.equal(keychronUnit(undefined), 0.1); +}); + +test("name window and read plan follow the profile size", () => { + assert.deepEqual(keychronNameWindow(1, 860), { offset: 827, length: 30 }); + assert.deepEqual(keychronNameWindow(4, 860), { offset: 828, length: 30 }); + assert.deepEqual(keychronNameWindow(5, 860), { offset: 828, length: 26 }); + const plan = keychronProfileReadPlan(60); + assert.deepEqual(plan, [{ offset: 0, length: 26 }, { offset: 26, length: 26 }, { offset: 52, length: 8 }]); + const joined = joinKeychronProfile([new Uint8Array([1, 2, 3]), new Uint8Array([4, 5, 6])], 5); + assert.deepEqual([...joined], [1, 2, 3, 4, 5]); +}); + +test("profile names are big-endian UTF-16 with zero pairs skipped", () => { + const name = reply(KEYCHRON_HE_SUBCOMMAND.getProfileBuffer, 0, 0, 0, 0, 0, 0x50, 0, 0x31, 0, 0, 0); + // reply bytes 6.. are the payload + name[6] = 0; name[7] = 0x50; name[8] = 0; name[9] = 0x31; name[10] = 0; name[11] = 0; + assert.equal(decodeKeychronProfileName(name), "P1"); + assert.equal(decodeKeychronProfileName(reply(0x13)), null); +}); + +test("v1-4 key slots unpack mode, travel, rapid trigger and index", () => { + // mode 2, distance 20, press 4, release 5, advance 3, index 9 + const word = 2 | (20 << 2) | (4 << 8) | (5 << 14) | (3 << 20) | (9 << 24); + const slot = new Uint8Array([word & 0xff, (word >>> 8) & 0xff, (word >>> 16) & 0xff, (word >>> 24) & 0xff]); + assert.deepEqual(decodeKeychronKeySlot(4, slot), { + mode: 2, distance: 20, advancePress: 4, advanceRelease: 5, advanceMode: 3, index: 9, + }); +}); + +test("v5 key slots use 14-bit fields and a trailing index byte", () => { + const word = (1n) | (300n << 2n) | (40n << 16n) | (50n << 30n) | (7n << 44n); + const slot = new Uint8Array(7); + for (let i = 0; i < 6; i++) slot[i] = Number((word >> BigInt(8 * i)) & 0xffn); + slot[6] = 11; + assert.deepEqual(decodeKeychronKeySlot(5, slot), { + mode: 1, distance: 300, advancePress: 40, advanceRelease: 50, advanceMode: 7, index: 11, + }); +}); + +test("profile buffers decode the key matrix, DKS and snap-tap regions", () => { + const rows = 2; const cols = 2; const slot = 4; + const buffer = new Uint8Array(slot * (rows * cols + 1) + 19 * 20 + 3 * 20); + // key (1,0) -> slot 3: distance 10, press 2 + const word = (10 << 2) | (2 << 8); + buffer.set([word & 0xff, (word >> 8) & 0xff, 0, 0], slot * 3); + // DKS slot 0: travels 1, 2, 3, 4 packed as [t0, t3, t1, t2] -> bits 0, 6, 12, 18 + const dksStart = slot * 5; + const dksWord = 1 | (4 << 6) | (2 << 12) | (3 << 18); + buffer.set([dksWord & 0xff, (dksWord >> 8) & 0xff, (dksWord >> 16) & 0xff], dksStart); + buffer.set([0x41, 0x00], dksStart + 3); // keycode 0x0041 + buffer.set([0xa5, 0x3c], dksStart + 11); // action nibbles + // snap-tap slot 2: key (col 1,row 0) and (col 2,row 1), type 3 + const snapStart = slot * 5 + 19 * 20; + buffer.set([(1 << 3) | 0, (2 << 3) | 1, 3], snapStart + 3 * 2); + const profile = decodeKeychronProfileBuffer(4, buffer, rows, cols); + assert.equal(profile.keys[1]![0]!.distance, 10); + assert.equal(profile.keys[1]![0]!.advancePress, 2); + assert.equal(profile.keys[0]![0]!.distance, 0); + assert.equal(profile.dks[0]?.keycodes[0], 0x41); + assert.deepEqual(profile.dks[0]?.travel, [1, 2, 3, 4]); + assert.deepEqual(profile.dks[0]?.actions[0], [0x5, 0xc, 0x3, 0xa]); + assert.equal(profile.dks[1], null); + assert.deepEqual(profile.snapTap, [{ + index: 2, type: 3, keys: [{ col: 1, row: 0 }, { col: 2, row: 1 }], + }]); + assert.throws(() => decodeKeychronProfileBuffer(4, new Uint8Array(4), rows, cols), RangeError); +}); + +test("live travel replies differ by version and must echo the key from v3", () => { + assert.equal(decodeKeychronRealtimeTravel(reply(0x30, 17), 2, 0, 0), 17); + assert.equal(decodeKeychronRealtimeTravel(reply(0x30, 0, 3, 7, 21), 4, 3, 7), 21); + assert.equal(decodeKeychronRealtimeTravel(reply(0x30, 0, 3, 7, 21), 4, 3, 8), null); + assert.equal(decodeKeychronRealtimeTravel(reply(0x30, 0, 3, 7, 0x2c, 0x01), 5, 3, 7), 300); +}); + +test("curve, axis type, calibration and acknowledgement replies decode", () => { + assert.deepEqual(decodeKeychronCurve(reply(0x20, 1, 2, 3, 4, 5, 6, 7, 8)), [[1, 2], [3, 4], [5, 6], [7, 8]]); + assert.deepEqual(decodeKeychronAxisType(reply(0x50, 2, 0x23, 0x00), 0.1), { type: 2, maxMm: 3.5 }); + const cal = decodeKeychronCalibrationState(reply(0x41, 0, 1, 0b0000_0101)); + assert.equal(cal?.state, 1); + assert.deepEqual(cal?.keys.slice(0, 3), [true, false, true]); + assert.equal(keychronHeAcknowledged(reply(0x14, 0), 0x14), true); + assert.equal(keychronHeAcknowledged(reply(0x14, 1), 0x14), false); +}); + +test("the HE catalog is keyed by 16-bit product ids", () => { + assert.ok(KEYCHRON_HE_PRODUCT_IDS.length > 150); + for (const id of KEYCHRON_HE_PRODUCT_IDS) { + assert.ok(id > 0 && id <= 0xffff); + const product = KEYCHRON_HE_PRODUCTS[id]!; + assert.ok(product.rows > 0 && product.cols > 0 && product.name.length > 0); + } +}); + +test("work and key modes match Launcher's enums", () => { + assert.deepEqual(KEYCHRON_WORK_MODE, { global: 0, static: 1, quickTrigger: 2 }); + assert.deepEqual(KEYCHRON_KEY_MODE, { perKey: 0, allKeys: 1 }); +}); + +test("the key bitmap is three bytes per row, low bit first", () => { + const bitmap = keychronKeyBitmap([{ row: 0, col: 0 }, { row: 1, col: 9 }, { row: 2, col: 23 }]); + assert.equal(bitmap.length, 24); + assert.equal(bitmap[0], 0b1); + assert.equal(bitmap[3 + 1], 0b10); + assert.equal(bitmap[6 + 2], 0b1000_0000); + assert.equal(bitmap.reduce((sum, byte) => sum + byte, 0), 1 + 2 + 128); + assert.throws(() => keychronKeyBitmap([{ row: 0, col: 24 }]), RangeError); + assert.throws(() => keychronKeyBitmap([{ row: 8, col: 0 }]), RangeError); +}); + +test("key targets are all-keys by default and per-key with a bitmap", () => { + assert.deepEqual(keychronKeyTarget(), { keyMode: 1 }); + const target = keychronKeyTarget([{ row: 0, col: 1 }]); + assert.equal(target.keyMode, 0); + assert.equal(target.buffer?.[0], 0b10); + assert.throws(() => keychronKeyTarget([]), RangeError); +}); + +test("profile names are trimmed big-endian UTF-16 with a byte length", () => { + const { chars, length } = keychronProfileNameBytes(" Hi\u00e9 "); + assert.equal(length, 6); + assert.deepEqual(chars.slice(0, 7), [0, 0x48, 0, 0x69, 0, 0xe9, 0]); + assert.equal(chars.length, 28); + assert.throws(() => keychronProfileNameBytes(" "), RangeError); + assert.throws(() => keychronProfileNameBytes("x".repeat(15)), RangeError); + assert.throws(() => keychronProfileNameBytes("\u{1F600}"), RangeError); + const frame = keychronHeFrames.setProfileName(2, chars, length); + assert.deepEqual([...frame.slice(0, 8)], [0xa9, 0x13, 2, 6, 0, 0x48, 0, 0x69]); +}); + +test("keymap reads cover one layer in 14-key chunks at the right byte offsets", () => { + const plan = keychronKeymapReadPlan(1, 6, 5); // 30 keys: 14 + 14 + 2 + assert.deepEqual(plan, [{ offset: 60, bytes: 28 }, { offset: 88, bytes: 28 }, { offset: 116, bytes: 4 }]); + assert.deepEqual([...keychronViaFrames.keymapBuffer(plan[1]!).slice(0, 4)], [0x12, 0, 88, 28]); + assert.throws(() => keychronKeymapReadPlan(256, 1, 1), RangeError); + assert.throws(() => keychronKeymapReadPlan(255, 20, 20), RangeError); + assert.throws(() => keychronViaFrames.keymapBuffer({ offset: 0, bytes: 30 }), RangeError); + assert.deepEqual([...keychronViaFrames.layerCount().slice(0, 2)], [0x11, 0]); +}); + +test("keymap replies are big-endian keycodes and fold into rows", () => { + const reply = new Uint8Array(32); + reply.set([0x12, 0, 0, 4, 0x00, 0x04, 0x00, 0x05]); + assert.deepEqual(decodeKeychronKeymapChunk(reply, 4), [4, 5]); + assert.equal(decodeKeychronKeymapChunk(new Uint8Array(32), 4), null); + assert.deepEqual(joinKeychronKeymap([[1, 2, 3], [4, 5, 6]], 2, 3), [[1, 2, 3], [4, 5, 6]]); + assert.throws(() => joinKeychronKeymap([[1]], 2, 3), RangeError); +}); + +test("legends cover letters, symbols, modifiers, layers and fall back to hex", () => { + const label = (code: number) => keychronKeycodeLegend(code).label; + assert.equal(label(0x04), "A"); + assert.equal(label(0x1d), "Z"); + assert.equal(label(0x1e), "1"); + assert.equal(label(0x27), "0"); + assert.equal(label(0x3a), "F1"); + assert.equal(label(0x45), "F12"); + assert.equal(label(0x68), "F13"); + assert.equal(label(0x59), "1"); + assert.equal(label(0x2c), "Space"); + assert.equal(label(0xe1), "Shift"); + assert.equal(label(0x0000), ""); + assert.equal(label(0x0001), "▽"); + assert.equal(label(0x5221), "MO1"); + assert.equal(keychronKeycodeLegend(0x0204).title, "Shift+Key A"); + assert.equal(label(0x2204), "A"); + const unknown = keychronKeycodeLegend(0x7e40); + assert.equal(unknown.unknown, true); + assert.equal(unknown.label, "0x7E40"); +}); + +test("every catalogued board has a physical layout whose keys fit its matrix", () => { + for (const id of KEYCHRON_HE_PRODUCT_IDS) { + const layout = keychronLayoutFor(id); + const { rows, cols } = KEYCHRON_HE_PRODUCTS[id]!; + assert.ok(layout, `layout for 0x${id.toString(16)}`); + assert.ok(layout.keys.length > 0 && layout.width > 0 && layout.height > 0); + for (const key of layout.keys) assert.ok(key.row < rows && key.col < cols, `0x${id.toString(16)} [${key.row},${key.col}]`); + } + assert.equal(keychronLayoutFor(0x0001), null); +}); + +test("keycode tables follow the firmware protocol version", () => { + assert.equal(keychronKeycodeLegend(0x5221, { protocol: 12 }).label, "MO1"); + assert.equal(keychronKeycodeLegend(0x5221, { protocol: 10 }).unknown, true); + assert.equal(keychronKeycodeLegend(0x5101, { protocol: 10 }).label, "MO1"); + assert.equal(keychronKeycodeLegend(0x5101, { protocol: 12 }).unknown, true); + assert.equal(keychronCustomKeycodeBase(12), 0x7e00); + assert.equal(keychronCustomKeycodeBase(11), 0x7f00); + assert.equal(keychronCustomKeycodeBase(10), 0x5f80); + assert.equal(keychronKeycodeIsChoosable(0x04, { protocol: 5 }), true); + assert.equal(keychronKeycodeIsChoosable(0x10000), false); + assert.equal(keychronKeycodeIsChoosable(-1), false); +}); + +test("custom keycodes resolve through the board's own list", () => { + const id = KEYCHRON_HE_PRODUCT_IDS[0]!; + const custom = keychronCustomKeycodes(id); + assert.ok(custom.length > 0); + const context = keychronKeycodeContext(id, 12); + const legend = keychronKeycodeLegend(0x7e00, context); + assert.equal(legend.unknown, false); + assert.equal(legend.label, custom[0]!.shortName); + assert.equal(keychronKeycodeLegend(0x7e00, { protocol: 12 }).unknown, true); + assert.deepEqual(keychronCustomKeycodes(0x0001), []); +}); + +test("the catalog offers only codes the legend can name, with no duplicates per category", () => { + const id = KEYCHRON_HE_PRODUCT_IDS[0]!; + for (const protocol of [10, 11, 12]) { + const context = keychronKeycodeContext(id, protocol); + const catalog = keychronKeycodeCatalog({ ...context, layerCount: 4 }); + assert.ok(catalog.some((category) => category.id === "letters")); + assert.ok(catalog.some((category) => category.id === "layers" && category.entries.length === 24)); + for (const category of catalog) { + assert.equal(new Set(category.entries.map((entry) => entry.code)).size, category.entries.length, category.id); + for (const entry of category.entries) assert.equal(keychronKeycodeIsChoosable(entry.code, context), true, `${protocol} ${entry.code}`); + } + } + assert.equal(keychronKeycodeCatalog({ protocol: 12 }).some((category) => category.id === "keychron"), false); +}); + +test("VIA keycode frames and replies match the dynamic-keymap layout", () => { + assert.deepEqual([...keychronViaFrames.setKeycode(1, 2, 3, 0x1234).slice(0, 6)], [0x05, 1, 2, 3, 0x12, 0x34]); + assert.deepEqual([...keychronViaFrames.getKeycode(1, 2, 3).slice(0, 4)], [0x04, 1, 2, 3]); + assert.deepEqual([...keychronViaFrames.setEncoder(0, 1, true, 0x0004).slice(0, 6)], [0x15, 0, 1, 1, 0, 4]); + assert.throws(() => keychronViaFrames.setKeycode(0, 0, 256, 4), RangeError); + assert.throws(() => keychronViaFrames.setKeycode(0, 0, 0, 0x10000), RangeError); + const reply = new Uint8Array(32); reply.set([0x04, 1, 2, 3, 0x12, 0x34]); + assert.equal(decodeKeychronKeycode(reply), 0x1234); + const version = new Uint8Array(32); version.set([0x01, 0, 12]); + assert.equal(decodeKeychronViaProtocol(version), 12); + assert.equal(decodeKeychronViaProtocol(new Uint8Array(32).fill(0).map((_, i) => (i === 0 ? 1 : 0))), 5); +}); diff --git a/tsconfig.json b/tsconfig.json index e2758a1..4e2de30 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -47,6 +47,9 @@ "@openmouse/keyboard-protocol/steelseries": [ "./src/steelseries/index.ts" ], + "@openmouse/keyboard-protocol/keychron": [ + "./src/keychron/index.ts" + ], "@openmouse/keyboard-protocol/arbiter": [ "./src/arbiter/index.ts" ]