#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  _imp_enter();
  auto _imp_string PRINTNAME(int N) {
    _imp_enter();
    int V;
    int K;
    static int COUNT = 0;
    COUNT = COUNT + 1;
    if (COUNT == 1) return (_imp_str_literal("JAMES"));
    if (COUNT == 2) return (_imp_str_literal("JIM"));
    return (_imp_str_literal("???"));
    _imp_leave();
  }
  auto _imp_string MESSAGE(int N) {
    _imp_enter();
    const char OUTTT[63 - 0 + 1] = {
        '?', 'A', 'B', 'C', 'D',  'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
        'M', 'N', 'O', 'P', 'Q',  'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
        'Z', '&', '-', '/', '\'', '(', ')', 'a', 'b', 'c', 'd', 'e', 'f',
        'g', 'h', 'i', 'j', 'k',  'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
        't', 'u', 'v', 'w', 'x',  'y', 'z', '.', '%', '#', '?'};
    const int WORDMAX = 780;
    const int DEFAULT = 776;
    const short WORD[WORDMAX - 0 + 1] = {
        0,     1,     32769, 32771, 32772, 32773, 2,     32775, 32776, 32777,
        32778, 32780, 32781, 32782, 32783, 32784, 4,     32776, 32771, 32772,
        32785, 32786, 32788, 32789, 32790, 32792, 32794, 5,     32786, 32788,
        32776, 32782, 32795, 32797, 32798, 6,     32786, 32800, 32801, 32781,
        32785, 32802, 32804, 7,     32805, 32776, 32777, 32778, 32780, 32806,
        8,     32808, 32797, 32810, 32776, 32777, 32811, 32812, 32814, 32815,
        9,     32817, 32819, 32820, 32776, 32821, 32782, 32823, 32824, 32825,
        10,    32808, 32797, 32810, 32776, 32777, 32828, 32812, 32814, 32815,
        11,    32775, 32776, 32829, 32789, 32831, 32819, 32777, 32772, 32780,
        32781, 12,    32832, 32789, 32831, 32819, 32777, 32834, 32835, 32837,
        13,    32769, 32839, 32832, 32789, 32831, 32819, 32771, 32840, 14,
        32842, 32771, 32772, 32773, 15,    32819, 32843, 32844, 32840, 16,
        32805, 32776, 32777, 32772, 32780, 32806, 17,    32805, 32776, 32845,
        32772, 32846, 32812, 32797, 32848, 18,    32819, 32850, 32851, 32812,
        32852, 32839, 32776, 19,    32819, 32850, 32854, 32812, 32852, 32839,
        32776, 20,    32819, 32850, 32851, 32848, 32852, 32839, 32855, 32776,
        21,    32819, 32850, 32854, 32848, 32852, 32839, 32855, 32776, 22,
        32856, 32858, 32819, 32820, 32776, 32860, 32862, 32825, 23,    32808,
        32788, 32776, 32782, 32863, 32795, 24,    32864, 32866, 32777, 32868,
        32869, 25,    32868, 32795, 32782, 32871, 32873, 26,    32819, 32771,
        32772, 32785, 32875, 32876, 32878, 27,    32776, 32771, 32772, 32785,
        32880, 32788, 28,    32808, 32797, 32810, 32776, 32777, 32825, 32882,
        32883, 32884, 29,    32885, 32788, 32776, 32772, 32782, 32795, 30,
        32887, 32889, 32880, 32884, 31,    32891, 32889, 32810, 32797, 32893,
        32884, 34,    32894, 32854, 32792, 32895, 37,    32897, 32776, 32777,
        32850, 32854, 32898, 38,    32897, 32776, 32777, 32900, 32901, 32819,
        32902, 32814, 32903, 32901, 39,    32904, 32820, 32897, 32776, 32771,
        32811, 32814, 32905, 32907, 40,    32908, 32771, 32772, 32789, 32911,
        32820, 32784, 41,    32912, 32914, 32916, 32917, 32789, 32919, 32804,
        42,    32819, 32771, 32863, 32921, 32923, 32925, 43,    32927, 32788,
        32776, 32772, 32782, 32795, 44,    32929, 32931, 32933, 32776, 32936,
        32819, 32937, 45,    32897, 32933, 32937, 32938, 32940, 32937, 32941,
        32819, 46,    32929, 32942, 32944, 32797, 32946, 32948, 47,    32949,
        32778, 32941, 32789, 32831, 32819, 48,    32949, 32921, 32936, 32950,
        32876, 49,    32951, 32953, 32954, 32944, 32797, 32956, 32776, 50,
        32958, 32820, 32819, 32771, 32889, 32960, 32961, 32820, 32776, 51,
        32963, 32771, 32772, 32773, 52,    32769, 32965, 32820, 32963, 32839,
        32967, 32789, 32831, 32819, 53,    32963, 32839, 32967, 32789, 32831,
        32819, 32771, 32840, 54,    32969, 32889, 32832, 32769, 32884, 55,
        32970, 32889, 32832, 32769, 32884, 56,    32972, 32776, 32789, 32976,
        32792, 32794, 57,    32977, 32979, 32981, 32789, 32792, 32794, 32982,
        58,    32983, 32985, 32986, 32988, 59,    32963, 32965, 32820, 32769,
        32839, 32832, 32789, 32831, 32819, 61,    32805, 32776, 32777, 32778,
        32780, 32990, 32782, 32783, 32956, 62,    32776, 32771, 32772, 32785,
        32991, 32797, 32991, 32956, 32788, 63,    32991, 32993, 32771, 32995,
        32814, 32819, 32907, 64,    32805, 32776, 32997, 32785, 32999, 32782,
        32783, 32873, 65,    33001, 32776, 32771, 32772, 32782, 32960, 32991,
        32956, 66,    33003, 33005, 32953, 33007, 32776, 67,    33009, 33011,
        33012, 32776, 33013, 33014, 33016, 69,    33001, 33011, 32771, 33018,
        32953, 32776, 33020, 32771, 32772, 32820, 32823, 32991, 70,    33021,
        33023, 32777, 32921, 33026, 32993, 32820, 32819, 71,    32776, 32771,
        32772, 32785, 33021, 32946, 72,    33027, 32866, 32782, 32785, 33021,
        32795, 73,    33027, 32931, 32782, 32785, 33021, 32795, 74,    33029,
        32771, 32772, 32960, 33031, 33033, 75,    33021, 32795, 33035, 32785,
        33037, 32795, 76,    33021, 32946, 32776, 32782, 33038, 32795, 77,
        33021, 32931, 32782, 33038, 32795, 78,    33021, 32866, 33040, 32782,
        33038, 32795, 80,    33041, 32946, 32776, 33043, 32862, 32795, 81,
        33041, 32946, 32776, 33045, 32953, 32795, 82,    32776, 32771, 32772,
        32785, 33048, 32788, 83,    33011, 33012, 32776, 32844, 32772, 33050,
        32782, 32823, 86,    33052, 33048, 33011, 33045, 32953, 33054, 32776,
        87,    32956, 32788, 32776, 33055, 32782, 32795, 90,    33056, 32788,
        32776, 32990, 32782, 32795, 91,    33058, 32835, 32946, 32776, 32772,
        32871, 92,    33058, 33059, 32777, 32982, 33061, 93,    33058, 33059,
        32777, 33062, 32878, 32820, 33064, 90,    33056, 32788, 32776, 32990,
        33066, 32946, 95,    32805, 32776, 32772, 32875, 32782, 33067, 96,
        33069, 32819, 32772, 32875, 32782, 33067, 97,    33071, 33073, 32772,
        32875, 98,    33076, 99,    33079, 32772, 33081, 33083, 33084, 33086,
        101,   33088, 32831, 32777, 32850, 32854, 33090, 102,   33093, 32820,
        32819, 33095, 32771, 32850, 33097, 103,   33098, 33100, 33102, 104,
        33098, 33100, 33102, 105,   32894, 32854, 32792, 32895, 106,   33021,
        32931, 32850, 33103, 107,   33104, 33106, 32844, 33100, 33102, 108,
        33108, 32850, 33110, 109,   33104, 33113, 110,   33116, 33117, 201,
        33118, 33119, 32844, 33121, 33066, 32848, 202,   32805, 32776, 32772,
        32990, 203,   32775, 32776, 32772, 32990, 204,   33052, 33058, 32835,
        32946, 32776, 205,   32805, 32776, 32772, 33124, 206,   33127, 32782,
        33129, 33131, 207,   32927, 32946, 32776, 32772, 33132, 208,   33135,
        33138, 32990, 33140, 33141, 33143, 33145, 209,   33148, 33150, 32771,
        33152, 33153, 210,   33155, 33157, 32852, 255,   33159, 33160, 33161,
        0};
    const int LETT[394 - 0 + 1] = {
        0,          0x7890A80B, 0x02A00000, 0x53980000, 0x5D7E8000, 0x652E3AD3,
        0x652C8000, 0x190C52D8, 0x36000000, 0x510E6000, 0x436652C3, 0x49C80000,
        0x452CB700, 0x672E8000, 0x53700000, 0x69453980, 0x4565F1D6, 0x42000000,
        0x27BD3A47, 0x50000000, 0x5D0DB280, 0x43A00000, 0x47AE594B, 0x5DA00000,
        0x692F1A6B, 0x43600000, 0x592ED2D8, 0x4BC6194B, 0x679D37DC, 0x5F900000,
        0x439E74CF, 0x5D6CB768, 0x590C52D8, 0x36FFB000, 0x672C77DD, 0x48000000,
        0x694DB280, 0x1D0DB280, 0x492C7643, 0x652C8000, 0x257EBA53, 0x5D280000,
        0x4D700000, 0x5B7E5280, 0x610E50DB, 0x4BA4B966, 0x69443700, 0x6784B1D3,
        0x4D4CB200, 0x210E50DB, 0x4BA4B900, 0x7A000000, 0x5F300000, 0x494CD34B,
        0x65980000, 0x69CE1280, 0x4D95F680, 0x6784B1D3, 0x4D4C70E9, 0x537DC000,
        0x4D2EF2E4, 0x652CD2E5, 0x4B7472C8, 0x594DD280, 0x781B2199, 0x0A000000,
        0x69BDE000, 0x477DDA65, 0x5F600000, 0x47643AE7, 0x4B980000, 0x4D7E4000,
        0x5B4E79D3, 0x5D380000, 0x7829C200, 0x7829C266, 0x4394A000, 0x497CB980,
        0x652E3AD3, 0x65280000, 0x67AC59C7, 0x654E1A66, 0x697DE000, 0x4D2EE000,
        0x6195FB53, 0x492C8000, 0x5B0DDC80, 0x439650F2, 0x031E9AC3, 0x58000000,
        0x610E50DB, 0x4BA4B900, 0x477DD359, 0x531E9980, 0x6F4E9400, 0x43700000,
        0x137692CF, 0x4B900000, 0x5F84B943, 0x697E4000, 0x252C3600, 0x5F84B943,
        0x5D266000, 0x537692CF, 0x4B900000, 0x477DDA4B, 0x71A00000, 0x6D0D94C8,
        0x782AC29D, 0x28000000, 0x5DADB14B, 0x64000000, 0x657EBA53, 0x5D280000,
        0x45AE8000, 0x5D780000, 0x457C9C80, 0x7832A707, 0x2849E700, 0x7890AA2B,
        0x24700000, 0x5FAE9BD3, 0x69400000, 0x7890A9AB, 0x18A00000, 0x5B0E0000,
        0x297DE000, 0x592ED2D9, 0x66000000, 0x039650F2, 0x494DB2DD, 0x674DF766,
        0x6B8612E4, 0x457EB748, 0x592E7980, 0x597EF2E4, 0x274F5280, 0x30F0C30D,
        0x0C30CF00, 0x45CE92E6, 0x092C7643, 0x650E94DF, 0x5C000000, 0x512C3200,
        0x077DD9E9, 0x43768000, 0x470DD75F, 0x68000000, 0x45280000, 0x4BB4366B,
        0x43A4B200, 0x477DB853, 0x59280000, 0x5376D0D9, 0x53200000, 0x652E12E9,
        0x53A537DC, 0x4D0C7A5F, 0x64000000, 0x7819E727, 0x2809CA00, 0x1376D0D9,
        0x53200000, 0x477DD9E9, 0x43768000, 0x53753A53, 0x436539D3, 0x5D380000,
        0x433692E4, 0x53A4B6E6, 0x4BC612C7, 0x692C8000, 0x7BE80000, 0x4F4ED2DC,
        0x782B0A0B, 0x24702600, 0x782B0A25, 0x12726486, 0x6D0E54C3, 0x4564A000,
        0x789A0286, 0x7829898A, 0x7879C000, 0x03A692DB, 0x61A00000, 0x69780000,
        0x53753A53, 0x436539CA, 0x7831E91B, 0x02A00000, 0x27AC59C7, 0x654E1A00,
        0x6944A000, 0x457EB749, 0x66000000, 0x78312713, 0x26400000, 0x53767A4B,
        0x43200000, 0x789A80A5, 0x28000000, 0x782B04A8, 0x7819E729, 0x1272A280,
        0x782B0A0B, 0x24702625, 0x1EAA849D, 0x0A000000, 0x6F95F74E, 0x0BC4B1EB,
        0x690C564A, 0x67A43A4B, 0x5B2DDA00, 0x4D7EB748, 0x752E5780, 0x2195F3E5,
        0x43680000, 0x436DF74E, 0x4BC692E5, 0x5D0D8000, 0x657EBA53, 0x5D2E6000,
        0x6B9CB200, 0x7890A19F, 0x24200000, 0x592DD3E9, 0x50000000, 0x4F94B0E9,
        0x4B900000, 0x652E3AD3, 0x652E6000, 0x67AC5743, 0x5B280000, 0x27AC5743,
        0x5B280000, 0x0BC6194B, 0x679D37DC, 0x439E74CF, 0x5D2C8000, 0x652C77E5,
        0x48000000, 0x252C77E5, 0x49980000, 0x36D80000, 0x43748000, 0x510ED280,
        0x494CD34B, 0x652DDA00, 0x4D7E56C3, 0x69980000, 0x43A690C7, 0x512C8000,
        0x6F4531D0, 0x27A654DD, 0x4E000000, 0x492C7643, 0x650E94DF, 0x5C000000,
        0x5B0F0000, 0x03953A51, 0x5B2E94C6, 0x252E77D9, 0x6BA537DC, 0x477E594B,
        0x47A00000, 0x4D7E56C3, 0x68000000, 0x477DDA43, 0x53766000, 0x67AC4000,
        0x43953A51, 0x5B2E94C6, 0x3DDBC000, 0x217D3769, 0x4B900000, 0x477DB843,
        0x652C8000, 0x4B8EB4ED, 0x4364B747, 0x4B200000, 0x617D3769, 0x4B900000,
        0x4B8EB4ED, 0x4364B768, 0x0F65F143, 0x58000000, 0x597C70D8, 0x6B9CA000,
        0x2B769CE1, 0x4B200000, 0x7831E900, 0x47643AE7, 0x4A000000, 0x67A4B800,
        0x5D7DD4DD, 0x692CF2E4, 0x69943B4B, 0x659CB980, 0x43980000, 0x439E72DB,
        0x4564B900, 0x1F84B943, 0x5D200000, 0x039E72DB, 0x4564B900, 0x477DD9E9,
        0x65AC7A53, 0x5F700000, 0x0324994B, 0x679C3153, 0x594E9C80, 0x0D0C74D9,
        0x53A72000, 0x67AE185F, 0x65A4B200, 0x45C80000, 0x690E53CB, 0x68000000,
        0x510E526F, 0x4394A000, 0x277EB947, 0x4A000000, 0x477DDA53, 0x5DAC3A53,
        0x5F766000, 0x2F7E55CD, 0x5364A000, 0x17173A4B, 0x66000000, 0x676C3658,
        0x094C7A53, 0x5F743972, 0x477DB859, 0x4BA4B672, 0x4DAD9600, 0x597DD380,
        0x077DB853, 0x592E4000, 0x690C564B, 0x66000000, 0x077DD253, 0x694DF700,
        0x477DB859, 0x531C3A4B, 0x48000000, 0x537477DD, 0x674E7A4B, 0x5DA00000,
        0x13761AE8, 0x4B7492C8, 0x197DD380, 0x537692CF, 0x4B966000, 0x5374B34D,
        0x531D32DD, 0x68000000, 0x4324994B, 0x679C3159, 0x4A000000, 0x272DB4C7,
        0x5F65F700, 0x477DB6CB, 0x5DA00000, 0x692F1A00, 0x53753A53, 0x436539CB,
        0x48000000, 0x2B767AE1, 0x617E5A4B, 0x48000000, 0x6194B1D3, 0x674DF700,
        0x38000000, 0x5D2C394B, 0x67A00000, 0x43B434D9, 0x43159280, 0x67AC59E9,
        0x53A6BA4B, 0x48000000, 0x290E53CB, 0x68000000, 0x5B0C7453, 0x5D280000,
        0x6F7E5200, 0x4324994B, 0x679CB27E, 0x252C9ADD, 0x490DDA00, 0x78098483,
        0x26000000, 0x2628A000, 0x126A0000, 0x1A09CA83, 0x18000000};
    int I;
    int J;
    int K;
    int M;
    int Q;
    int S;
    _imp_string OMESS;
    OMESS = _imp_str_literal(" ");
    for (I = 1; I != WORDMAX - 1 + 1; I += 1) {
      if (N == WORD[I]) goto FOUND;
    }
    I = DEFAULT;
  FOUND:;
    J = 1;
    for (;;) {
      K = WORD[I + J];
      if ((K & 0x8000) == 0) break;
      K = K & 0x7FFF;
      if (J != 1) OMESS = _imp_join(OMESS, _imp_str_literal(" "));
      do {
        M = LETT[K];
        S = 25;
        do {
          Q = M >> S & 63;
          if (Q != 0) OMESS = _imp_join(OMESS, TOSTRING(OUTTT[Q]));
          S = S - 6;
        } while (S >= 0) K = K + 1;
      } while ((M & 1) != 0) J = J + 1;
    }
    return (OMESS);
    _imp_leave();
  }
  auto _imp_string SWRITE(int VALUE, int PLACES) {
    _imp_enter();
    _imp_string S;
    _imp_string SIGN;
    int D0;
    int D1;
    int D2;
    PLACES = PLACES & 15;
    SIGN = _imp_str_literal(" ");
    S = _imp_str_literal("");
    if (VALUE < 0) {
      SIGN = _imp_str_literal("-");
      VALUE = -VALUE;
    }
    D0 = VALUE;
    do {
      D1 = D0 / 10;
      D2 = D0 - 10 * D1;
      S = _imp_join(TOSTRING(D2 + '0'), S);
      D0 = D1;
    } while (D0 != 0);
    S = _imp_join(SIGN, S);
    while (LENGTH(S) <= PLACES) S = _imp_join(_imp_str_literal(" "), S);
    return (S);
    _imp_leave();
  }
  auto void FAULT(int N, int DATA, int IDENT) {
    _imp_enter();
    int I;
    int J;
    int S;
    int T;
    int Q;
    int QMAX;
    int LENGTH;
    _imp_string MESS1;
    _imp_string MESS2;
    _imp_string WK1;
    _imp_string WK2;
    MESS1 = _imp_str_literal("");
    MESS2 = _imp_str_literal("");
    if (N == 100) {
      MESS1 = _imp_join(_imp_str_literal("\n*    Failed to analyse line "),
                        _imp_join(SWRITE(99, 2), _imp_str_literal("\n     ")));
      J = 0;
      S = 0;
      T = 0;
      Q = DATA;
      QMAX = IDENT >> 16;
      LENGTH = IDENT & 0xFFFF;
      if (Q == QMAX) S = T;

    } else {
      MESS1 = _imp_join(_imp_str_literal("\n*"),
                        _imp_join(SWRITE(99, 4), _imp_str_literal("   ")));
      MESS1 =
          _imp_join(MESS1, _imp_join(_imp_str_literal("FAULT"), SWRITE(N, 2)));
      MESS2 = MESSAGE(N);
      if (_imp_cond_resolve(MESS2, WK1, _imp_str_literal("##"), WK2))
        MESS2 = _imp_join(WK1, _imp_join(SWRITE(IDENT, 1), WK2));
      if (_imp_cond_resolve(MESS2, WK1, _imp_str_literal("#"), WK2))
        MESS2 = _imp_join(WK1, _imp_join(SWRITE(DATA, 1), WK2));
      if (_imp_cond_resolve(MESS2, WK1, _imp_str_literal("&&"), WK2))
        MESS2 = _imp_join(WK1, _imp_join(PRINTNAME(DATA), WK2));
      if (_imp_cond_resolve(MESS2, WK1, _imp_str_literal("&"), WK2))
        MESS2 = _imp_join(WK1, _imp_join(PRINTNAME(IDENT), WK2));
      if (N > 100) MESS2 = _imp_join(MESS2, _imp_str_literal(" Disaster"));
    }
    PRINTSTRING(MESS1);
    if (MESS2 != _imp_str_literal("")) PRINTSTRING(MESS2);
    NEWLINE();
    if (N == 109) _imp_monitor(0);
    if (N > 100) exit(0);
    _imp_leave();
  }
  auto void WARN(int N, int V) {
    _imp_enter();
    _imp_string T;
    _imp_string S;
    S = MESSAGE(N + 200);
    if (_imp_cond_resolve(S, S, _imp_str_literal("&"), T))
      S = _imp_join(S, _imp_join(PRINTNAME(V), T));
    PRINTSTRING(_imp_join(
        _imp_str_literal("\n?  Warning :- "),
        _imp_join(S,
                  _imp_join(_imp_str_literal(" at line No"), SWRITE(101, 1)))));
    NEWLINE();
    _imp_leave();
  }
  FAULT(16, 0, 0);
  WARN(2, 76);
  _imp_leave();
  exit(0);
  return (0);
}
