1/* 2cc -o /tmp/fitline fitline.c 3*/ 4 5#include <stdlib.h> 6#include <stdint.h> 7#include <stdbool.h> 8#include <stdio.h> 9#include <strings.h> 10#include <assert.h> 11#include <IOKit/graphics/IOGraphicsTypesPrivate.h> 12 13#define SRCDATACOUNT 1024 14 15static uint16_t data[3][SRCDATACOUNT] = {{ 16#if 0 17 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 18 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 19 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 20 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 21 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 22 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 23 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 24 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 25 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 26 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 27 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 28 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 29 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 30 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 31 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 32 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 33},{ 34 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 35 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 36 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 37 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 38 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 39 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 40 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 41 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 42 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 43 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 44 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 45 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 46 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 47 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 48 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 49 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 50},{ 51 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 52 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 53 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 54 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 55 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 56 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 57 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 58 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000, 59 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 60 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 61 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 62 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 63 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 64 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 65 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 66 0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff, 67#elif 0 68// k92 69/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ 70 0x0000,0x002b,0x00c4,0x0129,0x0176,0x01de,0x0241,0x02a9,0x0320,0x039b,0x0423,0x04ac,0x0540,0x05dc,0x068c,0x0749, 71 0x080b,0x08e5,0x09bf,0x0aad,0x0bac,0x0cb5,0x0dc3,0x0edd,0x1006,0x1133,0x126f,0x13b5,0x14fc,0x1646,0x179d,0x18f6, 72 0x1a50,0x1bab,0x1d06,0x1e5e,0x1fb3,0x210d,0x2265,0x23b4,0x2505,0x2658,0x27a2,0x28ea,0x2a38,0x2b7c,0x2cbf,0x2e00, 73 0x2f43,0x3085,0x31c3,0x3303,0x3443,0x3584,0x36bc,0x37f4,0x392b,0x3a5a,0x3b90,0x3cc4,0x3df6,0x3f27,0x4057,0x4186, 74 0x42b2,0x43dc,0x4504,0x4629,0x4749,0x4866,0x497f,0x4a95,0x4bab,0x4cbd,0x4dce,0x4edc,0x4fee,0x510c,0x5232,0x5355, 75 0x5478,0x559a,0x56bb,0x57da,0x58fa,0x5a1d,0x5b3c,0x5c59,0x5d74,0x5e90,0x5faa,0x60c3,0x61dc,0x62f3,0x640b,0x6524, 76 0x6639,0x674a,0x6855,0x6960,0x6a6a,0x6b70,0x6c7a,0x6d80,0x6e83,0x6f87,0x7088,0x7185,0x7284,0x737c,0x7473,0x756a, 77 0x7660,0x7752,0x7843,0x7933,0x7a18,0x7af1,0x7bc4,0x7c97,0x7d6e,0x7e46,0x7f21,0x8000,0x80e3,0x81c9,0x82b2,0x83a0, 78 0x8491,0x8585,0x8679,0x8773,0x886e,0x896b,0x8a6f,0x8b93,0x8cea,0x8e3a,0x8f88,0x90d2,0x9218,0x9359,0x9499,0x95d2, 79 0x9707,0x9839,0x9966,0x9a8e,0x9bba,0x9cde,0x9e03,0x9f27,0xa04e,0xa176,0xa29c,0xa3c1,0xa4e3,0xa608,0xa72b,0xa84e, 80 0xa970,0xaa92,0xabb2,0xacce,0xadec,0xaf09,0xb026,0xb140,0xb25b,0xb375,0xb48f,0xb5a9,0xb6c6,0xb7e2,0xb8ff,0xba1a, 81 0xbb35,0xbc4d,0xbd61,0xbe74,0xbf85,0xc096,0xc1a5,0xc2ae,0xc3ba,0xc4c6,0xc5d4,0xc6dd,0xc7e5,0xc8ed,0xc9e5,0xcad8, 82 0xcbc5,0xccb2,0xcd9a,0xce7e,0xcf5e,0xd03b,0xd115,0xd1ef,0xd2c3,0xd399,0xd46e,0xd540,0xd612,0xd6e4,0xd7ae,0xd873, 83 0xd934,0xd9f4,0xdaaf,0xdb66,0xdc1b,0xdccf,0xdd81,0xde32,0xdee4,0xdf96,0xe04b,0xe103,0xe1bb,0xe276,0xe337,0xe400, 84 0xe4cd,0xe597,0xe660,0xe728,0xe7ef,0xe8b2,0xe971,0xea2e,0xeaea,0xeba2,0xec59,0xed0d,0xedbe,0xee70,0xef23,0xefdc, 85 0xf09f,0xf169,0xf23a,0xf312,0xf3f4,0xf4e2,0xf5db,0xf6e2,0xf7f5,0xf914,0xfa3f,0xfb73,0xfcb0,0xfdf2,0xff25,0xffff, 86},{ 87 0x0000,0x001d,0x0083,0x0111,0x0157,0x01b7,0x021e,0x0276,0x02e0,0x034c,0x03c1,0x0442,0x04cf,0x0563,0x0602,0x06ae, 88 0x0766,0x0827,0x08f0,0x09ce,0x0ab5,0x0ba8,0x0ca0,0x0da3,0x0eb3,0x0fcd,0x10f4,0x1219,0x1348,0x1479,0x15b1,0x16e9, 89 0x1828,0x1962,0x1aa2,0x1bda,0x1d17,0x1e54,0x1f87,0x20bd,0x21f1,0x2325,0x244f,0x257b,0x26a4,0x27cb,0x28ed,0x2a10, 90 0x2b31,0x2c53,0x2d70,0x2e8d,0x2fad,0x30c8,0x31e0,0x32f8,0x340f,0x3522,0x363a,0x374d,0x3863,0x3974,0x3a83,0x3b93, 91 0x3ca2,0x3dae,0x3eb8,0x3fbf,0x40c3,0x41c5,0x42c3,0x43c0,0x44bc,0x45b5,0x46ac,0x47a2,0x489c,0x49a3,0x4ab1,0x4bbf, 92 0x4cca,0x4dd6,0x4ee1,0x4feb,0x50f4,0x5200,0x530b,0x5412,0x551a,0x5622,0x5727,0x582e,0x5933,0x5a38,0x5b3e,0x5c45, 93 0x5d48,0x5e47,0x5f40,0x6038,0x6130,0x6227,0x631f,0x6416,0x650d,0x6604,0x66f9,0x67ef,0x68e4,0x69d8,0x6acc,0x6bc1, 94 0x6cb7,0x6daa,0x6e9e,0x6f8f,0x7078,0x7146,0x720d,0x72d4,0x739e,0x746c,0x7538,0x7607,0x76da,0x77af,0x7886,0x795d, 95 0x7a36,0x7b11,0x7bec,0x7cca,0x7daa,0x7e89,0x7f68,0x8055,0x8157,0x8261,0x836d,0x8476,0x857f,0x8687,0x8793,0x889e, 96 0x89a7,0x8ab0,0x8bbc,0x8cc7,0x8dd1,0x8edd,0x8fe8,0x90f3,0x9200,0x9310,0x9421,0x9532,0x9641,0x9753,0x9866,0x9976, 97 0x9a85,0x9b96,0x9ca6,0x9db4,0x9ebf,0x9fcc,0xa0d6,0xa1e1,0xa2e9,0xa3ef,0xa4f9,0xa60a,0xa729,0xa84c,0xa971,0xaa9a, 98 0xabc1,0xacea,0xae10,0xaf3d,0xb06a,0xb197,0xb2c6,0xb3f7,0xb528,0xb65c,0xb78f,0xb8c1,0xb9f4,0xbb20,0xbc43,0xbd64, 99 0xbe84,0xbf9c,0xc0af,0xc1c1,0xc2cb,0xc3ce,0xc4d0,0xc5c8,0xc6be,0xc7b1,0xc8a2,0xc98f,0xca7b,0xcb67,0xcc55,0xcd42, 100 0xce2c,0xcf14,0xcff9,0xd0d9,0xd1b5,0xd290,0xd36b,0xd444,0xd51d,0xd5f8,0xd6d3,0xd7b2,0xd892,0xd974,0xda5a,0xdb43, 101 0xdc2f,0xdd1b,0xde0a,0xdefa,0xdfec,0xe0e0,0xe1d5,0xe2cb,0xe3c5,0xe4c1,0xe5be,0xe6be,0xe7bc,0xe8bd,0xe9be,0xeabf, 102 0xebc3,0xeccd,0xede5,0xef06,0xf034,0xf172,0xf2bc,0xf416,0xf583,0xf6fd,0xf885,0xfa18,0xfbb5,0xfd57,0xfefe,0xffff, 103},{ 104 0x0000,0x0056,0x0114,0x0165,0x01de,0x0234,0x0285,0x02e7,0x0346,0x03ac,0x041d,0x048e,0x050b,0x0589,0x0612,0x06a4, 105 0x073e,0x07de,0x0886,0x0938,0x09f6,0x0ab6,0x0b80,0x0c53,0x0d2d,0x0e0d,0x0ef2,0x0fe2,0x10cf,0x11c3,0x12c1,0x13cd, 106 0x14dd,0x15ef,0x1704,0x1818,0x1928,0x1a40,0x1b52,0x1c65,0x1d77,0x1e87,0x1f95,0x20a4,0x21b3,0x22bf,0x23c9,0x24d3, 107 0x25df,0x26e9,0x27f0,0x28f8,0x2a00,0x2b08,0x2c08,0x2cff,0x2df1,0x2edf,0x2fd0,0x30c0,0x31af,0x329d,0x3389,0x3475, 108 0x355e,0x3646,0x372b,0x380f,0x38ef,0x39d1,0x3aae,0x3b89,0x3c64,0x3d3f,0x3e19,0x3ef0,0x3fc9,0x40a3,0x417f,0x425f, 109 0x433f,0x441e,0x4502,0x45e4,0x46c7,0x47aa,0x488d,0x4972,0x4a55,0x4b3b,0x4c1d,0x4d00,0x4de2,0x4ec2,0x4fa3,0x5084, 110 0x5166,0x524e,0x533b,0x5424,0x550c,0x55ef,0x56ce,0x57aa,0x5884,0x5958,0x5a2a,0x5afc,0x5bcc,0x5c9b,0x5d69,0x5e3a, 111 0x5f0b,0x5fdd,0x60b1,0x618a,0x6265,0x632a,0x63e5,0x649d,0x6559,0x661a,0x66df,0x67aa,0x6879,0x694d,0x6a25,0x6b01, 112 0x6bdd,0x6cbb,0x6d99,0x6e74,0x6f4e,0x7027,0x70fd,0x71cb,0x7290,0x7353,0x7417,0x74da,0x759c,0x765d,0x7720,0x77e2, 113 0x78a3,0x7963,0x7a25,0x7ae6,0x7ba6,0x7c67,0x7d27,0x7de8,0x7eaa,0x7f73,0x804e,0x8130,0x8211,0x82f5,0x83da,0x84be, 114 0x85a2,0x8687,0x876c,0x8850,0x8932,0x8a14,0x8af6,0x8bd6,0x8cb4,0x8d91,0x8e6f,0x8f51,0x9035,0x911e,0x920b,0x92fa, 115 0x93ed,0x94e2,0x95d7,0x96d4,0x97d4,0x98d5,0x99d9,0x9ae0,0x9be9,0x9cf5,0x9dff,0x9f09,0xa01c,0xa13f,0xa26e,0xa39d, 116 0xa4ce,0xa601,0xa734,0xa867,0xa99b,0xaac9,0xabf2,0xad16,0xae36,0xaf50,0xb064,0xb174,0xb281,0xb38e,0xb4a3,0xb5be, 117 0xb6d6,0xb7ec,0xb900,0xba12,0xbb22,0xbc34,0xbd49,0xbe62,0xbf81,0xc0a6,0xc1d4,0xc30a,0xc447,0xc58d,0xc6d6,0xc80b, 118 0xc935,0xca5f,0xcb8c,0xccbc,0xcdf0,0xcf29,0xd061,0xd1a0,0xd2de,0xd41e,0xd55c,0xd69c,0xd7da,0xd918,0xda58,0xdba1, 119 0xdcf6,0xde59,0xdfd0,0xe15c,0xe308,0xe4d8,0xe6d4,0xe909,0xeb74,0xee12,0xf0e7,0xf3e3,0xf71d,0xfa6f,0xfddf,0xffff, 120#elif 0 121 0x0000,0x0101,0x0202,0x0303,0x0404,0x0505,0x0606,0x0707,0x0808,0x0909,0x0a0a,0x0b0b,0x0c0c,0x0d0d,0x0e0e,0x0f0f, 122 0x1010,0x1111,0x1212,0x1313,0x1414,0x1515,0x1616,0x1717,0x1818,0x1919,0x1a1a,0x1b1b,0x1c1c,0x1d1d,0x1e1e,0x1f1f, 123 0x2020,0x2121,0x2222,0x2323,0x2424,0x2525,0x2626,0x2727,0x2828,0x2929,0x2a2a,0x2b2b,0x2c2c,0x2d2d,0x2e2e,0x2f2f, 124 0x3030,0x3131,0x3232,0x3333,0x3434,0x3535,0x3636,0x3737,0x3838,0x3939,0x3a3a,0x3b3b,0x3c3c,0x3d3d,0x3e3e,0x3f3f, 125 0x4040,0x4141,0x4242,0x4343,0x4444,0x4545,0x4646,0x4747,0x4848,0x4949,0x4a4a,0x4b4b,0x4c4c,0x4d4d,0x4e4e,0x4f4f, 126 0x5050,0x5151,0x5252,0x5353,0x5454,0x5555,0x5656,0x5757,0x5858,0x5959,0x5a5a,0x5b5b,0x5c5c,0x5d5d,0x5e5e,0x5f5f, 127 0x6060,0x6161,0x6262,0x6363,0x6464,0x6565,0x6666,0x6767,0x6868,0x6969,0x6a6a,0x6b6b,0x6c6c,0x6d6d,0x6e6e,0x6f6f, 128 0x7070,0x7171,0x7272,0x7373,0x7474,0x7575,0x7676,0x7777,0x7878,0x7979,0x7a7a,0x7b7b,0x7c7c,0x7d7d,0x7e7e,0x7f7f, 129 0x8080,0x8181,0x8282,0x8383,0x8484,0x8585,0x8686,0x8787,0x8888,0x8989,0x8a8a,0x8b8b,0x8c8c,0x8d8d,0x8e8e,0x8f8f, 130 0x9090,0x9191,0x9292,0x9393,0x9494,0x9595,0x9696,0x9797,0x9898,0x9999,0x9a9a,0x9b9b,0x9c9c,0x9d9d,0x9e9e,0x9f9f, 131 0xa0a0,0xa1a1,0xa2a2,0xa3a3,0xa4a4,0xa5a5,0xa6a6,0xa7a7,0xa8a8,0xa9a9,0xaaaa,0xabab,0xacac,0xadad,0xaeae,0xafaf, 132 0xb0b0,0xb1b1,0xb2b2,0xb3b3,0xb4b4,0xb5b5,0xb6b6,0xb7b7,0xb8b8,0xb9b9,0xbaba,0xbbbb,0xbcbc,0xbdbd,0xbebe,0xbfbf, 133 0xc0c0,0xc1c1,0xc2c2,0xc3c3,0xc4c4,0xc5c5,0xc6c6,0xc7c7,0xc8c8,0xc9c9,0xcaca,0xcbcb,0xcccc,0xcdcd,0xcece,0xcfcf, 134 0xd0d0,0xd1d1,0xd2d2,0xd3d3,0xd4d4,0xd5d5,0xd6d6,0xd7d7,0xd8d8,0xd9d9,0xdada,0xdbdb,0xdcdc,0xdddd,0xdede,0xdfdf, 135 0xe0e0,0xe1e1,0xe2e2,0xe3e3,0xe4e4,0xe5e5,0xe6e6,0xe7e7,0xe8e8,0xe9e9,0xeaea,0xebeb,0xecec,0xeded,0xeeee,0xefef, 136 0xf0f0,0xf1f1,0xf2f2,0xf3f3,0xf4f4,0xf5f5,0xf6f6,0xf7f7,0xf8f8,0xf9f9,0xfafa,0xfbfb,0xfcfc,0xfdfd,0xfefe,0xffff, 137},{ 138 0x0000,0x0101,0x0202,0x0303,0x0404,0x0505,0x0606,0x0707,0x0808,0x0909,0x0a0a,0x0b0b,0x0c0c,0x0d0d,0x0e0e,0x0f0f, 139 0x1010,0x1111,0x1212,0x1313,0x1414,0x1515,0x1616,0x1717,0x1818,0x1919,0x1a1a,0x1b1b,0x1c1c,0x1d1d,0x1e1e,0x1f1f, 140 0x2020,0x2121,0x2222,0x2323,0x2424,0x2525,0x2626,0x2727,0x2828,0x2929,0x2a2a,0x2b2b,0x2c2c,0x2d2d,0x2e2e,0x2f2f, 141 0x3030,0x3131,0x3232,0x3333,0x3434,0x3535,0x3636,0x3737,0x3838,0x3939,0x3a3a,0x3b3b,0x3c3c,0x3d3d,0x3e3e,0x3f3f, 142 0x4040,0x4141,0x4242,0x4343,0x4444,0x4545,0x4646,0x4747,0x4848,0x4949,0x4a4a,0x4b4b,0x4c4c,0x4d4d,0x4e4e,0x4f4f, 143 0x5050,0x5151,0x5252,0x5353,0x5454,0x5555,0x5656,0x5757,0x5858,0x5959,0x5a5a,0x5b5b,0x5c5c,0x5d5d,0x5e5e,0x5f5f, 144 0x6060,0x6161,0x6262,0x6363,0x6464,0x6565,0x6666,0x6767,0x6868,0x6969,0x6a6a,0x6b6b,0x6c6c,0x6d6d,0x6e6e,0x6f6f, 145 0x7070,0x7171,0x7272,0x7373,0x7474,0x7575,0x7676,0x7777,0x7878,0x7979,0x7a7a,0x7b7b,0x7c7c,0x7d7d,0x7e7e,0x7f7f, 146 0x8080,0x8181,0x8282,0x8383,0x8484,0x8585,0x8686,0x8787,0x8888,0x8989,0x8a8a,0x8b8b,0x8c8c,0x8d8d,0x8e8e,0x8f8f, 147 0x9090,0x9191,0x9292,0x9393,0x9494,0x9595,0x9696,0x9797,0x9898,0x9999,0x9a9a,0x9b9b,0x9c9c,0x9d9d,0x9e9e,0x9f9f, 148 0xa0a0,0xa1a1,0xa2a2,0xa3a3,0xa4a4,0xa5a5,0xa6a6,0xa7a7,0xa8a8,0xa9a9,0xaaaa,0xabab,0xacac,0xadad,0xaeae,0xafaf, 149 0xb0b0,0xb1b1,0xb2b2,0xb3b3,0xb4b4,0xb5b5,0xb6b6,0xb7b7,0xb8b8,0xb9b9,0xbaba,0xbbbb,0xbcbc,0xbdbd,0xbebe,0xbfbf, 150 0xc0c0,0xc1c1,0xc2c2,0xc3c3,0xc4c4,0xc5c5,0xc6c6,0xc7c7,0xc8c8,0xc9c9,0xcaca,0xcbcb,0xcccc,0xcdcd,0xcece,0xcfcf, 151 0xd0d0,0xd1d1,0xd2d2,0xd3d3,0xd4d4,0xd5d5,0xd6d6,0xd7d7,0xd8d8,0xd9d9,0xdada,0xdbdb,0xdcdc,0xdddd,0xdede,0xdfdf, 152 0xe0e0,0xe1e1,0xe2e2,0xe3e3,0xe4e4,0xe5e5,0xe6e6,0xe7e7,0xe8e8,0xe9e9,0xeaea,0xebeb,0xecec,0xeded,0xeeee,0xefef, 153 0xf0f0,0xf1f1,0xf2f2,0xf3f3,0xf4f4,0xf5f5,0xf6f6,0xf7f7,0xf8f8,0xf9f9,0xfafa,0xfbfb,0xfcfc,0xfdfd,0xfefe,0xffff, 154},{ 155 0x0000,0x0101,0x0202,0x0303,0x0404,0x0505,0x0606,0x0707,0x0808,0x0909,0x0a0a,0x0b0b,0x0c0c,0x0d0d,0x0e0e,0x0f0f, 156 0x1010,0x1111,0x1212,0x1313,0x1414,0x1515,0x1616,0x1717,0x1818,0x1919,0x1a1a,0x1b1b,0x1c1c,0x1d1d,0x1e1e,0x1f1f, 157 0x2020,0x2121,0x2222,0x2323,0x2424,0x2525,0x2626,0x2727,0x2828,0x2929,0x2a2a,0x2b2b,0x2c2c,0x2d2d,0x2e2e,0x2f2f, 158 0x3030,0x3131,0x3232,0x3333,0x3434,0x3535,0x3636,0x3737,0x3838,0x3939,0x3a3a,0x3b3b,0x3c3c,0x3d3d,0x3e3e,0x3f3f, 159 0x4040,0x4141,0x4242,0x4343,0x4444,0x4545,0x4646,0x4747,0x4848,0x4949,0x4a4a,0x4b4b,0x4c4c,0x4d4d,0x4e4e,0x4f4f, 160 0x5050,0x5151,0x5252,0x5353,0x5454,0x5555,0x5656,0x5757,0x5858,0x5959,0x5a5a,0x5b5b,0x5c5c,0x5d5d,0x5e5e,0x5f5f, 161 0x6060,0x6161,0x6262,0x6363,0x6464,0x6565,0x6666,0x6767,0x6868,0x6969,0x6a6a,0x6b6b,0x6c6c,0x6d6d,0x6e6e,0x6f6f, 162 0x7070,0x7171,0x7272,0x7373,0x7474,0x7575,0x7676,0x7777,0x7878,0x7979,0x7a7a,0x7b7b,0x7c7c,0x7d7d,0x7e7e,0x7f7f, 163 0x8080,0x8181,0x8282,0x8383,0x8484,0x8585,0x8686,0x8787,0x8888,0x8989,0x8a8a,0x8b8b,0x8c8c,0x8d8d,0x8e8e,0x8f8f, 164 0x9090,0x9191,0x9292,0x9393,0x9494,0x9595,0x9696,0x9797,0x9898,0x9999,0x9a9a,0x9b9b,0x9c9c,0x9d9d,0x9e9e,0x9f9f, 165 0xa0a0,0xa1a1,0xa2a2,0xa3a3,0xa4a4,0xa5a5,0xa6a6,0xa7a7,0xa8a8,0xa9a9,0xaaaa,0xabab,0xacac,0xadad,0xaeae,0xafaf, 166 0xb0b0,0xb1b1,0xb2b2,0xb3b3,0xb4b4,0xb5b5,0xb6b6,0xb7b7,0xb8b8,0xb9b9,0xbaba,0xbbbb,0xbcbc,0xbdbd,0xbebe,0xbfbf, 167 0xc0c0,0xc1c1,0xc2c2,0xc3c3,0xc4c4,0xc5c5,0xc6c6,0xc7c7,0xc8c8,0xc9c9,0xcaca,0xcbcb,0xcccc,0xcdcd,0xcece,0xcfcf, 168 0xd0d0,0xd1d1,0xd2d2,0xd3d3,0xd4d4,0xd5d5,0xd6d6,0xd7d7,0xd8d8,0xd9d9,0xdada,0xdbdb,0xdcdc,0xdddd,0xdede,0xdfdf, 169 0xe0e0,0xe1e1,0xe2e2,0xe3e3,0xe4e4,0xe5e5,0xe6e6,0xe7e7,0xe8e8,0xe9e9,0xeaea,0xebeb,0xecec,0xeded,0xeeee,0xefef, 170 0xf0f0,0xf1f1,0xf2f2,0xf3f3,0xf4f4,0xf5f5,0xf6f6,0xf7f7,0xf8f8,0xf9f9,0xfafa,0xfbfb,0xfcfc,0xfdfd,0xfefe,0xffff, 171#elif 0 172// k99 173/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ 174 0x0000,0x0056,0x012e,0x01eb,0x02c4,0x0383,0x0441,0x0507,0x05da,0x06ae,0x078c,0x086f,0x0951,0x0a36,0x0b2c,0x0c16, 175 0x0d2c,0x0e45,0x0f57,0x106e,0x118a,0x12b0,0x13d7,0x14fd,0x1627,0x1752,0x1883,0x19b9,0x1aec,0x1c29,0x1d61,0x1ea5, 176 0x1ff1,0x2136,0x2282,0x23cc,0x2518,0x2661,0x27ad,0x28f7,0x2a46,0x2b93,0x2ce2,0x2e30,0x2f7d,0x30c8,0x3212,0x3358, 177 0x349e,0x35e3,0x3726,0x3866,0x39a2,0x3ade,0x3c1a,0x3d4f,0x3e84,0x3fb6,0x40e8,0x4216,0x4347,0x4457,0x4564,0x4672, 178 0x477d,0x4886,0x498d,0x4a93,0x4b98,0x4c99,0x4d9a,0x4e9a,0x4f99,0x5098,0x5197,0x5296,0x5399,0x549d,0x55a0,0x56a4, 179 0x57a6,0x58a7,0x59a9,0x5aaa,0x5baa,0x5caa,0x5da9,0x5ea7,0x5fa6,0x60a5,0x61a1,0x629b,0x6394,0x648b,0x6582,0x6678, 180 0x676c,0x6860,0x6952,0x6a43,0x6b35,0x6c25,0x6d16,0x6e06,0x6ef6,0x6fe5,0x70d4,0x71c2,0x72b1,0x739f,0x748d,0x757a, 181 0x7666,0x7752,0x783c,0x7925,0x7a0e,0x7af5,0x7bdb,0x7cc1,0x7da6,0x7e8b,0x7f70,0x8057,0x8140,0x822b,0x831a,0x840d, 182 0x8506,0x8605,0x870a,0x8815,0x8925,0x8a3b,0x8b56,0x8c73,0x8d7e,0x8e87,0x8f90,0x9099,0x91a1,0x92a8,0x93af,0x94b5, 183 0x95bb,0x96c1,0x97c8,0x98ce,0x99d4,0x9adb,0x9be4,0x9cf5,0x9e06,0x9f16,0xa025,0xa131,0xa23a,0xa341,0xa447,0xa549, 184 0xa64b,0xa74c,0xa84c,0xa94b,0xaa4b,0xab4d,0xac57,0xad64,0xae70,0xaf7c,0xb087,0xb191,0xb29a,0xb3a2,0xb4a7,0xb5ad, 185 0xb6b1,0xb7b5,0xb8b7,0xb9ba,0xbabb,0xbbc3,0xbccb,0xbdd2,0xbed9,0xbfe0,0xc0e7,0xc1ed,0xc2f2,0xc3f7,0xc4fb,0xc5ff, 186 0xc702,0xc804,0xc906,0xca0a,0xcb16,0xcc25,0xcd36,0xce48,0xcf5c,0xd070,0xd186,0xd29c,0xd3b2,0xd4c8,0xd5dd,0xd6f0, 187 0xd802,0xd913,0xda1d,0xdb16,0xdc07,0xdcf6,0xdde2,0xdecc,0xdfb5,0xe09c,0xe184,0xe26c,0xe356,0xe442,0xe531,0xe622, 188 0xe716,0xe806,0xe8d2,0xe9a2,0xea78,0xeb52,0xec2f,0xed0e,0xedf0,0xeed2,0xefb4,0xf095,0xf176,0xf255,0xf331,0xf409, 189 0xf4dd,0xf5a7,0xf668,0xf719,0xf7ab,0xf814,0xf851,0xf88e,0xf8cb,0xf90f,0xf961,0xf9b3,0xfa1b,0xfaf0,0xfca7,0xffff, 190},{ 191 0x0000,0x0056,0x0145,0x0228,0x02d1,0x0383,0x0441,0x0506,0x05c6,0x0698,0x0769,0x0839,0x0914,0x09ec,0x0ac5,0x0bae, 192 0x0cb2,0x0dbe,0x0ed4,0x0fe8,0x10f5,0x120f,0x132d,0x1445,0x1561,0x1681,0x17a4,0x18ca,0x19f4,0x1b19,0x1c41,0x1d7d, 193 0x1ebc,0x1ff9,0x2137,0x2271,0x23b2,0x24f1,0x262e,0x276d,0x28ad,0x29ef,0x2b2d,0x2c70,0x2db0,0x2ef2,0x3028,0x3160, 194 0x3297,0x33cd,0x3502,0x3636,0x3765,0x3893,0x39c0,0x3aee,0x3c18,0x3d42,0x3e6a,0x3f93,0x40b2,0x41bc,0x42bd,0x43bc, 195 0x44bb,0x45b9,0x46b5,0x47b0,0x48aa,0x49a2,0x4a99,0x4b8f,0x4c83,0x4d77,0x4e6b,0x4f5f,0x5055,0x514d,0x5242,0x533a, 196 0x5430,0x5526,0x561c,0x5712,0x5807,0x58fd,0x59f3,0x5ae8,0x5bde,0x5cd3,0x5dc6,0x5eb7,0x5fa7,0x6096,0x6185,0x6274, 197 0x6361,0x644e,0x653b,0x6627,0x6713,0x67fe,0x68ea,0x69d5,0x6ac0,0x6bab,0x6c92,0x6d7a,0x6e61,0x6f48,0x702e,0x7115, 198 0x71fb,0x72e1,0x73c6,0x74ab,0x7590,0x7675,0x7758,0x783d,0x7920,0x7a03,0x7ae7,0x7bcb,0x7cb1,0x7d98,0x7e81,0x7f6d, 199 0x805b,0x814c,0x823e,0x8334,0x842b,0x8524,0x861e,0x871b,0x881e,0x8923,0x8a28,0x8b2d,0x8c32,0x8d37,0x8e3c,0x8f40, 200 0x9045,0x914a,0x9250,0x9356,0x945b,0x9561,0x9669,0x977c,0x9890,0x99a3,0x9ab5,0x9bc5,0x9cd5,0x9de1,0x9eec,0x9ff6, 201 0xa0fe,0xa204,0xa30a,0xa40f,0xa513,0xa61c,0xa730,0xa84a,0xa962,0xaa79,0xab8e,0xaca3,0xadb5,0xaec5,0xafd2,0xb0df, 202 0xb1ea,0xb2f4,0xb3fc,0xb505,0xb610,0xb726,0xb840,0xb959,0xba72,0xbb8a,0xbca0,0xbdb4,0xbec7,0xbfd9,0xc0e9,0xc1f9, 203 0xc307,0xc415,0xc521,0xc634,0xc756,0xc87f,0xc9a8,0xcad2,0xcbfb,0xcd25,0xce4f,0xcf78,0xd0a0,0xd1c9,0xd2f1,0xd418, 204 0xd53f,0xd665,0xd789,0xd8a4,0xd9ba,0xdac9,0xdbd3,0xdcd7,0xddd6,0xded0,0xdfc6,0xe0bc,0xe1b0,0xe2a4,0xe39a,0xe492, 205 0xe58d,0xe689,0xe77e,0xe869,0xe952,0xea3e,0xeb2d,0xec1e,0xed10,0xee03,0xeef4,0xefe2,0xf0cb,0xf1ae,0xf28d,0xf365, 206 0xf43e,0xf51d,0xf5fd,0xf6b7,0xf75d,0xf7f9,0xf885,0xf912,0xf9a6,0xfa45,0xfaf0,0xfbbb,0xfc9e,0xfd9e,0xfebe,0xffff, 207},{ 208 0x0000,0x0056,0x0123,0x01b0,0x024c,0x02f0,0x0396,0x0440,0x04e3,0x0583,0x062d,0x06dd,0x0791,0x084a,0x0904,0x09bf, 209 0x0a7f,0x0b44,0x0c0d,0x0cd7,0x0da3,0x0e73,0x0f47,0x1021,0x10f6,0x11d1,0x12ae,0x138d,0x1471,0x1561,0x165c,0x1756, 210 0x1850,0x194c,0x1a45,0x1b41,0x1c3c,0x1d37,0x1e31,0x1f2c,0x2029,0x2123,0x2220,0x231d,0x2415,0x2512,0x260e,0x270a, 211 0x2803,0x28fe,0x29f8,0x2af3,0x2bed,0x2ce6,0x2de0,0x2ed9,0x2fce,0x30b6,0x3197,0x3279,0x335a,0x343b,0x351a,0x35f9, 212 0x36d8,0x37b5,0x3891,0x396c,0x3a45,0x3b1e,0x3bf3,0x3cc8,0x3d9c,0x3e6e,0x3f3f,0x400d,0x40db,0x41a8,0x4273,0x4340, 213 0x4408,0x44d1,0x4599,0x4662,0x4729,0x47ef,0x48b2,0x4973,0x4a34,0x4af4,0x4bb6,0x4c78,0x4d3a,0x4dfb,0x4ebd,0x4f80, 214 0x5042,0x5105,0x51c8,0x528b,0x534e,0x5411,0x54d4,0x5598,0x565c,0x571e,0x57e2,0x58a6,0x596a,0x5a2e,0x5af1,0x5bb5, 215 0x5c79,0x5d3c,0x5dfc,0x5ebd,0x5f7e,0x603f,0x60fe,0x61bf,0x627f,0x633f,0x63fe,0x64be,0x657e,0x663d,0x66fd,0x67bc, 216 0x687b,0x693b,0x69fa,0x6ab9,0x6b78,0x6c37,0x6cf7,0x6db6,0x6e76,0x6f36,0x6ff5,0x70b4,0x7175,0x7233,0x72ef,0x73aa, 217 0x7466,0x7522,0x75df,0x769d,0x775c,0x781b,0x78dc,0x799d,0x7a61,0x7b26,0x7bec,0x7cb4,0x7d7e,0x7e49,0x7f16,0x7fe5, 218 0x80b5,0x8187,0x8259,0x832d,0x8403,0x84d8,0x85af,0x8687,0x875f,0x8837,0x8914,0x89f8,0x8ade,0x8bc5,0x8cac,0x8d93, 219 0x8e7b,0x8f64,0x904d,0x9138,0x9225,0x9313,0x9404,0x94f7,0x95ec,0x96e5,0x97e0,0x98df,0x99e0,0x9ae5,0x9bed,0x9cf7, 220 0x9e05,0x9f14,0xa027,0xa13d,0xa255,0xa36e,0xa488,0xa599,0xa69b,0xa79d,0xa8a0,0xa9a6,0xaaae,0xabb8,0xacc5,0xadd4, 221 0xaee7,0xaffd,0xb116,0xb232,0xb353,0xb478,0xb5a0,0xb6cc,0xb7fd,0xb932,0xba69,0xbba4,0xbce3,0xbe25,0xbf69,0xc0af, 222 0xc1fa,0xc346,0xc494,0xc5e4,0xc741,0xc8aa,0xca25,0xcbae,0xcd44,0xcee8,0xd099,0xd258,0xd423,0xd5fa,0xd7df,0xd9ce, 223 0xdbca,0xddd3,0xdfe7,0xe207,0xe435,0xe66d,0xe8b2,0xeb03,0xed64,0xefd0,0xf24e,0xf4dc,0xf77e,0xfa36,0xfd07,0xffff, 224#else 225 0x0000,0x0052,0x00a5,0x00f7,0x014a,0x0188,0x01c7,0x0205,0x0244,0x028a,0x02d1,0x0317,0x035e,0x03b1,0x0405,0x0459, 226 0x04ad,0x0507,0x0563,0x05be,0x0619,0x0663,0x06ab,0x06f4,0x073c,0x078e,0x07e0,0x0832,0x0884,0x08d4,0x0923,0x0973, 227 0x09c3,0x0a11,0x0a60,0x0aae,0x0afc,0x0b4f,0x0ba2,0x0bf5,0x0c48,0x0c97,0x0ce6,0x0d35,0x0d83,0x0dd6,0x0e29,0x0e7c, 228 0x0ecf,0x0f21,0x0f73,0x0fc5,0x1017,0x106d,0x10c3,0x111a,0x1170,0x11c3,0x1215,0x1268,0x12ba,0x130d,0x1361,0x13b5, 229 0x1409,0x145f,0x14b7,0x150e,0x1565,0x15bb,0x1610,0x1666,0x16bb,0x1712,0x176a,0x17c1,0x1818,0x186e,0x18c4,0x191a, 230 0x196f,0x19c5,0x1a1a,0x1a70,0x1ac5,0x1b1d,0x1b75,0x1bcd,0x1c26,0x1c7e,0x1cd6,0x1d2e,0x1d86,0x1ddd,0x1e35,0x1e8c, 231 0x1ee4,0x1f3b,0x1f93,0x1fea,0x2042,0x209b,0x20f5,0x214f,0x21a9,0x2201,0x2258,0x22af,0x2306,0x235f,0x23b8,0x2412, 232 0x246b,0x24c5,0x251e,0x2577,0x25d1,0x262a,0x2682,0x26da,0x2732,0x278b,0x27e4,0x283e,0x2897,0x28f0,0x2949,0x29a3, 233 0x29fc,0x2a55,0x2aae,0x2b06,0x2b5f,0x2bb7,0x2c0f,0x2c67,0x2cbf,0x2d18,0x2d71,0x2dca,0x2e23,0x2e7c,0x2ed4,0x2f2d, 234 0x2f86,0x2fde,0x3035,0x308c,0x30e4,0x313b,0x3194,0x31ec,0x3244,0x329c,0x32f5,0x334d,0x33a5,0x33fd,0x3454,0x34ab, 235 0x3502,0x3559,0x35b1,0x3609,0x3661,0x36b7,0x370c,0x3761,0x37b6,0x3804,0x384d,0x3896,0x38df,0x3927,0x396e,0x39b5, 236 0x39fc,0x3a42,0x3a88,0x3ace,0x3b14,0x3b5a,0x3ba0,0x3be6,0x3c2c,0x3c73,0x3cb9,0x3cff,0x3d45,0x3d8b,0x3dd1,0x3e18, 237 0x3e5e,0x3ea4,0x3eea,0x3f30,0x3f76,0x3fbc,0x4002,0x4048,0x408d,0x40d3,0x411a,0x4160,0x41a6,0x41ec,0x4232,0x4277, 238 0x42bd,0x4303,0x4348,0x438e,0x43d3,0x4419,0x445e,0x44a4,0x44e9,0x452f,0x4575,0x45bb,0x4600,0x4646,0x468b,0x46d1, 239 0x4716,0x475b,0x47a0,0x47e5,0x482a,0x486f,0x48b4,0x48f8,0x493d,0x4981,0x49c6,0x4a0a,0x4a4f,0x4a94,0x4ad9,0x4b1e, 240 0x4b63,0x4ba8,0x4bec,0x4c31,0x4c75,0x4cba,0x4cfe,0x4d42,0x4d87,0x4dcb,0x4e10,0x4e54,0x4e99,0x4edd,0x4f21,0x4f65, 241 0x4fa9,0x4fed,0x5032,0x5076,0x50ba,0x50fe,0x5142,0x5186,0x51ca,0x520e,0x5251,0x5295,0x52d8,0x531c,0x535f,0x53a3, 242 0x53e6,0x542a,0x546e,0x54b1,0x54f5,0x5538,0x557c,0x55bf,0x5603,0x5646,0x5689,0x56cc,0x570f,0x5753,0x5796,0x57d9, 243 0x581c,0x5860,0x58a3,0x58e5,0x5928,0x596b,0x59ae,0x59f1,0x5a34,0x5a77,0x5aba,0x5afd,0x5b40,0x5b82,0x5bc5,0x5c08, 244 0x5c4b,0x5c8e,0x5cd0,0x5d13,0x5d55,0x5d98,0x5dda,0x5e1d,0x5e5f,0x5ea2,0x5ee5,0x5f27,0x5f6a,0x5fac,0x5fee,0x6031, 245 0x6073,0x60b5,0x60f8,0x613b,0x617d,0x61c0,0x6202,0x6244,0x6286,0x62c8,0x630a,0x634c,0x638f,0x63d1,0x6414,0x6456, 246 0x6499,0x64db,0x651c,0x655d,0x659e,0x65df,0x661d,0x665c,0x669a,0x66d9,0x6716,0x6753,0x6790,0x67cd,0x680a,0x6847, 247 0x6884,0x68c0,0x68fd,0x693a,0x6978,0x69b5,0x69f2,0x6a30,0x6a6d,0x6aab,0x6ae8,0x6b26,0x6b64,0x6ba1,0x6bdf,0x6c1c, 248 0x6c5a,0x6c97,0x6cd5,0x6d12,0x6d4f,0x6d8d,0x6dca,0x6e08,0x6e45,0x6e83,0x6ec1,0x6eff,0x6f3d,0x6f7b,0x6fb9,0x6ff6, 249 0x7034,0x7072,0x70af,0x70ed,0x712b,0x7169,0x71a7,0x71e5,0x7223,0x7261,0x729f,0x72de,0x731d,0x735b,0x739a,0x73d8, 250 0x7416,0x7455,0x7493,0x74d2,0x7511,0x7550,0x758e,0x75cd,0x760c,0x764b,0x768a,0x76c9,0x7708,0x7747,0x7786,0x77c6, 251 0x7805,0x7844,0x7884,0x78c3,0x7902,0x7942,0x7981,0x79c1,0x7a01,0x7a41,0x7a81,0x7ac1,0x7b01,0x7b41,0x7b81,0x7bc1, 252 0x7c01,0x7c41,0x7c82,0x7cc2,0x7d03,0x7d43,0x7d84,0x7dc4,0x7e05,0x7e46,0x7e86,0x7ec7,0x7f09,0x7f4a,0x7f8b,0x7fcc, 253 0x800d,0x804f,0x8090,0x80d2,0x8113,0x8155,0x8197,0x81d8,0x821a,0x825c,0x829e,0x82e0,0x8321,0x8363,0x83a5,0x83e8, 254 0x842a,0x846c,0x84ae,0x84f0,0x8532,0x8574,0x85b6,0x85f9,0x863c,0x867f,0x86c1,0x8704,0x8746,0x8789,0x87cc,0x880e, 255 0x8851,0x8894,0x88d7,0x891a,0x895d,0x89a0,0x89e3,0x8a27,0x8a6a,0x8aad,0x8af1,0x8b34,0x8b78,0x8bbb,0x8bff,0x8c42, 256 0x8c85,0x8cc8,0x8d0b,0x8d4f,0x8d92,0x8dd6,0x8e19,0x8e5d,0x8ea1,0x8ee5,0x8f29,0x8f6c,0x8fb0,0x8ff4,0x9038,0x907b, 257 0x90bf,0x9102,0x9146,0x918a,0x91ce,0x9211,0x9255,0x9299,0x92dd,0x9321,0x9364,0x93a7,0x93eb,0x942e,0x9471,0x94b5, 258 0x94f9,0x953c,0x9580,0x95c3,0x9606,0x9649,0x968d,0x96d0,0x9713,0x9757,0x979a,0x97dd,0x9821,0x9864,0x98a7,0x98eb, 259 0x992e,0x9971,0x99b4,0x99f7,0x9a3a,0x9a7d,0x9ac0,0x9b03,0x9b46,0x9b89,0x9bcc,0x9c0e,0x9c51,0x9c94,0x9cd7,0x9d1a, 260 0x9d5c,0x9d9f,0x9de2,0x9e25,0x9e67,0x9eaa,0x9eec,0x9f2e,0x9f71,0x9fb3,0x9ff5,0xa038,0xa07b,0xa0bd,0xa0ff,0xa141, 261 0xa183,0xa1c5,0xa207,0xa249,0xa28b,0xa2ce,0xa310,0xa352,0xa393,0xa3d5,0xa417,0xa459,0xa49b,0xa4dd,0xa51e,0xa560, 262 0xa5a1,0xa5e3,0xa624,0xa666,0xa6a8,0xa6e9,0xa72b,0xa76c,0xa7ad,0xa7ef,0xa830,0xa871,0xa8b2,0xa8f3,0xa934,0xa975, 263 0xa9b6,0xa9f7,0xaa38,0xaa79,0xaaba,0xaafb,0xab3b,0xab7c,0xabbd,0xabfe,0xac3f,0xac7f,0xacc0,0xad00,0xad41,0xad81, 264 0xadc1,0xae02,0xae42,0xae82,0xaec3,0xaf03,0xaf43,0xaf84,0xafc4,0xb004,0xb045,0xb085,0xb0c5,0xb105,0xb145,0xb185, 265 0xb1c5,0xb205,0xb245,0xb285,0xb2c5,0xb304,0xb344,0xb384,0xb3c4,0xb404,0xb444,0xb484,0xb4c4,0xb503,0xb543,0xb582, 266 0xb5c2,0xb601,0xb641,0xb681,0xb6c0,0xb700,0xb73f,0xb77f,0xb7be,0xb7fe,0xb83d,0xb87d,0xb8bc,0xb8fb,0xb93b,0xb97a, 267 0xb9b9,0xb9f9,0xba38,0xba78,0xbab7,0xbaf7,0xbb36,0xbb76,0xbbb6,0xbbf6,0xbc36,0xbc77,0xbcb8,0xbcf9,0xbd3a,0xbd7b, 268 0xbdbd,0xbdfe,0xbe40,0xbe82,0xbec3,0xbf05,0xbf46,0xbf88,0xbfc9,0xc00a,0xc04b,0xc08d,0xc0cf,0xc111,0xc153,0xc194, 269 0xc1d6,0xc218,0xc25a,0xc29b,0xc2dd,0xc31f,0xc360,0xc3a2,0xc3e3,0xc425,0xc466,0xc4a8,0xc4e9,0xc52a,0xc56c,0xc5ad, 270 0xc5ef,0xc630,0xc672,0xc6b3,0xc6f4,0xc735,0xc776,0xc7b7,0xc7f8,0xc839,0xc87a,0xc8bb,0xc8fc,0xc93d,0xc97f,0xc9c0, 271 0xca01,0xca42,0xca83,0xcac3,0xcb04,0xcb45,0xcb85,0xcbc5,0xcc06,0xcc46,0xcc86,0xccc7,0xcd07,0xcd47,0xcd88,0xcdc8, 272 0xce07,0xce47,0xce87,0xcec7,0xcf06,0xcf46,0xcf85,0xcfc5,0xd004,0xd043,0xd083,0xd0c2,0xd100,0xd13f,0xd17e,0xd1bd, 273 0xd1fb,0xd23a,0xd278,0xd2b7,0xd2f5,0xd333,0xd372,0xd3b0,0xd3ed,0xd42b,0xd469,0xd4a7,0xd4e4,0xd521,0xd55e,0xd59c, 274 0xd5d9,0xd616,0xd653,0xd690,0xd6cc,0xd709,0xd745,0xd782,0xd7be,0xd7fa,0xd837,0xd873,0xd8ae,0xd8ea,0xd926,0xd962, 275 0xd99d,0xd9d9,0xda14,0xda50,0xda8b,0xdac7,0xdb02,0xdb3d,0xdb77,0xdbb2,0xdbec,0xdc27,0xdc62,0xdc9c,0xdcd7,0xdd11, 276 0xdd4b,0xdd85,0xddbe,0xddf8,0xde32,0xde6b,0xdea5,0xdede,0xdf18,0xdf52,0xdf8b,0xdfc4,0xdffd,0xe037,0xe070,0xe0a9, 277 0xe0e2,0xe11b,0xe154,0xe18d,0xe1c5,0xe1fe,0xe237,0xe26f,0xe2a7,0xe2df,0xe317,0xe34f,0xe388,0xe3c0,0xe3f8,0xe430, 278 0xe468,0xe49f,0xe4d7,0xe50b,0xe53c,0xe56c,0xe59d,0xe5ce,0xe5fe,0xe62f,0xe65f,0xe690,0xe6c1,0xe6f1,0xe722,0xe752, 279 0xe783,0xe7b3,0xe7e3,0xe814,0xe844,0xe874,0xe8a5,0xe8d5,0xe905,0xe935,0xe965,0xe995,0xe9c6,0xe9f6,0xea26,0xea56, 280 0xea86,0xeab5,0xeae5,0xeb15,0xeb45,0xeb75,0xeba5,0xebd4,0xec04,0xec33,0xec63,0xec92,0xecc1,0xecf0,0xed1f,0xed4e, 281 0xed7d,0xedac,0xeddb,0xee0a,0xee38,0xee67,0xee95,0xeec4,0xeef2,0xef1f,0xef4d,0xef7b,0xefa9,0xefd7,0xf005,0xf032, 282 0xf060,0xf08d,0xf0bb,0xf0e8,0xf114,0xf140,0xf16d,0xf199,0xf1c5,0xf1f1,0xf21d,0xf249,0xf275,0xf2a1,0xf2cd,0xf2f9, 283 0xf323,0xf34e,0xf378,0xf3a3,0xf3cd,0xf3f7,0xf421,0xf44b,0xf475,0xf49f,0xf4c9,0xf4f3,0xf51b,0xf544,0xf56c,0xf595, 284 0xf5bd,0xf5e5,0xf60d,0xf635,0xf65d,0xf684,0xf6ab,0xf6d3,0xf6f9,0xf71f,0xf746,0xf76c,0xf792,0xf7b8,0xf7df,0xf804, 285 0xf829,0xf84e,0xf872,0xf897,0xf8bb,0xf8e0,0xf904,0xf928,0xf94c,0xf96f,0xf993,0xf9b6,0xf9d8,0xf9fb,0xfa1e,0xfa40, 286 0xfa62,0xfa85,0xfaa7,0xfac9,0xfaea,0xfb0c,0xfb2d,0xfb4e,0xfb6f,0xfb90,0xfbb0,0xfbd1,0xfbf1,0xfc11,0xfc31,0xfc50, 287 0xfc70,0xfc8f,0xfcaf,0xfcce,0xfced,0xfd0b,0xfd2a,0xfd49,0xfd67,0xfd85,0xfda3,0xfdc1,0xfddf,0xfdfd,0xfe1a,0xfe38, 288 0xfe55,0xfe72,0xfe8f,0xfeac,0xfec8,0xfee5,0xff02,0xff1f,0xff3b,0xff57,0xff73,0xff8f,0xffab,0xffc7,0xffe3,0xffff, 289},{ 290 0x0000,0x0052,0x00a5,0x00f7,0x014a,0x0188,0x01c7,0x0205,0x0244,0x028a,0x02d1,0x0317,0x035e,0x03b1,0x0405,0x0459, 291 0x04ad,0x0507,0x0563,0x05be,0x0619,0x0663,0x06ab,0x06f4,0x073c,0x078e,0x07e0,0x0832,0x0884,0x08d4,0x0923,0x0973, 292 0x09c3,0x0a11,0x0a60,0x0aae,0x0afc,0x0b51,0x0ba6,0x0bfb,0x0c50,0x0ca0,0x0cf0,0x0d3f,0x0d8f,0x0de4,0x0e39,0x0e8e, 293 0x0ee3,0x0f35,0x0f86,0x0fd8,0x1029,0x107b,0x10cd,0x111f,0x1171,0x11c6,0x121b,0x1271,0x12c6,0x131b,0x1370,0x13c4, 294 0x1419,0x146d,0x14c2,0x1517,0x156c,0x15c1,0x1616,0x166b,0x16c0,0x1715,0x176c,0x17c2,0x1818,0x186f,0x18c6,0x191d, 295 0x1974,0x19cb,0x1a22,0x1a7a,0x1ad1,0x1b29,0x1b80,0x1bd8,0x1c30,0x1c87,0x1cde,0x1d35,0x1d8c,0x1de4,0x1e3d,0x1e96, 296 0x1eee,0x1f46,0x1f9e,0x1ff5,0x204d,0x20a5,0x20fd,0x2155,0x21ad,0x2205,0x225d,0x22b6,0x230e,0x2367,0x23bf,0x2418, 297 0x2470,0x24ca,0x2524,0x257e,0x25d8,0x2631,0x2689,0x26e1,0x2739,0x2792,0x27ea,0x2843,0x289b,0x28f4,0x294c,0x29a4, 298 0x29fc,0x2a55,0x2aae,0x2b06,0x2b5f,0x2bb7,0x2c0f,0x2c67,0x2cbf,0x2d17,0x2d6e,0x2dc6,0x2e1d,0x2e76,0x2ece,0x2f27, 299 0x2f7f,0x2fd7,0x302e,0x3086,0x30dd,0x3135,0x318d,0x31e5,0x323d,0x3295,0x32ec,0x3343,0x339a,0x33f1,0x3448,0x349f, 300 0x34f6,0x354d,0x35a3,0x35fa,0x3650,0x36a5,0x36f8,0x374c,0x379f,0x37ec,0x3833,0x387b,0x38c2,0x3907,0x394a,0x398d, 301 0x39d0,0x3a13,0x3a56,0x3a99,0x3adc,0x3b1f,0x3b62,0x3ba5,0x3be7,0x3c2a,0x3c6d,0x3caf,0x3cf2,0x3d34,0x3d78,0x3dbb, 302 0x3dfe,0x3e40,0x3e82,0x3ec4,0x3f06,0x3f49,0x3f8c,0x3fce,0x4011,0x4054,0x4096,0x40d9,0x411c,0x415e,0x41a0,0x41e3, 303 0x4225,0x4267,0x42a9,0x42ea,0x432c,0x436d,0x43af,0x43f1,0x4434,0x4476,0x44b8,0x44fb,0x453d,0x4580,0x45c1,0x4603, 304 0x4644,0x4686,0x46c7,0x4708,0x474a,0x478b,0x47cd,0x480e,0x4850,0x4891,0x48d3,0x4914,0x4956,0x4997,0x49d9,0x4a1a, 305 0x4a5b,0x4a9d,0x4add,0x4b1e,0x4b5f,0x4ba0,0x4be1,0x4c23,0x4c64,0x4ca5,0x4ce6,0x4d26,0x4d67,0x4da7,0x4de8,0x4e29, 306 0x4e6a,0x4eaa,0x4eeb,0x4f2c,0x4f6c,0x4fad,0x4fed,0x502e,0x506e,0x50af,0x50ef,0x512f,0x5170,0x51b0,0x51f0,0x5231, 307 0x5271,0x52b1,0x52f1,0x5331,0x5371,0x53b1,0x53f1,0x5431,0x5471,0x54b1,0x54f1,0x5531,0x5571,0x55b1,0x55f1,0x5630, 308 0x5670,0x56af,0x56ef,0x572f,0x576f,0x57af,0x57ee,0x582e,0x586e,0x58ae,0x58ee,0x592d,0x596d,0x59ad,0x59ed,0x5a2c, 309 0x5a6c,0x5aab,0x5aeb,0x5b2a,0x5b6a,0x5ba9,0x5be9,0x5c29,0x5c68,0x5ca8,0x5ce7,0x5d26,0x5d66,0x5da5,0x5de4,0x5e24, 310 0x5e63,0x5ea2,0x5ee2,0x5f21,0x5f60,0x5f9f,0x5fdf,0x601e,0x605d,0x609d,0x60dc,0x611c,0x615b,0x619b,0x61db,0x621a, 311 0x625a,0x6299,0x62d8,0x6317,0x6356,0x6396,0x63d4,0x6412,0x6450,0x648e,0x64cc,0x6509,0x6547,0x6585,0x65c3,0x6601, 312 0x663f,0x667c,0x66ba,0x66f7,0x6735,0x6773,0x67b1,0x67ef,0x682e,0x686c,0x68aa,0x68e8,0x6927,0x6965,0x69a3,0x69e1, 313 0x6a1f,0x6a5c,0x6a9a,0x6ad9,0x6b17,0x6b55,0x6b93,0x6bd1,0x6c10,0x6c4e,0x6c8c,0x6cca,0x6d08,0x6d46,0x6d84,0x6dc2, 314 0x6e00,0x6e3e,0x6e7d,0x6ebc,0x6efa,0x6f39,0x6f77,0x6fb6,0x6ff4,0x7033,0x7071,0x70b0,0x70ef,0x712d,0x716c,0x71aa, 315 0x71e9,0x7227,0x7266,0x72a5,0x72e4,0x7323,0x7361,0x73a0,0x73de,0x741d,0x745c,0x749b,0x74d9,0x7518,0x7557,0x7596, 316 0x75d5,0x7614,0x7653,0x7693,0x76d2,0x7711,0x7750,0x778e,0x77cd,0x780c,0x784b,0x788a,0x78ca,0x7909,0x7948,0x7987, 317 0x79c6,0x7a05,0x7a45,0x7a84,0x7ac4,0x7b04,0x7b43,0x7b82,0x7bc2,0x7c01,0x7c40,0x7c80,0x7cbf,0x7cff,0x7d3f,0x7d7e, 318 0x7dbe,0x7dfd,0x7e3d,0x7e7c,0x7ebc,0x7efc,0x7f3b,0x7f7b,0x7fbb,0x7ffb,0x803b,0x807a,0x80ba,0x80fa,0x813a,0x817a, 319 0x81ba,0x81fa,0x823a,0x827a,0x82ba,0x82f9,0x8339,0x8379,0x83b9,0x83f9,0x8439,0x8479,0x84b9,0x84f9,0x8539,0x8579, 320 0x85b9,0x85f9,0x8639,0x8679,0x86b9,0x86f8,0x8739,0x8779,0x87b9,0x87fa,0x883a,0x887a,0x88ba,0x88fb,0x893b,0x897b, 321 0x89ba,0x89fa,0x8a3a,0x8a7a,0x8aba,0x8afa,0x8b3b,0x8b7b,0x8bbb,0x8bfb,0x8c3c,0x8c7d,0x8cbe,0x8cff,0x8d41,0x8d83, 322 0x8dc5,0x8e07,0x8e4a,0x8e8c,0x8ecf,0x8f12,0x8f55,0x8f98,0x8fdb,0x901e,0x9061,0x90a4,0x90e7,0x9129,0x916c,0x91af, 323 0x91f2,0x9235,0x9278,0x92bc,0x92ff,0x9342,0x9385,0x93c8,0x940b,0x944e,0x9491,0x94d4,0x9517,0x955a,0x959d,0x95e0, 324 0x9623,0x9666,0x96a9,0x96ed,0x9730,0x9773,0x97b7,0x97fa,0x983d,0x9880,0x98c3,0x9906,0x9949,0x998d,0x99d0,0x9a14, 325 0x9a57,0x9a9b,0x9ade,0x9b22,0x9b65,0x9ba8,0x9beb,0x9c2f,0x9c72,0x9cb5,0x9cf9,0x9d3d,0x9d80,0x9dc4,0x9e08,0x9e4c, 326 0x9e8f,0x9ed3,0x9f16,0x9f5a,0x9f9e,0x9fe2,0xa025,0xa069,0xa0ad,0xa0f1,0xa135,0xa178,0xa1bc,0xa200,0xa244,0xa288, 327 0xa2cc,0xa310,0xa354,0xa398,0xa3dc,0xa420,0xa464,0xa4a8,0xa4ec,0xa530,0xa575,0xa5b9,0xa5fd,0xa641,0xa686,0xa6ca, 328 0xa70e,0xa753,0xa797,0xa7dc,0xa821,0xa865,0xa8aa,0xa8ee,0xa932,0xa976,0xa9ba,0xa9ff,0xaa44,0xaa88,0xaacd,0xab11, 329 0xab56,0xab9a,0xabdf,0xac24,0xac68,0xacad,0xacf2,0xad37,0xad7c,0xadc1,0xae06,0xae4b,0xae90,0xaed5,0xaf19,0xaf5e, 330 0xafa3,0xafe8,0xb02d,0xb072,0xb0b7,0xb0fc,0xb141,0xb186,0xb1cb,0xb211,0xb256,0xb29b,0xb2e0,0xb325,0xb36a,0xb3af, 331 0xb3f4,0xb439,0xb47e,0xb4c3,0xb508,0xb54e,0xb593,0xb5d8,0xb61e,0xb663,0xb6a9,0xb6ee,0xb732,0xb777,0xb7bc,0xb802, 332 0xb848,0xb88d,0xb8d3,0xb918,0xb95e,0xb9a3,0xb9e8,0xba2d,0xba72,0xbab7,0xbafc,0xbb3e,0xbb81,0xbbc3,0xbc06,0xbc48, 333 0xbc8a,0xbccc,0xbd0e,0xbd50,0xbd92,0xbdd3,0xbe15,0xbe57,0xbe99,0xbedb,0xbf1c,0xbf5f,0xbfa1,0xbfe3,0xc026,0xc068, 334 0xc0aa,0xc0ed,0xc12f,0xc171,0xc1b3,0xc1f6,0xc238,0xc27a,0xc2bc,0xc2fe,0xc340,0xc383,0xc3c5,0xc407,0xc449,0xc48c, 335 0xc4ce,0xc510,0xc552,0xc594,0xc5d6,0xc619,0xc65b,0xc69d,0xc6e0,0xc722,0xc764,0xc7a6,0xc7e9,0xc82b,0xc86d,0xc8b0, 336 0xc8f2,0xc935,0xc978,0xc9ba,0xc9fc,0xca3e,0xca81,0xcac3,0xcb05,0xcb48,0xcb8a,0xcbcc,0xcc0f,0xcc51,0xcc93,0xccd5, 337 0xcd17,0xcd59,0xcd9c,0xcdde,0xce20,0xce62,0xcea5,0xcee7,0xcf29,0xcf6b,0xcfad,0xcfef,0xd031,0xd073,0xd0b5,0xd0f7, 338 0xd139,0xd17b,0xd1bd,0xd1ff,0xd241,0xd283,0xd2c5,0xd307,0xd349,0xd38b,0xd3cd,0xd40f,0xd450,0xd492,0xd4d3,0xd515, 339 0xd556,0xd598,0xd5d9,0xd61b,0xd65c,0xd69d,0xd6df,0xd720,0xd762,0xd7a3,0xd7e5,0xd826,0xd868,0xd8aa,0xd8eb,0xd92c, 340 0xd96d,0xd9ae,0xd9f0,0xda31,0xda72,0xdab3,0xdaf4,0xdb35,0xdb75,0xdbb6,0xdbf7,0xdc38,0xdc79,0xdcba,0xdcfa,0xdd3b, 341 0xdd7c,0xddbc,0xddfd,0xde3d,0xde7e,0xdebe,0xdeff,0xdf3f,0xdf80,0xdfc0,0xe000,0xe041,0xe081,0xe0c2,0xe102,0xe143, 342 0xe184,0xe1c4,0xe205,0xe245,0xe285,0xe2c5,0xe305,0xe345,0xe385,0xe3c5,0xe404,0xe444,0xe484,0xe4c5,0xe505,0xe544, 343 0xe582,0xe5c0,0xe5ff,0xe63a,0xe672,0xe6aa,0xe6e2,0xe719,0xe750,0xe787,0xe7bd,0xe7f4,0xe82a,0xe860,0xe896,0xe8cc, 344 0xe901,0xe937,0xe96d,0xe9a2,0xe9d8,0xea0d,0xea43,0xea78,0xeaad,0xeae2,0xeb17,0xeb4b,0xeb80,0xebb5,0xebe9,0xec1e, 345 0xec52,0xec86,0xecba,0xecee,0xed21,0xed55,0xed89,0xedbc,0xedef,0xee22,0xee54,0xee87,0xeeb9,0xeeec,0xef1e,0xef50, 346 0xef82,0xefb3,0xefe5,0xf016,0xf047,0xf078,0xf0a9,0xf0d9,0xf109,0xf139,0xf168,0xf198,0xf1c7,0xf1f6,0xf225,0xf254, 347 0xf282,0xf2b1,0xf2df,0xf30d,0xf339,0xf366,0xf393,0xf3bf,0xf3eb,0xf417,0xf443,0xf46e,0xf499,0xf4c4,0xf4f0,0xf51a, 348 0xf544,0xf56e,0xf598,0xf5c1,0xf5ea,0xf612,0xf63b,0xf663,0xf68b,0xf6b3,0xf6da,0xf702,0xf727,0xf74d,0xf773,0xf798, 349 0xf7bd,0xf7e3,0xf808,0xf82c,0xf850,0xf874,0xf897,0xf8bb,0xf8dd,0xf900,0xf923,0xf945,0xf967,0xf988,0xf9a9,0xf9cb, 350 0xf9ea,0xfa0a,0xfa2a,0xfa4a,0xfa69,0xfa88,0xfaa7,0xfac5,0xfae3,0xfb01,0xfb1f,0xfb3d,0xfb5a,0xfb76,0xfb93,0xfbaf, 351 0xfbcb,0xfbe7,0xfc03,0xfc1f,0xfc39,0xfc53,0xfc6d,0xfc88,0xfca2,0xfcbc,0xfcd7,0xfcf1,0xfd09,0xfd21,0xfd3a,0xfd52, 352 0xfd6a,0xfd82,0xfd9a,0xfdb1,0xfdc9,0xfde1,0xfdf8,0xfe10,0xfe25,0xfe3b,0xfe50,0xfe66,0xfe7b,0xfe91,0xfea7,0xfebd, 353 0xfed2,0xfee7,0xfefd,0xff12,0xff26,0xff39,0xff4d,0xff60,0xff74,0xff88,0xff9c,0xffb0,0xffc3,0xffd7,0xffeb,0xffff, 354},{ 355 0x0000,0x0049,0x0092,0x00db,0x0124,0x014b,0x0173,0x019a,0x01c2,0x01f6,0x022a,0x025f,0x0294,0x02cf,0x030b,0x0346, 356 0x0382,0x03c1,0x0400,0x043f,0x047f,0x04bc,0x04f9,0x0536,0x0573,0x05af,0x05eb,0x0627,0x0663,0x069f,0x06dc,0x0718, 357 0x0755,0x0790,0x07cc,0x0808,0x0843,0x0880,0x08bd,0x08fa,0x0937,0x0973,0x09af,0x09eb,0x0a27,0x0a65,0x0aa3,0x0ae1, 358 0x0b20,0x0b5f,0x0b9f,0x0bdf,0x0c1f,0x0c5d,0x0c9c,0x0cda,0x0d18,0x0d58,0x0d98,0x0dd7,0x0e17,0x0e56,0x0e95,0x0ed4, 359 0x0f13,0x0f53,0x0f93,0x0fd3,0x1014,0x1055,0x1097,0x10d8,0x111a,0x115a,0x119b,0x11dc,0x121c,0x125d,0x129f,0x12e1, 360 0x1322,0x1363,0x13a4,0x13e5,0x1425,0x1467,0x14aa,0x14ec,0x152e,0x1571,0x15b4,0x15f7,0x1639,0x167c,0x16be,0x1700, 361 0x1743,0x1786,0x17c9,0x180c,0x184f,0x1891,0x18d4,0x1917,0x1959,0x199c,0x19e0,0x1a23,0x1a67,0x1aab,0x1aef,0x1b33, 362 0x1b77,0x1bba,0x1bfe,0x1c41,0x1c84,0x1cc7,0x1d0a,0x1d4d,0x1d90,0x1dd3,0x1e16,0x1e5a,0x1e9d,0x1ee0,0x1f24,0x1f68, 363 0x1fab,0x1fef,0x2032,0x2076,0x20b9,0x20fd,0x2141,0x2185,0x21c8,0x220b,0x224e,0x2291,0x22d3,0x2316,0x2359,0x239c, 364 0x23df,0x2422,0x2466,0x24aa,0x24ed,0x2531,0x2574,0x25b8,0x25fb,0x263e,0x2680,0x26c2,0x2703,0x2746,0x2788,0x27cb, 365 0x280e,0x2851,0x2894,0x28d8,0x291b,0x295d,0x299f,0x29e0,0x2a21,0x2a5c,0x2a91,0x2ac6,0x2afb,0x2b2f,0x2b63,0x2b97, 366 0x2bcb,0x2bfe,0x2c32,0x2c65,0x2c98,0x2ccc,0x2cff,0x2d33,0x2d67,0x2d9a,0x2dce,0x2e02,0x2e36,0x2e6a,0x2e9e,0x2ed1, 367 0x2f05,0x2f39,0x2f6c,0x2f9f,0x2fd2,0x3005,0x3038,0x306b,0x309e,0x30d2,0x3105,0x3139,0x316d,0x31a0,0x31d3,0x3207, 368 0x323a,0x326d,0x32a0,0x32d3,0x3306,0x3339,0x336b,0x339e,0x33d0,0x3403,0x3436,0x3469,0x349c,0x34d0,0x3503,0x3536, 369 0x3569,0x359c,0x35ce,0x3600,0x3633,0x3665,0x3698,0x36ca,0x36fd,0x372f,0x3762,0x3794,0x37c6,0x37f8,0x382a,0x385d, 370 0x388f,0x38c1,0x38f3,0x3925,0x3958,0x398a,0x39bc,0x39ee,0x3a20,0x3a52,0x3a84,0x3ab5,0x3ae7,0x3b18,0x3b4a,0x3b7c, 371 0x3bad,0x3bdf,0x3c10,0x3c41,0x3c73,0x3ca4,0x3cd6,0x3d08,0x3d3a,0x3d6c,0x3d9d,0x3dce,0x3e00,0x3e31,0x3e62,0x3e93, 372 0x3ec4,0x3ef5,0x3f26,0x3f58,0x3f89,0x3fba,0x3feb,0x401b,0x404c,0x407d,0x40ae,0x40df,0x4110,0x4141,0x4171,0x41a2, 373 0x41d2,0x4203,0x4234,0x4265,0x4296,0x42c6,0x42f7,0x4327,0x4357,0x4388,0x43b8,0x43e8,0x4419,0x4449,0x447a,0x44aa, 374 0x44db,0x450c,0x453c,0x456d,0x459d,0x45ce,0x45fe,0x462e,0x465e,0x468e,0x46bf,0x46ef,0x471f,0x474f,0x477f,0x47af, 375 0x47df,0x480f,0x483f,0x4870,0x48a0,0x48d0,0x4900,0x4930,0x4960,0x4990,0x49c0,0x49f0,0x4a21,0x4a51,0x4a81,0x4ab1, 376 0x4ae1,0x4b11,0x4b41,0x4b71,0x4ba1,0x4bd2,0x4c02,0x4c33,0x4c63,0x4c94,0x4cc5,0x4cf6,0x4d27,0x4d58,0x4d89,0x4dba, 377 0x4dea,0x4e1b,0x4e4b,0x4e7c,0x4ead,0x4edd,0x4f0e,0x4f3f,0x4f71,0x4fa2,0x4fd3,0x5004,0x5035,0x5066,0x5097,0x50c7, 378 0x50f8,0x5128,0x5159,0x518a,0x51bb,0x51ec,0x521d,0x524e,0x527e,0x52af,0x52e0,0x5311,0x5342,0x5373,0x53a3,0x53d4, 379 0x5405,0x5435,0x5466,0x5497,0x54c8,0x54f9,0x5529,0x555a,0x558b,0x55bc,0x55ed,0x561e,0x564f,0x567f,0x56b0,0x56e1, 380 0x5712,0x5743,0x5774,0x57a4,0x57d5,0x5805,0x5836,0x5867,0x5898,0x58c9,0x58f9,0x592a,0x595b,0x598b,0x59bc,0x59ed, 381 0x5a1e,0x5a4f,0x5a7f,0x5ab0,0x5ae0,0x5b11,0x5b42,0x5b72,0x5ba3,0x5bd3,0x5c04,0x5c34,0x5c65,0x5c95,0x5cc6,0x5cf6, 382 0x5d27,0x5d57,0x5d88,0x5db9,0x5de9,0x5e1a,0x5e4a,0x5e7b,0x5eac,0x5edc,0x5f0d,0x5f3d,0x5f6d,0x5f9e,0x5fce,0x5ffe, 383 0x602f,0x605f,0x608f,0x60c0,0x60f0,0x6121,0x6151,0x6181,0x61b2,0x61e2,0x6212,0x6243,0x6273,0x62a3,0x62d4,0x6304, 384 0x6335,0x6365,0x6395,0x63c5,0x63f5,0x6425,0x6455,0x6486,0x64b6,0x64e6,0x6516,0x6546,0x6576,0x65a6,0x65d6,0x6606, 385 0x6637,0x6667,0x6697,0x66c7,0x66f6,0x6726,0x6756,0x6786,0x67b6,0x67e7,0x6817,0x6847,0x6878,0x68a8,0x68d8,0x6908, 386 0x6938,0x6968,0x6997,0x69c7,0x69f7,0x6a27,0x6a57,0x6a87,0x6ab7,0x6ae6,0x6b17,0x6b47,0x6b77,0x6ba8,0x6bd8,0x6c08, 387 0x6c39,0x6c69,0x6c9a,0x6ccb,0x6cfc,0x6d2d,0x6d5e,0x6d8f,0x6dc0,0x6df1,0x6e22,0x6e53,0x6e84,0x6eb5,0x6ee6,0x6f18, 388 0x6f49,0x6f7b,0x6fad,0x6fde,0x700f,0x7041,0x7072,0x70a3,0x70d5,0x7106,0x7138,0x7169,0x719b,0x71cc,0x71fe,0x7230, 389 0x7262,0x7294,0x72c7,0x72f9,0x732b,0x735d,0x738f,0x73c1,0x73f3,0x7425,0x7457,0x748a,0x74bc,0x74ef,0x7521,0x7554, 390 0x7587,0x75ba,0x75ec,0x761f,0x7652,0x7685,0x76b8,0x76eb,0x771e,0x7750,0x7783,0x77b7,0x77ea,0x781d,0x7851,0x7884, 391 0x78b8,0x78eb,0x791e,0x7952,0x7986,0x79ba,0x79ee,0x7a22,0x7a56,0x7a8a,0x7abe,0x7af3,0x7b27,0x7b5b,0x7b90,0x7bc4, 392 0x7bf8,0x7c2d,0x7c61,0x7c96,0x7ccb,0x7d00,0x7d35,0x7d6a,0x7d9f,0x7dd4,0x7e09,0x7e3e,0x7e73,0x7ea8,0x7edd,0x7f13, 393 0x7f49,0x7f7e,0x7fb4,0x7fea,0x8020,0x8055,0x808b,0x80c1,0x80f7,0x812d,0x8163,0x8199,0x81cf,0x8205,0x823b,0x8271, 394 0x82a8,0x82de,0x8314,0x834b,0x8382,0x83b8,0x83ef,0x8426,0x845d,0x8493,0x84ca,0x8501,0x8538,0x856f,0x85a6,0x85dd, 395 0x8614,0x864b,0x8682,0x86b9,0x86f1,0x8728,0x875f,0x8797,0x87cf,0x8806,0x883e,0x8875,0x88ad,0x88e4,0x891c,0x8953, 396 0x898b,0x89c2,0x89f9,0x8a31,0x8a69,0x8aa1,0x8ad9,0x8b11,0x8b49,0x8b81,0x8bb9,0x8bf1,0x8c29,0x8c61,0x8c98,0x8cd1, 397 0x8d09,0x8d41,0x8d79,0x8db1,0x8de9,0x8e22,0x8e5a,0x8e93,0x8ecc,0x8f05,0x8f3e,0x8f77,0x8fb1,0x8feb,0x9025,0x905f, 398 0x909a,0x90d5,0x910f,0x914a,0x9184,0x91bf,0x91f9,0x9234,0x926e,0x92a8,0x92e3,0x931e,0x9358,0x9393,0x93ce,0x9409, 399 0x9444,0x947f,0x94ba,0x94f5,0x9530,0x956b,0x95a6,0x95e1,0x961c,0x9657,0x9692,0x96cd,0x9708,0x9742,0x977d,0x97b9, 400 0x97f4,0x9830,0x986b,0x98a7,0x98e2,0x991d,0x9959,0x9994,0x99d0,0x9a0c,0x9a47,0x9a83,0x9abf,0x9afb,0x9b37,0x9b73, 401 0x9baf,0x9bec,0x9c28,0x9c64,0x9ca1,0x9cdd,0x9d1a,0x9d56,0x9d93,0x9dd0,0x9e0c,0x9e49,0x9e86,0x9ec3,0x9eff,0x9f3c, 402 0x9f79,0x9fb6,0x9ff4,0xa031,0xa06f,0xa0ad,0xa0eb,0xa129,0xa166,0xa1a4,0xa1e2,0xa220,0xa25e,0xa29d,0xa2db,0xa319, 403 0xa358,0xa396,0xa3d4,0xa413,0xa452,0xa491,0xa4d0,0xa510,0xa54f,0xa58f,0xa5cf,0xa60e,0xa64e,0xa68d,0xa6cd,0xa70d, 404 0xa74d,0xa78d,0xa7cd,0xa80d,0xa84d,0xa88e,0xa8ce,0xa90f,0xa950,0xa991,0xa9d2,0xaa13,0xaa55,0xaa96,0xaad7,0xab19, 405 0xab5a,0xab9c,0xabdd,0xac1f,0xac61,0xaca3,0xace5,0xad26,0xad69,0xadab,0xaded,0xae2f,0xae71,0xaeb3,0xaef6,0xaf38, 406 0xaf7b,0xafbe,0xb001,0xb044,0xb086,0xb0c9,0xb10c,0xb14f,0xb192,0xb1d6,0xb219,0xb25d,0xb2a0,0xb2e4,0xb328,0xb36c, 407 0xb3b0,0xb3f3,0xb437,0xb47b,0xb4bf,0xb503,0xb546,0xb58a,0xb5ce,0xb612,0xb656,0xb69a,0xb6de,0xb722,0xb767,0xb7ab, 408 0xb7f1,0xb836,0xb87b,0xb8c2,0xb90a,0xb953,0xb99b,0xb9e4,0xba2e,0xba78,0xbac2,0xbb0c,0xbb57,0xbba1,0xbbeb,0xbc36, 409 0xbc80,0xbccb,0xbd15,0xbd60,0xbdab,0xbdf7,0xbe42,0xbe8d,0xbed9,0xbf24,0xbf70,0xbfbc,0xc008,0xc055,0xc0a1,0xc0ee, 410 0xc13c,0xc189,0xc1d7,0xc225,0xc273,0xc2c2,0xc310,0xc35f,0xc3af,0xc3fe,0xc44e,0xc49e,0xc4ee,0xc53f,0xc58f,0xc5e0, 411 0xc633,0xc685,0xc6d7,0xc72a,0xc77e,0xc7d2,0xc825,0xc87a,0xc8cf,0xc924,0xc979,0xc9ce,0xca25,0xca7c,0xcad3,0xcb2b, 412 0xcb83,0xcbdc,0xcc35,0xcc8e,0xcce8,0xcd43,0xcd9d,0xcdf8,0xce56,0xceb3,0xcf11,0xcf6e,0xcfcd,0xd02c,0xd08b,0xd0ea, 413 0xd14c,0xd1ae,0xd210,0xd272,0xd2d6,0xd33a,0xd39e,0xd402,0xd469,0xd4cf,0xd536,0xd59d,0xd606,0xd66f,0xd6d8,0xd742, 414 0xd7ad,0xd819,0xd884,0xd8f0,0xd95f,0xd9cd,0xda3b,0xdaab,0xdb1c,0xdb8d,0xdbff,0xdc71,0xdce4,0xdd57,0xddca,0xde3e, 415 0xdeb4,0xdf2a,0xdfa0,0xe017,0xe08f,0xe108,0xe180,0xe1f9,0xe274,0xe2f0,0xe36b,0xe3e7,0xe465,0xe4e3,0xe561,0xe5e0, 416 0xe660,0xe6e0,0xe760,0xe7e0,0xe862,0xe8e5,0xe967,0xe9e9,0xea6e,0xeaf3,0xeb78,0xebfe,0xec85,0xed0c,0xed93,0xee1a, 417 0xeea3,0xef2c,0xefb5,0xf03e,0xf0c9,0xf154,0xf1de,0xf269,0xf2f6,0xf383,0xf40f,0xf49c,0xf52b,0xf5ba,0xf648,0xf6d7, 418 0xf767,0xf7f6,0xf886,0xf916,0xf9a8,0xfa3a,0xfacc,0xfb5e,0xfbf2,0xfc85,0xfd19,0xfdac,0xfe41,0xfed5,0xff6a,0xffff, 419#endif 420}}; 421 422#if 0 423function DouglasPeucker(PointList[], epsilon) 424 //Find the point with the maximum distance 425 dmax = 0 426 index = 0 427 for i = 2 to (length(PointList) - 1) 428 d = PerpendicularDistance(PointList[i], Line(PointList[1], PointList[end])) 429 if d > dmax 430 index = i 431 dmax = d 432 end 433 end 434 435 //If max distance is greater than epsilon, recursively simplify 436 if dmax >= epsilon 437 //Recursive call 438 recResults1[] = DouglasPeucker(PointList[1...index], epsilon) 439 recResults2[] = DouglasPeucker(PointList[index...end], epsilon) 440 441 // Build the result list 442 ResultList[] = {recResults1[1...end-1] recResults2[1...end]} 443 else 444 ResultList[] = {PointList[1], PointList[end]} 445 end 446 447 //Return the result 448 return ResultList[] 449end 450#endif 451 452 453enum { kIOFBGammaPointCountMax = 256 }; 454enum { kIOFBGammaDesiredError = 127 }; 455 456struct IOFBLineSeg 457{ 458 // [start end] 459 uint16_t start; 460 uint16_t end; 461 uint16_t dist; 462 uint16_t split; 463}; 464typedef struct IOFBLineSeg IOFBLineSeg; 465 466static void IOFBSegDist(const uint16_t data[], IOFBLineSeg * seg) 467{ 468 uint16_t start; 469 uint16_t end; 470 uint16_t idx; 471 uint16_t interp; 472 int16_t dist; 473 474 seg->dist = 0; 475 start = seg->start; 476 end = seg->end; 477 for (idx = start + 1; idx < end; idx++) 478 { 479 interp = data[start] + ((data[end] - data[start]) * (idx - start)) / (end - start); 480 dist = data[idx] - interp; 481 if (dist < 0) dist = -dist; 482 if (dist > seg->dist) 483 { 484 seg->dist = dist; 485 seg->split = idx; 486 } 487 } 488} 489 490static void IOFBSegInit(const uint16_t data[], 491 IOFBLineSeg * seg, uint16_t start, uint16_t end) 492{ 493 seg->start = start; 494 seg->end = end; 495 IOFBSegDist(data, seg); 496} 497 498static void 499IOFBSimplifySegs(const uint16_t data[], uint16_t srcDataCount, 500 uint16_t desiredError, uint16_t * maxError, 501 IOFBLineSeg * segs, uint16_t count, uint16_t maxCount, 502 IOFBBootGamma * bootGamma) 503{ 504 IOFBGamma * channelGamma; 505 uint16_t idx; 506 uint16_t furthest; 507 uint16_t start; 508 509 while (count < maxCount) 510 { 511 furthest = 0; 512 for (idx = 1; idx < count; idx++) 513 { 514 if (segs[idx].dist > segs[furthest].dist) furthest = idx; 515 } 516 if (segs[furthest].dist <= desiredError) break; 517 bcopy(&segs[furthest+1], &segs[furthest+2], (count - furthest - 1) * sizeof(IOFBLineSeg)); 518 count++; 519 assert ((furthest+1) < maxCount); 520 IOFBSegInit(data, &segs[furthest+1], segs[furthest].split, segs[furthest].end); 521 segs[furthest].end = segs[furthest].split; 522 IOFBSegDist(data, &segs[furthest]); 523 } 524 525 *maxError = 0; 526 channelGamma = &bootGamma->gamma.red; 527 for (idx = 0; idx < count; idx++) 528 { 529 if (segs[idx].dist > *maxError) 530 { 531 *maxError = segs[idx].dist; 532//printf("max error seg 0x%x, 0x%x count %d, target %d\n", segs[idx].start, segs[idx].end, count, maxCount); 533 } 534 start = segs[idx].start % srcDataCount; 535 if (!start) 536 { 537 if (segs[idx].start) 538 { 539 channelGamma = (typeof(channelGamma)) &channelGamma->points[channelGamma->pointCount]; 540 } 541 channelGamma->pointCount = 0; 542 continue; 543 } 544 channelGamma->points[channelGamma->pointCount].in = 545 (start * 65536 / srcDataCount) 546 | (start * 65536 / srcDataCount / srcDataCount); 547 channelGamma->points[channelGamma->pointCount].out = data[segs[idx].start]; 548 channelGamma->pointCount++; 549 } 550} 551 552static bool 553IOFBCompressGamma( 554 IOFBBootGamma * bootGamma, 555 uint16_t channelCount, uint16_t srcDataCount, 556 uint16_t dataWidth, const void * _data, 557 uint16_t desiredError, uint16_t maxCount, 558 uint16_t * maxError) 559{ 560 IOFBGamma * channelGamma; 561 const uint16_t * data = (typeof(data)) _data; 562 uint16_t idx; 563 564 if ((3 != channelCount) || (16 != dataWidth)) return (false); 565 566 data = (typeof(data)) _data; 567 568 IOFBLineSeg * segs; 569 maxCount += 3; 570 segs = malloc(maxCount * sizeof(IOFBLineSeg)); 571 memset(segs, 0xee, maxCount * sizeof(IOFBLineSeg)); 572 573 for (idx = 0; idx < 3; idx++) IOFBSegInit(data, &segs[idx], idx * srcDataCount, ((idx + 1) * srcDataCount) - 1); 574 575 IOFBSimplifySegs(data, srcDataCount, desiredError, maxError, 576 segs, 3, maxCount, 577 bootGamma); 578 free(segs); 579 580 channelGamma = &bootGamma->gamma.red; 581 for (idx = 0; idx < channelCount; idx++) 582 { 583 channelGamma = (typeof(channelGamma)) &channelGamma->points[channelGamma->pointCount]; 584 } 585 bootGamma->length = ((uintptr_t) channelGamma) - ((uintptr_t) bootGamma); 586 return (true); 587} 588 589void IOFBDecompressGamma(const IOFBBootGamma * bootGamma, uint16_t * data, uint16_t count) 590{ 591 const IOFBGamma * channelGamma; 592 uint16_t channel, idx, maxIdx, seg; 593 uint16_t startIn, startOut; 594 uint16_t endIn, endOut; 595 596 maxIdx = count - 1; 597 channelGamma = &bootGamma->gamma.red; 598 for (channel = 0; channel < 3; channel++) 599 { 600 seg = 0; 601 startIn = 0; 602 startOut = 0x0000; 603 endIn = 0; 604 endOut = 0; 605 for (idx = 0; idx <= maxIdx; idx++) 606 { 607 if ((idx == endIn) && (idx != maxIdx)) 608 { 609 startIn = endIn; 610 startOut = endOut; 611 if (seg < channelGamma->pointCount) 612 { 613 endIn = (channelGamma->points[seg].in * count) >> 16; 614 endOut = channelGamma->points[seg].out; 615 seg++; 616 } 617 else 618 { 619 endIn = maxIdx; 620 endOut = 0xFFFF; 621 } 622 } 623 data[channel * count + idx] = startOut + ((endOut - startOut) * (idx - startIn)) / (endIn - startIn); 624 } 625 channelGamma = (typeof(channelGamma)) &channelGamma->points[channelGamma->pointCount]; 626 } 627} 628 629 630int main(int argc, char * argv[]) 631{ 632 IOFBBootGamma * bootGamma; 633 uint16_t desiredError = kIOFBGammaDesiredError; 634 uint16_t maxCount = kIOFBGammaPointCountMax; 635 uint16_t maxError; 636 uint32_t srcDataCount = SRCDATACOUNT; 637 638 if (argc > 2) 639 { 640 desiredError = strtol(argv[1], 0, 0); 641 maxCount = strtol(argv[2], 0, 0); 642 } 643 644 bootGamma = (typeof(bootGamma)) malloc(sizeof(IOFBBootGamma) 645 + (maxCount * sizeof(IOFBGammaPoint))); 646 memset(bootGamma, 0xee, sizeof(IOFBBootGamma) + (maxCount * sizeof(IOFBGammaPoint))); 647 648 bootGamma->vendor = 0; 649 bootGamma->product = 0; 650 bootGamma->serial = 0; 651 if (IOFBCompressGamma(bootGamma, 3, srcDataCount, 16, &data[0][0], desiredError, maxCount, &maxError)) 652 { 653 fprintf(stderr, "compressed gamma to 0x%x bytes, maxError 0x%04x\n", bootGamma->length, maxError); 654 655 IOFBGamma * channelGamma; 656 uint16_t idx, j, channel; 657 658 channelGamma = &bootGamma->gamma.red; 659 for (idx = 0; idx < 3; idx++) 660 { 661 for (j = 0; j < channelGamma->pointCount; j++) fprintf(stderr, "[%d,%02d] 0x%04x 0x%04x\n", idx, j, channelGamma->points[j].in, channelGamma->points[j].out); 662 channelGamma = (typeof(channelGamma)) &channelGamma->points[channelGamma->pointCount]; 663 } 664 665 uint16_t * deco; 666 uint16_t count = 1024; 667 deco = (typeof(deco)) malloc(sizeof(uint16_t) * 3 * count); 668 IOFBDecompressGamma(bootGamma, deco, count); 669 670 uint16_t maxError = 0; 671 uint16_t maxErrorIdx; 672 for (channel = 0; channel < 3; channel++) 673 { 674 for (idx = 0; idx < count; idx++) 675 { 676 printf("0x%04x 0x%04x\n", 677 deco[channel * count + idx], data[channel][idx * srcDataCount / 1024]); 678 679 if (idx & 3) continue; 680 681 int16_t error = (deco[channel * count + idx] - data[channel][idx * srcDataCount / 1024]); 682 if (error < 0) error = -error; 683 if (error > maxError) 684 { 685 maxErrorIdx = idx; 686 maxError = error; 687 } 688 } 689 } 690 free(deco); 691 fprintf(stderr, "maxError 0x%04x @ 0x%x\n", maxError, maxErrorIdx); 692 693 } 694 free(bootGamma); 695 696 return (0); 697} 698 699 700