#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  static const long long int D1l = -1;
  static const long long int D1u = 8;
  static const long long int D2l = -1;
  static const long long int D2u = 1;
  static const long long int D3l = -1;
  static const long long int D3u = 1;
  static const long long int Bl = -1;
  static const long long int Bu = 800;
  int Dim;
  int Sz;
  int Base;
  int Limit;
  int Range;
  int A;
  int B;
  int C;
  int V;
  int I;
  int *X;
  unsigned char *Y;
  int Offset;
  int Bilbo[10 /*-1:8*/][3 /*-1:1*/][3 /*-1:1*/];
  int Baggins[802 /*-1:800*/];
  void Onedimarray(int *Base, int *Limit, int Dim, int Sz, int Lb, int Ub) {
    int Row;
    int I;
    *Base = 0;
    *Limit = 0;
    Row = (Ub - Lb) + 1;
    *Base = *Base * Row + Lb;
    *Limit = *Limit * Row + Ub;
    *Base = *Base * Sz;
    *Limit = (*Limit + 1) * Sz;
  }
  void Writehexinteger(int N) {
    int D;
    int I;
    for (I = 28; I >= 0; I -= 4) {
      D = 15 & ((unsigned)N >> I);
      if (D > 9)
        Printsymbol(D - 10 + 'A');
      else
        Printsymbol(D + '0');
    }
  }
  Selectoutput(1);
  Printstring(_imp_str_literal("Start array initialisation"));
  Newline();
  A = Addr(Bilbo[0][0][0]);
  B = Addr(Bilbo[D1l][D2l][D3l]);
  C = Addr(Bilbo[D1u][D2u][D3u]);
  Range = Sizeof(Bilbo[D1l][D2l][D3l]) + C - B;
  Base = B - A;
  Printstring(_imp_str_literal("bilbo A: sizeof              ="));
  Printstring(Itos(Sizeof(Bilbo[D1l][D2l][D3l]), 0));
  Newline();
  Printstring(_imp_str_literal("bilbo B: address(d1l,d2l,d3l)="));
  Writehexinteger(Addr(Bilbo[D1l][D2l][D3l]));
  Newline();
  Printstring(_imp_str_literal("bilbo C: address(d1u,d2u,d3u)="));
  Writehexinteger(Addr(Bilbo[D1u][D2u][D3u]));
  Newline();
  Printstring(_imp_str_literal("bilbo D: range               ="));
  Printstring(Itos(Range, 0));
  Newline();
  Printstring(_imp_str_literal("bilbo E: base                ="));
  Printstring(Itos(Base, 0));
  Newline();
  Printstring(_imp_str_literal("bilbo F: limit               ="));
  Printstring(Itos(Range + Base, 0));
  Newline();
  Dim = 1;
  Sz = Sizeof(Baggins[Bl]);
  Onedimarray(Base, Limit, Dim, Sz, Bl, Bu);
  Range = Limit - Base;
  B = Addr(Baggins[Bl]);
  C = Addr(Baggins[Bu]);
  Printstring(_imp_str_literal("baggins A: sizeof            ="));
  Printstring(Itos(Sizeof(Baggins[Bl]), 0));
  Newline();
  Printstring(_imp_str_literal("baggins B: address(bl)       ="));
  Writehexinteger(Addr(Baggins[Bl]));
  Newline();
  Printstring(_imp_str_literal("baggins C: address(bu )      ="));
  Writehexinteger(Addr(Baggins[Bu]));
  Newline();
  Printstring(_imp_str_literal("baggins D: range             ="));
  Printstring(Itos(Range, 0));
  Newline();
  Printstring(_imp_str_literal("baggins E: base              ="));
  Printstring(Itos(Base, 0));
  Newline();
  Printstring(_imp_str_literal("baggins F: limit             ="));
  Printstring(Itos(Limit, 0));
  Newline();
  V = 0;
  for (A = D1l; A <= D1u; A++)
    for (B = D2l; B <= D2u; B++)
      for (C = D3l; C <= D3u; C++) {
        V++;
        Bilbo[A][B][C] = V;
      }
  Printstring(_imp_str_literal("End bilbo array initialisation"));
  Newline();
  V = 0;
  Printstring(_imp_str_literal("Start bilbo array readout"));
  Newline();
  for (A = D1l; A <= D1u; A++)
    for (B = D2l; B <= D2u; B++)
      for (C = D3l; C <= D3u; C++) {
        Printstring(_imp_str_literal("bilbo("));
        Printstring(Itos(A, 0));
        Printstring(_imp_str_literal(","));
        Printstring(Itos(B, 0));
        Printstring(_imp_str_literal(","));
        Printstring(Itos(C, 0));
        Printstring(_imp_str_literal(")="));
        Printstring(Itos(Bilbo[A][B][C], 0));
        Printstring(_imp_str_literal(" entry="));
        Printstring(Itos(V, 0));
        Printstring(_imp_str_literal(" address="));
        Writehexinteger(Addr(Bilbo[A][B][C]));
        Newline();
        V++;
      }
  V = -1;
  Offset = 0;
  A = Addr(Baggins[Bl]);
  B = Sizeof(Baggins[Bl]);
  for (C = Bl; C <= Bu; C++) {
    X = Integer(A + Offset);
    *X = C;
    Offset += B;
    V++;
  }
  Printstring(_imp_str_literal("End baggins array initialisation"));
  Newline();
  Printstring(_imp_str_literal("Start array readout"));
  Newline();
  for (A = Bl; A <= Bu; A++) {
    B = Baggins[A];
    Printstring(_imp_str_literal("baggins("));
    Printstring(Itos(A, 0));
    Printstring(_imp_str_literal(")="));
    Printstring(Itos(B, 0));
    Printstring(_imp_str_literal(" or as hex "));
    Writehexinteger(Baggins[A]);
    Printstring(_imp_str_literal(" address="));
    Writehexinteger(Addr(Baggins[A]));
    Newline();
  }
  Printstring(_imp_str_literal("End baggins array readout"));
  Newline();
  exit(0);
  return (1);
}
