/*
-- ANSI C code generated by :
-- SmallEiffel The GNU Eiffel Compiler -- Release (- 0.78Beta#1)--
-- Copyright (C), 1994-98 - LORIA - UHP - CRIN - INRIA - FRANCE --
-- Dominique COLNET and Suzanne COLLIN -    colnet@loria.fr     --
--                  http://SmallEiffel.loria.fr/                --
*/
#include "example01.h"


void se_prinT2135(T2135*o){
fprintf(SE_ERR,"NATIVE_ARRAY[STRING]");
fprintf(SE_ERR,"#%p",*o);
}
T660 M660={660,NULL,0};


void se_prinT660(T660**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"DIRECTORY");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"basic_directory = ");
se_prinT0((void*)(&((*o)->_basic_directory)));
fprintf(SE_ERR,"\n\t  ");
fprintf(SE_ERR,"is_connected = ");
se_prinT6((void*)(&((*o)->_is_connected)));
fprintf(SE_ERR,"\n\t]");
}
T474 M474={474,0};


void se_prinT474(T474**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"BOOLEAN_REF");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"item = ");
se_prinT6((void*)(&((*o)->_item)));
fprintf(SE_ERR,"\n\t]");
}
T1405 M1405={1405,NULL,NULL};


void se_prinT1405(T1405**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"BASIC_DIRECTORY");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"path = ");
se_prinT7((void*)(&((*o)->_path)));
fprintf(SE_ERR,"\n\t  ");
fprintf(SE_ERR,"name_list = ");
se_prinT0((void*)(&((*o)->_name_list)));
fprintf(SE_ERR,"\n\t]");
}
T701 M701={701};


void se_prinT701(T701**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"EXAMPLE01");
fprintf(SE_ERR,"#%p",*o);
}
T1886 M1886={1886,NULL,0,0};


void se_prinT1886(T1886**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"FIXED_ARRAY[STRING]");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"storage = ");
se_prinT2135((void*)(&((*o)->_storage)));
fprintf(SE_ERR,"\n\t  ");
fprintf(SE_ERR,"capacity = ");
se_prinT2((void*)(&((*o)->_capacity)));
fprintf(SE_ERR,"\n\t  ");
fprintf(SE_ERR,"upper = ");
se_prinT2((void*)(&((*o)->_upper)));
fprintf(SE_ERR,"\n\t]");
}


void se_prinT9(T9*o){
fprintf(SE_ERR,"NATIVE_ARRAY[CHARACTER]");
fprintf(SE_ERR,"#%p",*o);
}
T7 M7={7,NULL,0,0};
T878 M878={878};


void se_prinT878(T878**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"STD_OUTPUT");
fprintf(SE_ERR,"#%p",*o);
}
T2074 M2074={2074};


void se_prinT2074(T2074**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"STD_INPUT_OUTPUT");
fprintf(SE_ERR,"#%p",*o);
}
T714 M714={714,0};


void se_prinT714(T714**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"CHARACTER_REF");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"item = ");
se_prinT3((void*)(&((*o)->_item)));
fprintf(SE_ERR,"\n\t]");
}
T528 M528={528,0};


void se_prinT528(T528**o){
if(*o==NULL){
fprintf(SE_ERR,"Void");
return;
}
fprintf(SE_ERR,"INTEGER_REF");
fprintf(SE_ERR,"#%p",*o);
fprintf(SE_ERR,"\n\t[ ");
fprintf(SE_ERR,"item = ");
se_prinT2((void*)(&((*o)->_item)));
fprintf(SE_ERR,"\n\t]");
}


T7*se_ms(int c,char*e){
T7*s=malloc(sizeof(gc7));
((gc7*)s)->header.flag=FSOH_MARKED;
s->id=7;
s->_count=c;
s->_capacity=c+1;
s->_storage=new9(c+2);
memcpy(s->_storage,e,c);
return s;}


T7*e2s(char*e){
return se_ms(strlen(e),e);}


char*s2e(T7*s){
char*e=malloc(1+s->_count);
memcpy(e,s->_storage,s->_count);
e[s->_count]='\0';
return e;}
/*
-- This file is  free  software, which  comes  along  with  SmallEiffel. This
-- software  is  distributed  in the hope that it will be useful, but WITHOUT 
-- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
-- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
-- this header is kept unaltered, and a notification of the changes is added.
-- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
-- another product.
--          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
--            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
--                       http://www.loria.fr/SmallEiffel
--
*/

/*
  This file (no_check.c) is automatically included when `run_control.no_check'
  is true (ie. all modes ecxept -boost).
*/

/*
  The upper most context (SmallEiffel Dump stack Top) :
*/
se_dump_stack* se_dst=NULL;

void se_print_run_time_stack(void) {
  /* GENERAL.print_run_time_stack */
  se_dump_stack* ds = NULL;
  se_dump_stack* ds2;
  int frame_count = 1;

  ds = se_dst;
  if (ds == NULL) {
    fprintf(SE_ERR,"Empty stack.\n");
    return ;
  }
  else {
    while (ds->caller != NULL) {
      ds = ds->caller;
      frame_count++;
    }
  }
  fprintf(SE_ERR,"%d frames in current stack.\n",frame_count);
  fprintf(SE_ERR,"=====  Bottom of run-time stack  =====\n");
  while (ds != NULL) {
    if (ds->fd != NULL) {
      se_print_one_frame(ds);
    }
    else {
      fprintf(SE_ERR,"External CECIL call.\n");
    }
    /* Next frame : */
    if (ds == se_dst) {
      ds = NULL;
    }
    else {
      ds2 = se_dst;
      while (ds2->caller != ds) {
	ds2 = ds2->caller;
      }
      ds = ds2;
    }
    if (--frame_count) {
      fprintf(SE_ERR,"======================================\n");
    }
  }
  fprintf(SE_ERR,"=====   Top of run-time stack    =====\n");
}

void se_print_one_frame(se_dump_stack* ds) {
  se_frame_descriptor* fd = ds->fd;
  int i = 0;
  int local_count = 0;
  char* local_format = fd->local_format;
  int expanded;
  int id;
  void** var;
  fprintf(SE_ERR,"%s\n",fd->name);
  if (fd->use_current) {
    fprintf(SE_ERR,"Current = ");
    i = 2;
    id = 0;
    while (local_format[i] != '%') {
      id = (id * 10) + (local_format[i] - '0');
      i++;
    }
    i++;
    (se_prinT[id])(ds->current);
    fprintf(SE_ERR,"\n");
  }
  while (local_count < fd->local_count) {
    while (local_format[i] != '%') {
      fprintf(SE_ERR,"%c",local_format[i]);
      i++;
    }
    i++;
    expanded = ((local_format[i++] == 'E')?1:0);
    fprintf(SE_ERR," = ");
    id = 0;
    while (local_format[i] != '%') {
      id = (id * 10) + (local_format[i] - '0');
      i++;
    }
    i++;
    var = (ds->locals)[local_count];
    if (expanded) {
      (se_prinT[id])((void**)(var));
    }
    else if (*var == NULL) {
      fprintf(SE_ERR,"Void");
    }
    else {
      (se_prinT[((T0*)(*var))->id])((void**)(var));
    }
    fprintf(SE_ERR,"\n");
    local_count++;
  }
  fprintf(SE_ERR,"line %d ",ds->l);
  fflush(SE_ERR);
  fprintf(SE_ERR,"column %d ",ds->c);
  fflush(SE_ERR);
  fprintf(SE_ERR,"file %s \n",p[ds->f]);
  fflush(SE_ERR);
}

void se_core_dump(char*msg) {
  if (msg != NULL) {
    fprintf(SE_ERR,"%s\n",msg);
  }
#ifdef SE_EXCEPTIONS
  print_exception();
#endif
  se_print_run_time_stack();
  exit(1);
}

int se_require_uppermost_flag;

/*
  Require Last Result :
*/
int se_require_last_result;

int se_rci(void*C) {
  /* Return 1 if class invariant must be checked for Current 
     before leaving the routine.
  */
  se_dump_stack*ds = se_dst;
  ds = ds->caller;
  if (ds != NULL) {
    se_frame_descriptor* fd = ds->fd;
    if (fd == NULL) {
      /* As for example when coming via CECIL. */
      return 0;
    }
    else {
      if (fd->use_current) {
	if (fd->local_format[1] == 'R') {
	  if (((void*)*(ds->current)) == C) {
	    return 0;
	  }
	}
      }
    }
  }
  return 1;
}

void error0(char*m) {
  static char*f1="*** Error at Run Time *** : %s\n";
  fprintf(SE_ERR,f1,m);
#ifdef SE_EXCEPTIONS
  print_exception();
#endif
  se_print_run_time_stack();
  fprintf(SE_ERR,f1,m);
  exit(1);
}

void error1(char*m,int l,int c,int f) {
  char*f1="Line : %d column %d in %s.\n";
  char*f2="*** Error at Run Time *** : %s\n";
  fprintf(SE_ERR,f1,l,c,p[f]);
  fprintf(SE_ERR,f2,m);
#ifdef SE_EXCEPTIONS
  print_exception();
#endif
  se_print_run_time_stack();
  fprintf(SE_ERR,f1,l,c,p[f]);
  fprintf(SE_ERR,f2,m);
  exit(1);
}

void error2(T0*o,int l,int c,int f) {
  char*f1="Target Type %s not legal.\n";
  fprintf(SE_ERR,f1,s2e(t[o->id]));
  error1("Bad target.",l,c,f);
}

T0* vc(void*o,int l,int c,int f) {
  /* VoidCheck for reference target.*/
  if (o != NULL) {
    return o;
  }
  else {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Void_call_target);
#else
    error1("Call with a Void target.",l,c,f);
#endif
    return NULL;
  }
}

T0* ci(int id,void*o,int l,int c,int f) {
  /* Check Id for reference target. */
  vc(o,l,c,f);
  if (id == (((T0*)o)->id)) {
    return o;
  }
  else {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Routine_failure);
#else
    fprintf(SE_ERR,"Line : %d column %d in %s.\n",l,c,p[f]);
    fprintf(SE_ERR,"*** Error at Run Time *** : ");
    fprintf(SE_ERR,"Target is not valid (not the good type).\n");
    fprintf(SE_ERR,"Expected: %s, Actual: %s.\n",
	    s2e(t[id]),s2e(t[((T0*)o)->id]));
    se_print_run_time_stack();
    exit(1);
#endif
  }
}

void ac_req(int v) {
  if (!v && se_require_uppermost_flag) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Precondition);
#else
    error0("Require Assertion Violated.");
#endif
  }
  se_require_last_result=se_require_last_result&&v;
}

void ac_ens(int v) {
  if (!v) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Postcondition);
#else
    error0("Ensure Assertion Violated.");
#endif
  }
}

void ac_inv(int v) {
  if (!v) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Class_invariant);
#else
    error0("Class Invariant Violation.");
#endif
  }
}

void ac_liv(int v) {
  /* Assertion Check : Loop Invariant check. */
  if (!v) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Loop_invariant);
#else
    error0("Loop Invariant Violation.");
#endif
  }
}

int ac_lvc(int lc,int lv1,int lv2) {
  /* Assertion Check : Loop Variant check. */
  if (lc == 0) {
    if (lv2 < 0) {
#ifdef SE_EXCEPTIONS
      internal_exception_handler(Loop_variant);
#else
      se_print_run_time_stack();
      fprintf(SE_ERR,"Bad First Variant Value = %d\n",lv2);
      exit(1);
#endif
    }
    else {
      return lv2;
    }
  }
  else if ((lv2 < 0) || (lv2 >= lv1)) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Loop_variant);
#else
    se_print_run_time_stack();
    fprintf(SE_ERR,"Loop Body Count = %d (done)\n",lc);
    fprintf(SE_ERR,"New Variant = %d\n",lv2);
    fprintf(SE_ERR,"Previous Variant = %d\n",lv1);
    exit(1);
#endif
  }
  else {
    return lv2;
  }
}

void ac_civ(int v) {
  if (!v) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Check_instruction);
#else
    error0("Check Assertion Violated.");
#endif
  }
}

void se_evobt(void*o,int l,int c,int f) {
  /* Error Void Or Bad Type. */
  if (!o) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Void_call_target);
#else
    error1("Target is Void.",l,c,f);
#endif
  }
  else {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Void_call_target);
#else
    error2(o,l,c,f);
#endif
  }
}

void sigrsp(int sig) {
  printf("Received signal %d (man signal).\n",sig);
  se_print_run_time_stack();
  exit(1);
}

void se_gc_check_id(void*o,int id) {
  if (id != (((T0*)o)->id)) {
#ifdef SE_EXCEPTIONS
    internal_exception_handler(Routine_failure);
#else
    fprintf(SE_ERR,"System-validity error detected during GC cycle.\n");
    fprintf(SE_ERR,"Target is not valid (not the good type).\n");
    fprintf(SE_ERR,"Expected: %s, Actual: %s.\n",
	    s2e(t[id]),s2e(t[((T0*)o)->id]));
    se_print_run_time_stack();
    exit(1);
#endif
  }
}
/*
-- This file is  free  software, which  comes  along  with  SmallEiffel. This
-- software  is  distributed  in the hope that it will be useful, but WITHOUT 
-- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
-- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
-- this header is kept unaltered, and a notification of the changes is added.
-- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
-- another product.
--          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
--            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
--                       http://www.loria.fr/SmallEiffel
--
*/

/*
  This file (trace.c) is automatically included when `run_control.no_check' is
  true (ie. all modes ecxept -boost).
  This file comes after no_check.[hc] to implements the -trace flag as well as
  some other printing stuff.
*/

/* 
   To print object into the trace-stack :
*/
void se_prinT0(T0** o) {
  if (*o == NULL) {
    fprintf(SE_ERR,"Void");
  }
  else {
    fprintf(SE_ERR,"#%p",*o);
  }
}
void se_prinT2(T2* o) {
  fprintf(SE_ERR,"%d",*o);
}
void se_prinT3(T3* o) {
  fprintf(SE_ERR,"'%c'",*o);
}
void se_prinT4(T4* o) {
  fprintf(SE_ERR,"%f",((double)*o));
}
void se_prinT5(T5* o) {
  fprintf(SE_ERR,"%f",*o);
}
void se_prinT6(T6* o) {
  if (*o) {
    fprintf(SE_ERR,"true");
  }
  else {
    fprintf(SE_ERR,"false");
  }
}
void se_prinT7(T7** o) {
  if (*o == NULL) {
    fprintf(SE_ERR,"Void");
  }
  else {
    char*storage = (*o)->_storage;
    int count = (*o)->_count;
    int i = 0;
    fprintf(SE_ERR,"\"");
    while (i < count) {
      fprintf(SE_ERR,"%c",storage[i]);
      i++;
    }
    fprintf(SE_ERR,"\"");
  }
}
void se_prinT8(T8* o) {
  if (*o == NULL) {
    fprintf(SE_ERR,"NULL");
  }
  else {
    fprintf(SE_ERR,"POINTER#%p",*o);
  }
}

#ifndef SE_TRACE

void se_trace(se_dump_stack*ds,int l,int c,int f) {
  ds->l=l;
  ds->c=c;
  ds->f=f;
}

# endif

#ifdef SE_TRACE
/*
  Basic SmallEiffel step-by-step execution.
*/

static FILE* se_trace_file = NULL;
static int se_write_trace_flag = 0;
static int se_trace_ready_flag = 0;
static int se_step_by_step_flag = 1;

int get_answer(void) {
  int result = 0;
  char c = getc(stdin);
  if (c != '\n') {
    result = c;
  }
  while (c != '\n') {
    c = getc(stdin);
  }
  return result;
}

static void sedb_help_command(void) {
  printf("SmallEiffel debugger.\n");
  printf("List of classes of commands:\n");
  printf("   (h) Help.\n");
  printf("   (s) Stack view.\n");
  printf("   (q) Quit.\n");
  printf("   Return to see the current Eiffel source line.");
  printf("   \n");
  printf("Please, feel free to debug or to complete this simple\n");
  printf("step-by-step debugger (see source file in\n");
  printf("\"SmallEiffel/sys/runtime/trace.c\".\n");
}

static void sedb_show_source_line(int l,int c,int f) {
  static int f_memo = 0;
  if (p[f] == NULL) {
    printf("line %d column %d of ???\t\t",l,c);
  }
  else {
    FILE *file = fopen(p[f],"r");
    if (file != NULL) {
      int line = 1;
      int column = 1;
      char cc;
      while (line < l) {
	cc = fgetc(file);
	if (cc == '\n') {
	  line++;
	}
      }
      cc = fgetc(file);
      while (cc != '\n') {
	if (cc == '\t') {
	  printf("        ");
	  column+=7;
	}
	else {
	  fputc(cc,stdout);
	}
	cc = fgetc(file);
	column++;
      }
      while (column < 72) {
	fputc(' ',stdout);
	column++;
      }
      printf("l%dc%d ",l,c);
      if (f_memo != f) {
	printf(" %s ",p[f]);
      }
      f_memo = f;
      fclose(file);
    }
    else {
      printf("line %d column %d of %s\t\t",l,c,p[f]);
    }
  }
}

void se_trace(se_dump_stack*ds,int l,int c,int f) {
  static char cmd_memo = 1;
  static char cmd;
  ds->l=l;
  ds->c=c;
  ds->f=f;
  if (se_trace_ready_flag) {
    if (se_write_trace_flag) {
      fprintf(se_trace_file,"line %d column %d in %s\n",l,c,p[f]);
      fflush(se_trace_file);
    }
  next_command:
    if (se_step_by_step_flag) {
      if (cmd_memo != 0) {
	printf("(sedb) ");
      }
      fflush(stdout);
      cmd = get_answer();
      cmd_memo = cmd;
      if ((cmd == 'h') || (cmd == 'H') || (cmd == '?')) {
	sedb_help_command();
	goto next_command;
      }
      else if ((cmd == 's') || (cmd == 'S')) {
	se_print_run_time_stack();
	goto next_command;
      }
      else if ((cmd == 'q') || (cmd == 'Q')) {
	exit(1);
      }
      else if (cmd == 0) {
	sedb_show_source_line(l,c,f);
      }
      else {
	printf("Unknown command.\nTtype H for help\n");
	goto next_command;
      }
    }
  }
  else {
    se_trace_ready_flag = 1;
    printf("Write the execution trace in \"trace.se\" file (y/n) ? [n]");
    fflush(stdout);
    if (get_answer() == 'y') {
      se_write_trace_flag = 1;
      se_trace_file = fopen("trace.se","w");
    }
    printf("Step-by-step execution (y/n) ? [y]");
    fflush(stdout);
    if (get_answer() == 'n') {
      se_step_by_step_flag = 0;
    }
    else {
	sedb_help_command();
    }
  }
}
# endif
/*
-- This file is  free  software, which  comes  along  with  SmallEiffel. This
-- software  is  distributed  in the hope that it will be useful, but WITHOUT 
-- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
-- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
-- this header is kept unaltered, and a notification of the changes is added.
-- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
-- another product.
--          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
--            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
--                       http://www.loria.fr/SmallEiffel
--
*/
/*
  This file (basic_directory.c) is automatically included when some external
  "SmallEiffel" feature of class BASIC_DIRECTORY is live.
*/

/*
  The current active entry while scanning a directory :
*/
static struct dirent* se_dir_entry = NULL;

void* se_dir_open(void* path) {
  /* Try to open directory `path'. */
  DIR* dirstream = opendir(((char*) path));

  if (dirstream != NULL) {
    se_dir_entry = readdir((DIR*) dirstream);
  }
  else {
    se_dir_entry = NULL;
  }
  return ((void*) dirstream);
}

void* se_dir_name(void* dirstream) {
  /* Return the name of the current entry. */
  char* entry;

  if (se_dir_entry != NULL) {
    entry = se_dir_entry->d_name;
    return entry;
  }
  else {
    return NULL;
  }
}

void* se_dir_next(void* dirstream_pointer) {
  /* Try to read the next entry. */
  DIR* dirstream = dirstream_pointer;

  if (se_dir_entry != NULL) {
    se_dir_entry = readdir(dirstream);
    if (se_dir_entry == NULL) {
      closedir(dirstream);
      return NULL;
    }
    else {
      return dirstream;
    }
  }
  else {
    return NULL;
  }
}

void* se_dir_gcwd(int unused) {
  static char* buf = NULL;
  static size_t size = 0;
  if (buf == NULL) {
    size = 256;
    buf = (char*)malloc(size);
  }
  if (getcwd(buf,size) != NULL) {
    return buf;
  }
  else {
    free(buf);
    size = size * 2;
    buf = (char*)malloc(size);
    return se_dir_gcwd(0);
  }
}
unsigned int fsoc_count_ceil=56;
unsigned int rsoc_count_ceil=8;
/*
-- This file is  free  software, which  comes  along  with  SmallEiffel. This
-- software  is  distributed  in the hope that it will be useful, but WITHOUT 
-- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
-- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
-- this header is kept unaltered, and a notification of the changes is added.
-- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
-- another product.
--          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
--            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
--                       http://www.loria.fr/SmallEiffel
--
*/

/* This file is automatically included when the Garbage Collector
   is used (default, unless option -no_gc has been selected).
*/

void**stack_bottom;
mch**gcmt=NULL;
int gcmt_max=2048;
int gcmt_used=0;
fsoc*fsocfl=NULL;
rsoc*rsocfl=NULL;
int gc_is_off=1;
unsigned int fsoc_count=0;
unsigned int rsoc_count=0;
void*gcmt_tail_addr=NULL;

void gc_sweep(void) {
  mch** p2 = gcmt;
  mch** p1 = gcmt+1;
  mch**eogcmt=gcmt+gcmt_used;
  if (FREE_CHUNK((*p2)->state_type)) {
    if (RSO_FREE_CHUNK == ((*p2)->state_type)) {
      ((rsoc*)(*p2))->next=NULL;
      rsocfl=((rsoc*)(*p2));
    }
    else {
      rsocfl=NULL;
    }	
  }
  else {
    ((*gcmt)->swfp)(*p2);
    if (RSO_FREE_CHUNK==((*p2)->state_type)) {
      ((rsoc*)(*p2))->next=NULL;
      rsocfl=((rsoc*)(*p2));
    }
    else {
      rsocfl=NULL;
    }
  }
  while (p1 < eogcmt) {
    if (FREE_CHUNK((*p1)->state_type)) {
      if (RSO_FREE_CHUNK == ((*p1)->state_type)) {
	if (RSO_FREE_CHUNK == ((*p2)->state_type)) {
	  if (((char*)(*p2))+(*p2)->size == ((char*)(*p1))) {
	    ((*p2)->size)+=((*p1)->size);
	    p1++;
	  }
	  else {
	    ((rsoc*)(*p1))->next=rsocfl;
	    rsocfl=((rsoc*)(*p1));
	    *(p2+1)=*p1; p2++; p1++;
	  }
	}
	else {
	  ((rsoc*)(*p1))->next=rsocfl;
	  rsocfl=((rsoc*)(*p1));
	  *(p2+1)=*p1; p2++; p1++;
	}
      }
      else {
	*(p2+1)=*p1; p2++; p1++;
      }
    }
    else {
      ((*p1)->swfp)(*p1);
      if (RSO_FREE_CHUNK == ((*p1)->state_type)) {
	if (RSO_FREE_CHUNK == ((*p2)->state_type)) {
	  if (((char*)(*p2))+(*p2)->size == ((char*)(*p1))) {
	    ((*p2)->size)+=((*p1)->size);
	    p1++;
	  }
	  else {
	    ((rsoc*)(*p1))->next=rsocfl;
	    rsocfl=((rsoc*)(*p1));
	    *(p2+1)=*p1; p2++; p1++;
	  }
	}
	else {
	  ((rsoc*)(*p1))->next=rsocfl;
	  rsocfl=((rsoc*)(*p1));
	  *(p2+1)=*p1; p2++; p1++;
	}
      }
      else {
	*(p2+1)=*p1; p2++; p1++;
      }
    }
  }
  gcmt_used=(p2-gcmt)+1;
}

void gc_mark(void*p) {
  if ((p>((void*)*gcmt))&&(p<=gcmt_tail_addr)) {
    int i1=0;
    int i2=gcmt_used-1;
    int m=i2>>1;
    mch*c;
    for (;i2>i1;m=((i1+i2)>>1)) {
      if (p<=((void*)gcmt[m+1])) {
	i2=m;
      }
      else {
	i1=m+1;
      }
    }
    c=gcmt[i2];
    if (!(FREE_CHUNK(c->state_type))) {
      (c->amfp)(c,p);
    }
  }
}

int gc_stack_size(void) {
  void*stack_top[2]={NULL,NULL};
  if (stack_top > stack_bottom) {
    return ((void**)stack_top)-((void**)stack_bottom);
  }
  else {
    return ((void**)stack_bottom)-((void**)stack_top);
  }
}

/*
  To delay Garbage Collection when the stack is too large.
  To allow fast increase of ceils.
*/
#define FSOC_LIMIT (10240/((FSOC_SIZE)>>10))
#define RSOC_LIMIT (10240/((RSOC_SIZE)>>10)) 

/*
  When stack is too large, collection may be delayed.
*/
#define GCLARGESTACK 50000

int garbage_delayed(void) {
  if (gc_stack_size() > GCLARGESTACK) {
    if (fsoc_count_ceil <= fsoc_count) {
      if (rsoc_count_ceil <= rsoc_count) {
	if ((fsoc_count<FSOC_LIMIT)&&(rsoc_count<RSOC_LIMIT)) {
	  fsoc_count_ceil++;
	  rsoc_count_ceil++;
	return 1;
	}
	else return 0;
      }
      else {
	if (fsoc_count<FSOC_LIMIT) {
	  fsoc_count_ceil++;
	  return 1;
	}
	else return 0;
      }
    }
    else {
      if (rsoc_count_ceil <= rsoc_count) {
	if (rsoc_count<RSOC_LIMIT) {
	  rsoc_count_ceil++;
	  return 1;
	}
	else return 0;
      }
      else return 0;
    }
  }
  else {
    return 0;
  }
}

void gc_update_ceils(void) {
  int c;

  /* Compute fsoc_count_ceil :
   */
  if (fsocfl==NULL) {
    if (fsoc_count >= fsoc_count_ceil) {
      if (fsoc_count_ceil<FSOC_LIMIT) {
	fsoc_count_ceil<<=1;
      }
      else { 
	c=fsoc_count+(fsoc_count/3);
	if (fsoc_count_ceil < c)
	  fsoc_count_ceil=c;
      }
    }
  }
  else
    if (fsoc_count_ceil < fsoc_count)
      fsoc_count_ceil=fsoc_count;
  /* Compute rsoc_count_ceil :
   */
  if (rsocfl==NULL) {
    if (rsoc_count>=rsoc_count_ceil) {
      if (rsoc_count_ceil<RSOC_LIMIT) {
	rsoc_count_ceil<<=1;
      }
      else { 
	c=rsoc_count+(rsoc_count/3);
	if (rsoc_count_ceil < c)
	  rsoc_count_ceil=c;
      }
    }
  }
  else
    if (rsoc_count_ceil < rsoc_count)
      rsoc_count_ceil=rsoc_count;
}

static void add_to_gcmt(mch*c) {
  mch**p;
  if (gcmt_used==gcmt_max) {
    gcmt_max<<=1;
    gcmt=realloc(gcmt,(gcmt_max+1)*sizeof(void*));
  }
  for(p=gcmt+(gcmt_used++ -1);(p>=gcmt)&&(*p>c);p--)
    *(p+1)=*p;
  *(p+1)=c;
}

fsoc*new_fsoc(void) {
  if(fsocfl!=NULL){
    fsoc*r=fsocfl;
    fsocfl=fsocfl->next;
    return r;
  }
  else {
    mch*r=malloc(FSOC_SIZE);
    mch**p;
    gc_update_ceils();
    fsoc_count++;
    if (gcmt_used==gcmt_max) {
      gcmt_max<<=1;
      gcmt=realloc(gcmt,(gcmt_max+1)*sizeof(void*));
    }
    for (p=gcmt+(gcmt_used++ -1);(p>=gcmt)&&(*p>r);p--)
      *(p+1)=*p;
    *(p+1)=r;
    return (fsoc*)r;
  }
}

static char*rso_from_store(na_env*nae,int size) {
  rsoh*r=(nae->store);
  nae->store_left-=size;
  if ((nae->store_left) > sizeof(rsoh)) {
    r->header.size=size;
    nae->store=((rsoh*)(((char*)(nae->store))+size));
  }
  else {
    r->header.size=size+nae->store_left;
    nae->store_left=0;
  }
  (r->header.magic_flag)=RSOH_UNMARKED;
  ((void)memset((r+1),0,r->header.size-sizeof(rsoh)));
  return (char*)(r+1);
}

static void rsoc_sweep(rsoc*c) {
  na_env*nae=c->nae;
  rsoh*gp=(rsoh*)&(c->first_header);
  rsoh*pp;
  rsoh*eoc=((rsoh*)(((char*)c)+c->header.size));
  c->free_list_of_large=NULL;
  if (c->header.size > RSOC_SIZE) {
    if (gp->header.magic_flag == RSOH_MARKED) {
      gp->header.magic_flag=RSOH_UNMARKED;
      c->next=nae->chunk_list;
      nae->chunk_list=c;
    }
    else {
      c->header.state_type=RSO_FREE_CHUNK;
    }
    return;
  }
  while (gp<eoc) {
    while (gp->header.magic_flag == RSOH_MARKED) {
      gp->header.magic_flag=RSOH_UNMARKED;
      gp=((rsoh*)(((char*)gp)+gp->header.size));
      if(gp>=eoc) {
	c->next=nae->chunk_list;
	nae->chunk_list=c;
	return;
      }
    }
    gp->header.magic_flag=RSOH_FREE;
    pp=(rsoh*)(((char*)gp)+gp->header.size);
    while ((pp<eoc)&&(pp->header.magic_flag != RSOH_MARKED)) {
      pp->header.magic_flag=RSOH_FREE;
      gp->header.size+=pp->header.size;
      pp=((rsoh*)(((char*)pp)+pp->header.size));
    }
    if (gp->header.size >= RSOC_MIN_STORE) {
      if (nae->store_left==0) {
	nae->store_left=gp->header.size;
	nae->store=gp;
	nae->store_chunk=c;
      }
      else if (nae->store->header.size < gp->header.size) {
	((fll_rsoh*)nae->store)->nextflol=nae->store_chunk->free_list_of_large;
	nae->store_chunk->free_list_of_large=((fll_rsoh*)nae->store);
	nae->store_left=gp->header.size;
	nae->store=gp;
	nae->store_chunk=c;
      }
      else {
	((fll_rsoh*)gp)->nextflol=c->free_list_of_large;
	c->free_list_of_large=((fll_rsoh*)gp);
      }
    }
    gp=pp;
  }
  if (((rsoh*)(&c->first_header))->header.size >= 
      (c->header.size-sizeof(rsoc)+sizeof(rsoh))){
    c->header.state_type=RSO_FREE_CHUNK;
    nae->store_chunk=NULL;
    nae->store_left=0; 
  }
  else{
    c->next=nae->chunk_list;
    nae->chunk_list=c;
  }
}

static rsoc MRSOC = {
    {
	RSOC_SIZE,
	RSO_USED_CHUNK,
	((void(*)(mch*,void*))gcna_align_mark),
	((void(*)(mch*))rsoc_sweep)
    },
    NULL,
    NULL,
    NULL,
    {
      {
	0,
	RSOH_MARKED
      }
    }
};

static void rsoc_malloc(na_env*nae){
  rsoc*r=malloc(RSOC_SIZE);
  rsoc_count++;
  *r=MRSOC;
  r->nae=nae;
  nae->store=(&(r->first_header));
  nae->store_left=RSOC_SIZE-sizeof(rsoc)+sizeof(rsoh);
  nae->store_chunk=r;
  r->next=nae->chunk_list;
  nae->chunk_list=r;
  add_to_gcmt((mch*)r);
}

static rsoc* rsocfl_best_fit(int size) {
  int best_size;
  rsoc *pc,*best_pc,*best_c, *c;
  if (rsocfl==NULL)
    return NULL;
  pc=NULL;
  best_pc=NULL;
  best_c=NULL;
  c=rsocfl;
  while ((NULL!=c)&&(NULL==best_c)){
    if (c->header.size>=size){
      best_c=c;
      best_pc=pc;
      best_size=c->header.size;
    }
    pc=c;
    c=c->next;
  }
  if (NULL==c){
    if (best_pc != NULL)
      best_pc->next=best_c->next;
    else if (best_c==rsocfl)
      rsocfl=best_c->next;
    return best_c;
  }
  do{
    if ((c->header.size>=size)&&(c->header.size<best_size)){	
      best_c=c;
      best_pc=pc;
      best_size=c->header.size;
    }
    pc=c;
    c=c->next;
  } while(c!=NULL);
  if (NULL==best_pc) {
    rsocfl = best_c->next;
  }
  else {
    best_pc->next=best_c->next;
  }
  return best_c;
}

static int get_store_in(rsoc*c,int size) {
  na_env*nae=c->nae;
  fll_rsoh*pf=NULL;
  fll_rsoh*f=c->free_list_of_large;
  while (f != NULL) {
    if (f->rsoh_field.size >= size) {
      nae->store_left=f->rsoh_field.size;
      nae->store=(rsoh*)f;
      nae->store_chunk=c;
      if (pf == NULL) {
	c->free_list_of_large=f->nextflol;
      }
      else {
	pf->nextflol=f->nextflol;
      }
      return 1;
    }
    pf = f;
    f = f->nextflol;
  }
  return 0;
}

char*new_na_from_chunk_list(na_env*nae,int size) {
  rsoc*c=nae->chunk_list;
  int csize;
  while (c != NULL) {
    if (get_store_in(c,size)) {
      return rso_from_store(nae,size);
    }	
    c = c->next;
  }
  csize=size+(sizeof(rsoc)-sizeof(rsoh));
  c=rsocfl_best_fit(csize);
  if (c != NULL){
    if ((c->header.size > RSOC_SIZE)
	&&
	(c->header.size-csize > RSOC_MIN_STORE*4)) {
      int csize_left=c->header.size-csize;
      if ((csize_left%sizeof(double))!=0) {
	csize_left-=(csize_left%sizeof(double));
	csize=c->header.size-csize_left;
      }
      c->header.size=csize_left;
      c->next=rsocfl;
      rsocfl=c;
      c=(rsoc*)(((char*)c)+csize_left);
      add_to_gcmt((mch*)c);
      c->header.amfp=(void(*)(mch*,void*))gcna_align_mark;
      c->header.swfp=(void(*)(mch*))rsoc_sweep;
    }
    else {
      csize=c->header.size;
    }
    c->header.size=csize;
    c->header.state_type=RSO_USED_CHUNK;
    c->free_list_of_large=NULL;
    c->nae=nae;
    nae->store=(&(c->first_header));
    nae->store_left=csize-sizeof(rsoc)+sizeof(rsoh);
    nae->store_chunk=c;
    c->next=nae->chunk_list;
    nae->chunk_list=c;
    return rso_from_store(nae,size);
  }
  return NULL;
}

char*new_na(na_env*nae,int size) { 
  if (nae->store_left>0) {
    nae->store->header.size=nae->store_left;
    nae->store->header.magic_flag=RSOH_FREE;
    if (nae->store_left >= RSOC_MIN_STORE) {
      ((fll_rsoh*)(nae->store))->nextflol=nae->store_chunk->free_list_of_large;
      nae->store_chunk->free_list_of_large=((fll_rsoh*)nae->store);
    }
    nae->store_left=0;
  }
  if ((nae->store_chunk!=NULL)&&(get_store_in(nae->store_chunk,size))) {
    return rso_from_store(nae,size);
  }
  {
    char*r=new_na_from_chunk_list(nae,size);
    if (r!=NULL)
      return r;
  }
  if (rsoc_count<rsoc_count_ceil) {
    if((size+sizeof(rsoc)-sizeof(rsoh))>RSOC_SIZE){
      rsoc*c=malloc(size+sizeof(rsoc)-sizeof(rsoh));
      rsoh*r=(&(c->first_header));
      rsoc_count++;
      *c=MRSOC;
      c->header.size=size+sizeof(rsoc)-sizeof(rsoh);
      c->nae=nae;
      c->next=nae->chunk_list;
      nae->chunk_list=c;
      add_to_gcmt((mch*)c);
      r->header.size=size;
      (r->header.magic_flag)=RSOH_UNMARKED;
      ((void)memset((r+1),0,size-sizeof(rsoh)));
      return (char*)(r+1);
    }
    else {
      rsoc_malloc(nae);
      return rso_from_store(nae,size);
    }
  }
  gc_start();
  if (size<=(nae->store_left)) {
    return rso_from_store(nae,size);
  }
  {
    char*r=new_na_from_chunk_list(nae,size);
    if (r!=NULL) {
      return r;
    }
  }
  if((size+sizeof(rsoc)-sizeof(rsoh))>RSOC_SIZE){
    rsoc*c=malloc(size+sizeof(rsoc)-sizeof(rsoh));
    rsoh*r=(&(c->first_header));
    rsoc_count++;
    *c=MRSOC;
    c->header.size=size+sizeof(rsoc)-sizeof(rsoh);
    c->nae=nae;
    c->next=nae->chunk_list;
    nae->chunk_list=c;
    add_to_gcmt((mch*)c);
    r->header.size=size;
    (r->header.magic_flag)=RSOH_UNMARKED;
    ((void)memset((r+1),0,size-sizeof(rsoh)));
    gc_update_ceils();
    return (char*)(r+1);
  }
  else {
    rsoc_malloc(nae);
    gc_update_ceils();
    return rso_from_store(nae,size);
  }
}

void gcna_align_mark(rsoc*c,void*o) {
  na_env* nae = c->nae;
  fll_rsoh* f;
  fll_rsoh* pf;
  char* b = (char*)&(c->first_header);
  if (((char*)o) > (((char*)c)+c->header.size)) {
      return;
  }
  if (((((char*)o)-((char*)c))%sizeof(int)) != 0) {
      return;
  }
  if ((((rsoh*)o)-1)->header.magic_flag != RSOH_UNMARKED) {
      return;
  }
  if (((char*)o) < ((char*)(c+1))) {
      return;
  }
  if (c->header.size > RSOC_SIZE) {
      if (o == (c+1)) {
	  nae->gc_mark(o);
      }
      return;
  }
  pf=NULL;
  f=c->free_list_of_large;
  while ((f != NULL) && (f < ((fll_rsoh*)o))) {
      pf=f;
      f=f->nextflol;
  }
  if (pf == NULL) {
      pf=(fll_rsoh*)b;
  }
  while ((((rsoh*)pf)+1) < (rsoh*)o) {
      pf = ((fll_rsoh*)(((char*)pf)+pf->rsoh_field.size));
  }
  {void* tmp = (((rsoh*)pf)+1);
  if (o == tmp) {
      nae->gc_mark(o);
  } 
  } 
}

int rsocfl_count(void) {
  int r=0;
  rsoc*p=rsocfl;
  while (p!=NULL) {
    r++;
    p=p->next;
  }
  return r;
}

int fsocfl_count(void) {
  int r=0;
  fsoc*p=fsocfl;
  while (p!=NULL) {
    r++;
    p=p->next;
  }
  return r;
}

void rsocfl_info(void) {
  int max=0;
  rsoc*p=rsocfl;
  printf(" rsocfl count = %d\n",rsocfl_count());
  if (p!=NULL) {
    printf(" rsocfl = [");
    p=rsocfl;
    while (p!=NULL) {
      printf("%d",p->header.size);
      if(max < p->header.size) max=p->header.size;
      p=p->next;
      if (p!=NULL)printf(",");
    }
    printf("]\n");
    printf(" rsocfl max = %d\n",max);
  }
}
unsigned int gc_start_count=0;


T6 r2in_range(se_dump_stack*caller,T2 C,T2 a1,T2 a2){
T6 R=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2in_range;
ds.current=((void**)&C);
ds.l=59;
ds.c=4;
ds.f=375;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,62,3,375);
R=((C)>=(a1))&&((C)<=(a2));
if(f2in_range.assertion_flag){
f2in_range.assertion_flag=0;
se_trace(&ds,64,10,375);
ac_ens((R)==(r6_px_and(&ds,(C)>=(a1),(C)<=(a2))));
f2in_range.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2in_range={"in_range of COMPARABLE",1,3,"%E2%lower%E2%upper%E2%Result%E6%",1};


void r2append_in(se_dump_stack*caller,T2 C,T0* a1){
T2 _i=0;
T2 _val=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2append_in;
ds.current=((void**)&C);
ds.l=183;
ds.c=4;
ds.f=2;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&_i;
locals[2]=(void**)&_val;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2append_in.assertion_flag){
f2append_in.assertion_flag=0;
se_trace(&ds,188,7,2);
ac_req((a1)!=((void*)(NULL)));
f2append_in.assertion_flag=1;
}
/*[IF*/
if((se_trace(&ds,192,14,2),(C)==(0))){
se_trace(&ds,193,10,2);
r7extend(&ds,se_i7(&ds,((T7*)ci(7,a1,193,6,2))),'0');
}
else{
/*[IF*/
if((se_trace(&ds,195,17,2),(C)>(0))){
se_trace(&ds,197,5,2);
_i=((se_i7(&ds,((T7*)ci(7,a1,197,10,2))))->_count/*8*/)+(1);
se_trace(&ds,198,5,2);
_val=C;
while (!((se_trace(&ds,200,9,2),(_val)==(0)))) {
se_trace(&ds,202,9,2);
r7extend(&ds,se_i7(&ds,((T7*)ci(7,a1,202,5,2))),r2digit(&ds,(_val)%(10)));
se_trace(&ds,203,5,2);
_val=(_val)/(10);
}
}
else{
se_trace(&ds,206,13,2);
r7extend(&ds,se_i7(&ds,((T7*)ci(7,a1,206,9,2))),'\55');
se_trace(&ds,208,5,2);
_i=((se_i7(&ds,((T7*)ci(7,a1,208,10,2))))->_count/*8*/)+(1);
se_trace(&ds,209,5,2);
_val=C;
while (!((se_trace(&ds,211,9,2),(_val)==(0)))) {
se_trace(&ds,213,9,2);
r7extend(&ds,se_i7(&ds,((T7*)ci(7,a1,213,5,2))),r2digit(&ds,-((_val)%(10))));
se_trace(&ds,214,5,2);
_val=(_val)/(10);
}
}
/*FI]*/
se_trace(&ds,218,9,2);
_val=(se_i7(&ds,((T7*)ci(7,a1,218,16,2))))->_count/*8*/;
while (!((se_trace(&ds,220,11,2),(_i)>=(_val)))) {
se_trace(&ds,222,13,2);
r7swap(&ds,se_i7(&ds,((T7*)ci(7,a1,222,9,2))),_i,_val);
se_trace(&ds,223,9,2);
_val=(_val)-(1);
se_trace(&ds,224,9,2);
_i=(_i)+(1);
}
}
/*FI]*/
se_dst=caller;/*unlink*/
}
se_frame_descriptor f2append_in={"append_in of INTEGER",1,3,"%E2%str%R7%i%E2%val%E2%",1};


T3 r2digit(se_dump_stack*caller,T2 C){
T3 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f2digit;
ds.current=((void**)&C);
ds.l=267;
ds.c=4;
ds.f=2;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2digit.assertion_flag){
f2digit.assertion_flag=0;
se_trace(&ds,270,3,2);
ac_req(r2in_range(&ds,C,0,9));
f2digit.assertion_flag=1;
}
se_trace(&ds,272,3,2);
R=((T3)((C)+(((unsigned char)'0'))));
if(f2digit.assertion_flag){
f2digit.assertion_flag=0;
se_trace(&ds,274,18,2);
ac_ens(r7has(&ds,ms2_8350,R));
se_trace(&ds,275,16,2);
ac_ens((r3value(&ds,R))==(C));
f2digit.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2digit={"digit of INTEGER",1,1,"%E2%Result%E3%",1};
/*No:INTEGER.item*/


T6 r2divisible(se_dump_stack*caller,T2 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f2divisible;
ds.current=NULL;
ds.l=104;
ds.c=4;
ds.f=528;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
se_trace(&ds,106,3,528);
R=(a1)!=(0);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2divisible={"divisible of INTEGER_REF",0,2,"other%E2%Result%E6%",1};


T6 r3_px_6061(se_dump_stack*caller,T3 C,T3 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f3_px_6061;
ds.current=((void**)&C);
ds.l=46;
ds.c=4;
ds.f=3;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
se_trace(&ds,49,3,3);
R=(((unsigned char)C))<=(((unsigned char)a1));
if(f3_px_6061.assertion_flag){
f3_px_6061.assertion_flag=0;
se_trace(&ds,36,42,375);
ac_ens(r6_px_or(&ds,(R)==(r3_px_60(&ds,C,a1)),(C)==(a1)));
f3_px_6061.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f3_px_6061={"infix <= of CHARACTER",1,2,"%E3%other%E3%Result%E6%",1};


T6 r3_px_60(se_dump_stack*caller,T3 C,T3 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f3_px_60;
ds.current=((void**)&C);
ds.l=40;
ds.c=4;
ds.f=3;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
se_trace(&ds,43,3,3);
R=(((unsigned char)C))<(((unsigned char)a1));
if(f3_px_60.assertion_flag){
f3_px_60.assertion_flag=0;
se_trace(&ds,26,22,375);
ac_ens((!(R))||(r6_ix_not(&ds,r3_px_60(&ds,a1,C))));
f3_px_60.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f3_px_60={"infix < of CHARACTER",1,2,"%E3%other%E3%Result%E6%",1};


T6 r3is_digit(se_dump_stack*caller,T3 C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f3is_digit;
ds.current=((void**)&C);
ds.l=137;
ds.c=4;
ds.f=3;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
{int z1=C;

if(((48<=z1)&&(z1<=57))){
se_trace(&ds,143,6,3);
R=1;
}
}
if(f3is_digit.assertion_flag){
f3is_digit.assertion_flag=0;
se_trace(&ds,147,9,3);
ac_ens((!(R))||(r6_px_and(&ds,r3_px_6061(&ds,'0',C),r3_px_6061(&ds,C,'9'))));
f3is_digit.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f3is_digit={"is_digit of CHARACTER",1,1,"%E3%Result%E6%",1};


T2 r3value(se_dump_stack*caller,T3 C){
T2 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f3value;
ds.current=((void**)&C);
ds.l=69;
ds.c=4;
ds.f=3;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f3value.assertion_flag){
f3value.assertion_flag=0;
se_trace(&ds,72,3,3);
ac_req(r3is_digit(&ds,C));
f3value.assertion_flag=1;
}
se_trace(&ds,74,3,3);
R=(((unsigned char)C))-(48);
if(f3value.assertion_flag){
f3value.assertion_flag=0;
se_trace(&ds,76,15,3);
ac_ens(r6_px_and(&ds,(0)<=(R),(R)<=(9)));
se_trace(&ds,77,22,3);
ac_ens((R)==((((unsigned char)C))-(48)));
f3value.assertion_flag=1;
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f3value={"value of CHARACTER",1,1,"%E3%Result%E2%",1};


T6 r8is_null(se_dump_stack*caller,T8 C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f8is_null;
ds.current=((void**)&C);
ds.l=28;
ds.c=4;
ds.f=8;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,31,3,8);
R=r6_ix_not(&ds,(NULL!=C));
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f8is_null={"is_null of POINTER",1,1,"%E8%Result%E6%",1};


T6 r6_px_or(se_dump_stack*caller,T6 C,T6 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f6_px_or;
ds.current=((void**)&C);
ds.l=48;
ds.c=4;
ds.f=6;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
se_trace(&ds,55,3,6);
R=(C)||(a1);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f6_px_or={"infix or of BOOLEAN",1,2,"%E6%other%E6%Result%E6%",1};


T6 r6_ix_not(se_dump_stack*caller,T6 C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f6_ix_not;
ds.current=((void**)&C);
ds.l=73;
ds.c=12;
ds.f=6;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
/*[IF*/
if(C){
}
else{
se_trace(&ds,78,6,6);
R=1;
}
/*FI]*/
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f6_ix_not={"prefix not of BOOLEAN",1,1,"%E6%Result%E6%",1};


T6 r6_px_and(se_dump_stack*caller,T6 C,T6 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f6_px_and;
ds.current=((void**)&C);
ds.l=28;
ds.c=4;
ds.f=6;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
se_trace(&ds,35,3,6);
R=(C)&&(a1);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f6_px_and={"infix and of BOOLEAN",1,2,"%E6%other%E6%Result%E6%",1};


T2135 r2135realloc(se_dump_stack*caller,T2135 C,T2 a1,T2 a2){
T2135 R=NULL;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2135realloc;
ds.current=((void**)&C);
ds.l=52;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2135realloc.assertion_flag){
f2135realloc.assertion_flag=0;
se_trace(&ds,61,3,842);
ac_req(r2135is_not_null(&ds,C));
se_trace(&ds,62,15,842);
ac_req((a1)<(a2));
f2135realloc.assertion_flag=1;
}
se_trace(&ds,64,3,842);
R=new2135(a2);
se_trace(&ds,65,10,842);
r2135copy_from(&ds,R,C,(a1)-(1));
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135realloc={"realloc of NATIVE_ARRAY",1,3,"%E2135%old_nb_elts%E2%new_nb_elts%E2%Result%E2135%",1};


T6 r2135is_not_null(se_dump_stack*caller,T2135 C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f2135is_not_null;
ds.current=((void**)&C);
ds.l=467;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,469,3,842);
R=(NULL!=((void*)C));
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135is_not_null={"is_not_null of NATIVE_ARRAY",1,1,"%E2135%Result%E6%",1};


void r2135set_all_with(se_dump_stack*caller,T2135 C,T0* a1,T2 a2){
T2 _i=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2135set_all_with;
ds.current=((void**)&C);
ds.l=285;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&_i;
se_dst=&ds;/*link*/
se_trace(&ds,292,6,842);
_i=a2;
while (!((se_trace(&ds,294,8,842),(_i)<(0)))) {
se_trace(&ds,296,6,842);
(C)[_i]=(a1);
se_trace(&ds,297,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
}
se_frame_descriptor f2135set_all_with={"set_all_with of NATIVE_ARRAY",1,3,"%E2135%v%R7%upper%E2%i%E2%",1};


T6 r2135equal_like(se_dump_stack*caller,T0* a1,T0* a2){
T6 R=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2135equal_like;
ds.current=NULL;
ds.l=488;
ds.c=11;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
/*[IF*/
/*AF*//*AF*/if((se_trace(&ds,497,13,842),(a1)==((void*)(a2)))){
se_trace(&ds,498,6,842);
R=1;
}
 else if((se_trace(&ds,499,20,842),((a1)==((void*)(NULL)))||((a2)==((void*)(NULL))))){
}
else{
se_trace(&ds,501,6,842);
R=r7is_equal(&ds,se_i7(&ds,((T7*)ci(7,a1,501,16,842))),a2);
}
/*FI]*/
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135equal_like={"equal_like of NATIVE_ARRAY",0,3,"e1%R7%e2%R7%Result%E6%",1};


void r2135copy_from(se_dump_stack*caller,T2135 C,T2135 a1,T2 a2){
T2 _i=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2135copy_from;
ds.current=((void**)&C);
ds.l=338;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&_i;
se_dst=&ds;/*link*/
se_trace(&ds,344,6,842);
_i=a2;
while (!((se_trace(&ds,346,8,842),(_i)<(0)))) {
se_trace(&ds,348,6,842);
(C)[_i]=((a1)[_i]);
se_trace(&ds,349,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
}
se_frame_descriptor f2135copy_from={"copy_from of NATIVE_ARRAY",1,3,"%E2135%model%E2135%upper%E2%i%E2%",1};


T6 r2135all_cleared(se_dump_stack*caller,T2135 C,T2 a1){
T6 R=0;
T0* _model=NULL;
T2 _i=0;
void**locals[4];
se_dump_stack ds;
ds.fd=&f2135all_cleared;
ds.current=((void**)&C);
ds.l=423;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
locals[2]=(void**)&_model;
locals[3]=(void**)&_i;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2135all_cleared.assertion_flag){
f2135all_cleared.assertion_flag=0;
se_trace(&ds,427,9,842);
ac_req((a1)>=(-(1)));
f2135all_cleared.assertion_flag=1;
}
se_trace(&ds,433,6,842);
R=1;
se_trace(&ds,434,6,842);
_i=a1;
while (!((se_trace(&ds,436,12,842),((_i)<(0))||(r6_ix_not(&ds,R))))) {
se_trace(&ds,438,6,842);
R=(_model)==((void*)((C)[_i]));
se_trace(&ds,439,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135all_cleared={"all_cleared of NATIVE_ARRAY",1,4,"%E2135%upper%E2%Result%E6%model%R7%i%E2%",1};


T6 r2135memcmp(se_dump_stack*caller,T2135 C,T2135 a1,T2 a2){
T6 R=0;
T2 _i=0;
void**locals[4];
se_dump_stack ds;
ds.fd=&f2135memcmp;
ds.current=((void**)&C);
ds.l=70;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
locals[3]=(void**)&_i;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2135memcmp.assertion_flag){
f2135memcmp.assertion_flag=0;
se_trace(&ds,76,16,842);
ac_req((!((a2)>(0)))||(r2135is_not_null(&ds,a1)));
f2135memcmp.assertion_flag=1;
}
se_trace(&ds,81,6,842);
R=1;
se_trace(&ds,82,6,842);
_i=(a2)-(1);
while (!((se_trace(&ds,84,12,842),((_i)<(0))||(r6_ix_not(&ds,R))))) {
se_trace(&ds,86,6,842);
R=r2135equal_like(&ds,(C)[_i],(a1)[_i]);
se_trace(&ds,87,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135memcmp={"memcmp of NATIVE_ARRAY",1,4,"%E2135%other%E2135%capacity%E2%Result%E6%i%E2%",1};


T2 r2135index_of(se_dump_stack*caller,T2135 C,T0* a1,T2 a2){
T2 R=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f2135index_of;
ds.current=((void**)&C);
ds.l=111;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f2135index_of.assertion_flag){
f2135index_of.assertion_flag=0;
se_trace(&ds,116,9,842);
ac_req((a2)>=(-(1)));
f2135index_of.assertion_flag=1;
}
while (!((se_trace(&ds,120,21,842),((R)>(a2))||(r2135equal_like(&ds,a1,(C)[R]))))) {
se_trace(&ds,122,6,842);
R=(R)+(1);
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f2135index_of={"index_of of NATIVE_ARRAY",1,3,"%E2135%element%R7%upper%E2%Result%E2%",1};


T6 r9fast_memcmp(se_dump_stack*caller,T9 C,T9 a1,T2 a2){
T6 R=0;
T2 _i=0;
void**locals[4];
se_dump_stack ds;
ds.fd=&f9fast_memcmp;
ds.current=((void**)&C);
ds.l=91;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
locals[3]=(void**)&_i;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f9fast_memcmp.assertion_flag){
f9fast_memcmp.assertion_flag=0;
se_trace(&ds,94,16,842);
ac_req((!((a2)>(0)))||(r9is_not_null(&ds,a1)));
f9fast_memcmp.assertion_flag=1;
}
se_trace(&ds,99,6,842);
R=1;
se_trace(&ds,100,6,842);
_i=(a2)-(1);
while (!((se_trace(&ds,102,12,842),((_i)<(0))||(r6_ix_not(&ds,R))))) {
se_trace(&ds,104,6,842);
R=((C)[_i])==((a1)[_i]);
se_trace(&ds,105,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f9fast_memcmp={"fast_memcmp of NATIVE_ARRAY",1,4,"%E9%other%E9%capacity%E2%Result%E6%i%E2%",1};


T9 r9realloc(se_dump_stack*caller,T9 C,T2 a1,T2 a2){
T9 R=NULL;
void**locals[3];
se_dump_stack ds;
ds.fd=&f9realloc;
ds.current=((void**)&C);
ds.l=52;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f9realloc.assertion_flag){
f9realloc.assertion_flag=0;
se_trace(&ds,61,3,842);
ac_req(r9is_not_null(&ds,C));
se_trace(&ds,62,15,842);
ac_req((a1)<(a2));
f9realloc.assertion_flag=1;
}
se_trace(&ds,64,3,842);
R=new9(a2);
se_trace(&ds,65,10,842);
r9copy_from(&ds,R,C,(a1)-(1));
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f9realloc={"realloc of NATIVE_ARRAY",1,3,"%E9%old_nb_elts%E2%new_nb_elts%E2%Result%E9%",1};


T6 r9is_not_null(se_dump_stack*caller,T9 C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f9is_not_null;
ds.current=((void**)&C);
ds.l=467;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,469,3,842);
R=(NULL!=((void*)C));
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f9is_not_null={"is_not_null of NATIVE_ARRAY",1,1,"%E9%Result%E6%",1};


T6 r9fast_has(se_dump_stack*caller,T9 C,T3 a1,T2 a2){
T6 R=0;
T2 _i=0;
void**locals[4];
se_dump_stack ds;
ds.fd=&f9fast_has;
ds.current=((void**)&C);
ds.l=157;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
locals[3]=(void**)&_i;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f9fast_has.assertion_flag){
f9fast_has.assertion_flag=0;
se_trace(&ds,161,9,842);
ac_req((a2)>=(-(1)));
f9fast_has.assertion_flag=1;
}
se_trace(&ds,166,6,842);
_i=a2;
while (!((se_trace(&ds,168,13,842),(R)||((_i)<(0))))) {
se_trace(&ds,170,6,842);
R=(a1)==((C)[_i]);
se_trace(&ds,171,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f9fast_has={"fast_has of NATIVE_ARRAY",1,4,"%E9%element%E3%upper%E2%Result%E6%i%E2%",1};


void r9copy_from(se_dump_stack*caller,T9 C,T9 a1,T2 a2){
T2 _i=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f9copy_from;
ds.current=((void**)&C);
ds.l=338;
ds.c=4;
ds.f=842;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&_i;
se_dst=&ds;/*link*/
se_trace(&ds,344,6,842);
_i=a2;
while (!((se_trace(&ds,346,8,842),(_i)<(0)))) {
se_trace(&ds,348,6,842);
(C)[_i]=((a1)[_i]);
se_trace(&ds,349,6,842);
_i=(_i)-(1);
}
se_dst=caller;/*unlink*/
}
se_frame_descriptor f9copy_from={"copy_from of NATIVE_ARRAY",1,3,"%E9%model%E9%upper%E2%i%E2%",1};


T6 r7standard_is_equal(se_dump_stack*caller,T7* C,T0* a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7standard_is_equal;
ds.current=((void**)&C);
ds.l=120;
ds.c=11;
ds.f=1;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7standard_is_equal.assertion_flag){
f7standard_is_equal.assertion_flag=0;
se_trace(&ds,123,9,1);
ac_req((a1)!=((void*)(NULL)));
f7standard_is_equal.assertion_flag=1;
}
R=((C->id==a1->id)?!memcmp(C,a1,sizeof(*C)):0);if(f7standard_is_equal.assertion_flag){
f7standard_is_equal.assertion_flag=0;
se_trace(&ds,126,21,1);
ac_ens((!(R))||(r7standard_is_equal(&ds,se_i7(&ds,((T7*)ci(7,a1,126,29,1))),(T0*)C)));
f7standard_is_equal.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7standard_is_equal={"standard_is_equal of GENERAL",1,2,"%R7%other%R7%Result%E6%",1};


T8 r7to_external(se_dump_stack*caller,T7* C){
T8 R=0;
T2 o7_1163_15=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7to_external;
ds.current=((void**)&C);
ds.l=1146;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
locals[1]=(void**)&o7_1163_15;
se_dst=&ds;/*link*/
o7_1163_15=(C)->_count/*8*/;
/*[IF*/
if((se_trace(&ds,1152,15,7),((C)->_capacity/*12*/)>((C)->_count/*8*/))){
se_trace(&ds,1153,6,7);
C->_count=((C)->_count/*8*/)+(1);
/*[IF*/
if((se_trace(&ds,1154,21,7),(r7item(&ds,C,(C)->_count/*8*/))!=('\0'))){
se_trace(&ds,1155,9,7);
r7put(&ds,C,'\0',(C)->_count/*8*/);
}
/*FI]*/
}
else{
se_trace(&ds,1158,6,7);
r7extend(&ds,C,'\0');
}
/*FI]*/
se_trace(&ds,1160,3,7);
C->_count=((C)->_count/*8*/)-(1);
se_trace(&ds,1161,3,7);
R=((void*)(C)->_storage/*4*/);
if(f7to_external.assertion_flag){
f7to_external.assertion_flag=0;
se_trace(&ds,1163,9,7);
ac_ens(((C)->_count/*8*/)==(o7_1163_15));
se_trace(&ds,1164,10,7);
ac_ens((NULL!=R));
f7to_external.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7to_external={"to_external of STRING",1,2,"%R7%Result%E8%old l1163c15STRING%E2%",1};


void r7from_external(se_dump_stack*caller,T7* C,T8 a1){
void**locals[1];
se_dump_stack ds;
ds.fd=&f7from_external;
ds.current=((void**)&C);
ds.l=1167;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7from_external.assertion_flag){
f7from_external.assertion_flag=0;
se_trace(&ds,1175,5,7);
ac_req((NULL!=a1));
f7from_external.assertion_flag=1;
}
se_trace(&ds,1178,6,7);
C->_storage=a1;
se_trace(&ds,1179,6,7);
C->_count=0;
while (!((se_trace(&ds,1181,26,7),(((C)->_storage/*4*/)[(C)->_count/*8*/])==('\0')))) {
se_trace(&ds,1183,6,7);
C->_count=((C)->_count/*8*/)+(1);
}
se_trace(&ds,1185,3,7);
C->_capacity=((C)->_count/*8*/)+(1);
if(f7from_external.assertion_flag){
f7from_external.assertion_flag=0;
se_trace(&ds,1187,12,7);
ac_ens(((C)->_capacity/*12*/)==(((C)->_count/*8*/)+(1)));
se_trace(&ds,1188,5,7);
ac_ens((a1)==(r7to_external(&ds,C)));
f7from_external.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7from_external={"from_external of STRING",1,1,"%R7%p%E8%",1};


T6 r7has(se_dump_stack*caller,T7* C,T3 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7has;
ds.current=((void**)&C);
ds.l=251;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,254,3,7);
R=r9fast_has(&ds,(C)->_storage/*4*/,a1,((C)->_count/*8*/)-(1));
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7has={"has of STRING",1,2,"%R7%ch%E3%Result%E6%",1};


T6 r7is_equal(se_dump_stack*caller,T7* C,T0* a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7is_equal;
ds.current=((void**)&C);
ds.l=184;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7is_equal.assertion_flag){
f7is_equal.assertion_flag=0;
se_trace(&ds,95,25,1);
ac_req((a1)!=((void*)(NULL)));
f7is_equal.assertion_flag=1;
}
/*[IF*/
if((se_trace(&ds,187,14,7),(C)==((void*)(a1)))){
se_trace(&ds,188,6,7);
R=1;
}
 else if((se_trace(&ds,189,16,7),((C)->_count/*8*/)==((se_i7(&ds,((T7*)ci(7,a1,189,18,7))))->_count/*8*/))){
se_trace(&ds,190,6,7);
R=r9fast_memcmp(&ds,(C)->_storage/*4*/,(se_i7(&ds,((T7*)ci(7,a1,190,36,7))))->_storage/*4*/,(C)->_count/*8*/);
}
/*FI]*/
if(f7is_equal.assertion_flag){
f7is_equal.assertion_flag=0;
se_trace(&ds,98,40,1);
ac_ens((!(r7standard_is_equal(&ds,C,a1)))||(R));
se_trace(&ds,99,21,1);
ac_ens((!(R))||(r7is_equal(&ds,se_i7(&ds,((T7*)ci(7,a1,99,29,1))),(T0*)C)));
f7is_equal.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7is_equal={"is_equal of STRING",1,2,"%R7%other%R7%Result%E6%",1};


T3 r7item(se_dump_stack*caller,T7* C,T2 a1){
T3 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7item;
ds.current=((void**)&C);
ds.l=81;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7item.assertion_flag){
f7item.assertion_flag=0;
se_trace(&ds,84,3,7);
ac_req(r7valid_index(&ds,C,a1));
f7item.assertion_flag=1;
}
se_trace(&ds,86,3,7);
R=((C)->_storage/*4*/)[(a1)-(1)];
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7item={"item of STRING",1,2,"%R7%index%E2%Result%E3%",1};


T6 r7valid_index(se_dump_stack*caller,T7* C,T2 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7valid_index;
ds.current=((void**)&C);
ds.l=89;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,92,3,7);
R=((1)<=(a1))&&((a1)<=((C)->_count/*8*/));
if(f7valid_index.assertion_flag){
f7valid_index.assertion_flag=0;
se_trace(&ds,94,10,7);
ac_ens((R)==(((1)<=(a1))&&((a1)<=((C)->_count/*8*/))));
f7valid_index.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7valid_index={"valid_index of STRING",1,2,"%R7%index%E2%Result%E6%",1};
/*No:STRING.count*/


void r7make(se_dump_stack*caller,T7* C,T2 a1){
void**locals[1];
se_dump_stack ds;
ds.fd=&f7make;
ds.current=((void**)&C);
ds.l=42;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7make.assertion_flag){
f7make.assertion_flag=0;
se_trace(&ds,46,19,7);
ac_req((a1)>=(0));
f7make.assertion_flag=1;
}
/*[IF*/
if((se_trace(&ds,48,22,7),(a1)>(0))){
/*[IF*/
if((se_trace(&ds,49,18,7),((C)->_capacity/*12*/)<(a1))){
se_trace(&ds,50,9,7);
C->_storage=new9(a1);
se_trace(&ds,51,9,7);
C->_capacity=a1;
}
/*FI]*/
}
/*FI]*/
se_trace(&ds,54,3,7);
C->_count=0;
if(f7make.assertion_flag){
f7make.assertion_flag=0;
se_trace(&ds,56,19,7);
ac_ens((a1)<=((C)->_capacity/*12*/));
se_trace(&ds,57,9,7);
ac_ens(((C)->_count/*8*/)==(0));
f7make.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7make={"make of STRING",1,1,"%R7%needed_capacity%E2%",1};


void r7extend(se_dump_stack*caller,T7* C,T3 a1){
T2 _new_capacity=0;
T2 o7_628_19=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f7extend;
ds.current=((void**)&C);
ds.l=611;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&_new_capacity;
locals[2]=(void**)&o7_628_19;
se_dst=&ds;/*link*/
o7_628_19=(C)->_count/*8*/;
/*[IF*/
if((se_trace(&ds,616,15,7),((C)->_capacity/*12*/)>((C)->_count/*8*/))){
}
 else if((se_trace(&ds,617,19,7),((C)->_capacity/*12*/)==(0))){
se_trace(&ds,618,6,7);
C->_capacity=32;
se_trace(&ds,619,6,7);
C->_storage=new9((C)->_capacity/*12*/);
}
else{
se_trace(&ds,621,6,7);
_new_capacity=(2)*((C)->_capacity/*12*/);
se_trace(&ds,622,6,7);
C->_storage=r9realloc(&ds,(C)->_storage/*4*/,(C)->_capacity/*12*/,_new_capacity);
se_trace(&ds,623,6,7);
C->_capacity=_new_capacity;
}
/*FI]*/
se_trace(&ds,625,3,7);
C->_count=((C)->_count/*8*/)+(1);
se_trace(&ds,626,3,7);
r7put(&ds,C,a1,(C)->_count/*8*/);
if(f7extend.assertion_flag){
f7extend.assertion_flag=0;
se_trace(&ds,628,9,7);
ac_ens(((C)->_count/*8*/)==((1)+(o7_628_19)));
se_trace(&ds,629,16,7);
ac_ens((r7item(&ds,C,(C)->_count/*8*/))==(a1));
f7extend.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7extend={"extend (add_last of STRING)",1,3,"%R7%ch%E3%new_capacity%E2%old l628c19STRING%E2%",1};


void r7from_external_copy(se_dump_stack*caller,T7* C,T8 a1){
T9 _s=NULL;
void**locals[2];
se_dump_stack ds;
ds.fd=&f7from_external_copy;
ds.current=((void**)&C);
ds.l=1191;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&_s;
se_dst=&ds;/*link*/
se_trace(&ds,1200,3,7);
r7from_external(&ds,C,a1);
se_trace(&ds,1201,3,7);
_s=new9((C)->_capacity/*12*/);
se_trace(&ds,1202,5,7);
r9copy_from(&ds,_s,(C)->_storage/*4*/,(C)->_capacity/*12*/);
se_trace(&ds,1203,3,7);
C->_storage=_s;
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7from_external_copy={"from_external_copy of STRING",1,2,"%R7%p%E8%s%E9%",1};


void r7clear(se_dump_stack*caller,T7* C){
se_dump_stack ds;
ds.fd=&f7clear;
ds.current=((void**)&C);
ds.l=404;
ds.c=4;
ds.f=7;
ds.caller=caller;
se_dst=&ds;/*link*/
se_trace(&ds,408,3,7);
C->_count=0;
if(f7clear.assertion_flag){
f7clear.assertion_flag=0;
se_trace(&ds,410,9,7);
ac_ens(((C)->_count/*8*/)==(0));
f7clear.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7clear={"clear of STRING",1,0,"%R7%",1};


void r7swap(se_dump_stack*caller,T7* C,T2 a1,T2 a2){
T3 _tmp=0;
T3 o7_524_18=0;
T3 o7_525_18=0;
void**locals[5];
se_dump_stack ds;
ds.fd=&f7swap;
ds.current=((void**)&C);
ds.l=513;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&_tmp;
locals[3]=(void**)&o7_524_18;
locals[4]=(void**)&o7_525_18;
se_dst=&ds;/*link*/
o7_524_18=r7item(&ds,C,a2);
o7_525_18=r7item(&ds,C,a1);
se_require_uppermost_flag=1;
if(f7swap.assertion_flag){
f7swap.assertion_flag=0;
se_trace(&ds,515,3,7);
ac_req(r7valid_index(&ds,C,a1));
se_trace(&ds,516,3,7);
ac_req(r7valid_index(&ds,C,a2));
f7swap.assertion_flag=1;
}
se_trace(&ds,520,3,7);
_tmp=r7item(&ds,C,a1);
se_trace(&ds,521,3,7);
r7put(&ds,C,r7item(&ds,C,a2),a1);
se_trace(&ds,522,3,7);
r7put(&ds,C,_tmp,a2);
if(f7swap.assertion_flag){
f7swap.assertion_flag=0;
se_trace(&ds,524,12,7);
ac_ens((r7item(&ds,C,a1))==(o7_524_18));
se_trace(&ds,525,12,7);
ac_ens((r7item(&ds,C,a2))==(o7_525_18));
f7swap.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7swap={"swap of STRING",1,5,"%R7%i1%E2%i2%E2%tmp%E3%old l524c18STRING%E3%old l525c18STRING%E3%",1};


T6 r7empty(se_dump_stack*caller,T7* C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f7empty;
ds.current=((void**)&C);
ds.l=75;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,78,3,7);
R=((C)->_count/*8*/)==(0);
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f7empty={"empty of STRING",1,1,"%R7%Result%E6%",1};
/*No:STRING.capacity*/


void r7put(se_dump_stack*caller,T7* C,T3 a1,T2 a2){
void**locals[2];
se_dump_stack ds;
ds.fd=&f7put;
ds.current=((void**)&C);
ds.l=503;
ds.c=4;
ds.f=7;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f7put.assertion_flag){
f7put.assertion_flag=0;
se_trace(&ds,506,3,7);
ac_req(r7valid_index(&ds,C,a2));
f7put.assertion_flag=1;
}
se_trace(&ds,508,11,7);
((C)->_storage/*4*/)[(a2)-(1)]=(a1);
if(f7put.assertion_flag){
f7put.assertion_flag=0;
se_trace(&ds,510,16,7);
ac_ens((r7item(&ds,C,a2))==(a1));
f7put.assertion_flag=1;
}
if(se_rci(C))se_i7(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f7put={"put of STRING",1,2,"%R7%ch%E3%index%E2%",1};
/*No:STRING.storage*/
se_frame_descriptor se_ifd7={"Class invariant of STRING",1,0,"%R7%",1};


T7*se_i7(se_dump_stack*caller,T7*C){
se_dump_stack ds;
ds.fd=&se_ifd7;
ds.current=((void**)&C);
ds.l=0;
ds.c=0;
ds.f=0;
ds.caller=caller;
se_dst=&ds;
if(ds.fd->assertion_flag){
ds.fd->assertion_flag=0;
se_trace(&ds,1256,6,7);
ac_inv((0)<=((C)->_count/*8*/));
se_trace(&ds,1258,10,7);
ac_inv(((C)->_count/*8*/)<=((C)->_capacity/*12*/));
se_trace(&ds,1260,17,7);
ac_inv((!(((C)->_capacity/*12*/)>(0)))||(r9is_not_null(&ds,(C)->_storage/*4*/)));
ds.fd->assertion_flag=1;
}
se_dst=caller;
return C;
}


void r1886with_capacity(se_dump_stack*caller,T1886* C,T2 a1){
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886with_capacity;
ds.current=((void**)&C);
ds.l=58;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
se_dst=&ds;/*link*/
/*[IF*/
if((se_trace(&ds,61,15,674),((C)->_capacity/*8*/)<(a1))){
se_trace(&ds,62,6,674);
C->_storage=new2135(a1);
se_trace(&ds,63,6,674);
C->_capacity=a1;
}
/*FI]*/
se_trace(&ds,65,3,674);
C->_upper=-(1);
if(f1886with_capacity.assertion_flag){
f1886with_capacity.assertion_flag=0;
se_trace(&ds,67,12,674);
ac_ens(((C)->_capacity/*8*/)>=(a1));
se_trace(&ds,68,3,674);
ac_ens(r1886empty(&ds,C));
f1886with_capacity.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886with_capacity={"with_capacity of FIXED_ARRAY",1,1,"%R1886%needed_capacity%E2%",1};


T6 r1886standard_is_equal(se_dump_stack*caller,T1886* C,T0* a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886standard_is_equal;
ds.current=((void**)&C);
ds.l=120;
ds.c=11;
ds.f=1;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f1886standard_is_equal.assertion_flag){
f1886standard_is_equal.assertion_flag=0;
se_trace(&ds,123,9,1);
ac_req((a1)!=((void*)(NULL)));
f1886standard_is_equal.assertion_flag=1;
}
R=((C->id==a1->id)?!memcmp(C,a1,sizeof(*C)):0);if(f1886standard_is_equal.assertion_flag){
f1886standard_is_equal.assertion_flag=0;
se_trace(&ds,126,21,1);
ac_ens((!(R))||(r1886standard_is_equal(&ds,se_i1886(&ds,((T1886*)ci(1886,a1,126,29,1))),(T0*)C)));
f1886standard_is_equal.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886standard_is_equal={"standard_is_equal of GENERAL",1,2,"%R1886%other%R1886%Result%E6%",1};


T6 r1886has(se_dump_stack*caller,T1886* C,T0* a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886has;
ds.current=((void**)&C);
ds.l=265;
ds.c=4;
ds.f=592;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,269,3,592);
R=r1886valid_index(&ds,C,r1886index_of(&ds,C,a1));
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886has={"has of COLLECTION",1,2,"%R1886%x%R7%Result%E6%",1};


void r1886clear_all(se_dump_stack*caller,T1886* C){
T0* _value=NULL;
T2 o592_158_15=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886clear_all;
ds.current=((void**)&C);
ds.l=150;
ds.c=4;
ds.f=592;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&_value;
locals[1]=(void**)&o592_158_15;
se_dst=&ds;/*link*/
o592_158_15=r1886count(&ds,C);
se_trace(&ds,156,3,592);
r1886set_all_with(&ds,C,_value);
if(f1886clear_all.assertion_flag){
f1886clear_all.assertion_flag=0;
se_trace(&ds,158,9,592);
ac_ens((r1886count(&ds,C))==(o592_158_15));
se_trace(&ds,159,3,592);
ac_ens(r1886all_cleared(&ds,C));
f1886clear_all.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886clear_all={"clear_all of COLLECTION",1,2,"%R1886%value%R7%old l158c15COLLECTION%E2%",1};


void r1886add_last(se_dump_stack*caller,T1886* C,T0* a1){
T2 _new_capacity=0;
T2 o592_180_19=0;
T2 o592_181_15=0;
T2 o592_182_19=0;
void**locals[5];
se_dump_stack ds;
ds.fd=&f1886add_last;
ds.current=((void**)&C);
ds.l=158;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&_new_capacity;
locals[2]=(void**)&o592_180_19;
locals[3]=(void**)&o592_181_15;
locals[4]=(void**)&o592_182_19;
se_dst=&ds;/*link*/
o592_180_19=r1886count(&ds,C);
o592_181_15=0;
o592_182_19=(C)->_upper/*12*/;
/*[IF*/
if((se_trace(&ds,162,16,674),(((C)->_upper/*12*/)+(1))<=(((C)->_capacity/*8*/)-(1)))){
se_trace(&ds,163,6,674);
C->_upper=((C)->_upper/*12*/)+(1);
}
 else if((se_trace(&ds,164,19,674),((C)->_capacity/*8*/)==(0))){
se_trace(&ds,165,6,674);
C->_storage=new2135(2);
se_trace(&ds,166,6,674);
C->_capacity=2;
se_trace(&ds,167,6,674);
C->_upper=0;
}
else{
se_trace(&ds,169,6,674);
_new_capacity=(2)*((C)->_capacity/*8*/);
se_trace(&ds,170,6,674);
C->_storage=r2135realloc(&ds,(C)->_storage/*4*/,(C)->_capacity/*8*/,_new_capacity);
se_trace(&ds,171,6,674);
C->_capacity=_new_capacity;
se_trace(&ds,172,6,674);
C->_upper=((C)->_upper/*12*/)+(1);
}
/*FI]*/
se_trace(&ds,174,3,674);
r1886put(&ds,C,a1,(C)->_upper/*12*/);
if(f1886add_last.assertion_flag){
f1886add_last.assertion_flag=0;
se_trace(&ds,179,8,592);
ac_ens((r1886last(&ds,C))==((void*)(a1)));
se_trace(&ds,180,9,592);
ac_ens((r1886count(&ds,C))==((1)+(o592_180_19)));
se_trace(&ds,181,9,592);
ac_ens((0)==(o592_181_15));
se_trace(&ds,182,9,592);
ac_ens(((C)->_upper/*12*/)==((1)+(o592_182_19)));
f1886add_last.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886add_last={"add_last of FIXED_ARRAY",1,5,"%R1886%element%R7%new_capacity%E2%old l180c19COLLECTION%E2%old l181c15COLLECTION%E2%old l182c19COLLECTION%E2%",1};


T6 r1886is_equal(se_dump_stack*caller,T1886* C,T0* a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886is_equal;
ds.current=((void**)&C);
ds.l=234;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f1886is_equal.assertion_flag){
f1886is_equal.assertion_flag=0;
se_trace(&ds,95,25,1);
ac_req((a1)!=((void*)(NULL)));
f1886is_equal.assertion_flag=1;
}
/*[IF*/
if((se_trace(&ds,236,14,674),(C)==((void*)(a1)))){
se_trace(&ds,237,6,674);
R=1;
}
 else if((se_trace(&ds,238,16,674),((C)->_upper/*12*/)==((se_i1886(&ds,((T1886*)ci(1886,a1,238,18,674))))->_upper/*12*/))){
se_trace(&ds,239,6,674);
R=r2135memcmp(&ds,(C)->_storage/*4*/,(se_i1886(&ds,((T1886*)ci(1886,a1,239,31,674))))->_storage/*4*/,((C)->_upper/*12*/)+(1));
}
/*FI]*/
if(f1886is_equal.assertion_flag){
f1886is_equal.assertion_flag=0;
se_trace(&ds,98,40,1);
ac_ens((!(r1886standard_is_equal(&ds,C,a1)))||(R));
se_trace(&ds,99,21,1);
ac_ens((!(R))||(r1886is_equal(&ds,se_i1886(&ds,((T1886*)ci(1886,a1,99,29,1))),(T0*)C)));
f1886is_equal.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886is_equal={"is_equal of FIXED_ARRAY",1,2,"%R1886%other%R1886%Result%E6%",1};


T0* r1886item(se_dump_stack*caller,T1886* C,T2 a1){
T0* R=NULL;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886item;
ds.current=((void**)&C);
ds.l=136;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f1886item.assertion_flag){
f1886item.assertion_flag=0;
se_trace(&ds,73,3,592);
ac_req(r1886valid_index(&ds,C,a1));
f1886item.assertion_flag=1;
}
se_trace(&ds,138,3,674);
R=((C)->_storage/*4*/)[a1];
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886item={"item of FIXED_ARRAY",1,2,"%R1886%index%E2%Result%R7%",1};


void r1886set_all_with(se_dump_stack*caller,T1886* C,T0* a1){
T2 o592_126_15=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886set_all_with;
ds.current=((void**)&C);
ds.l=210;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&o592_126_15;
se_dst=&ds;/*link*/
o592_126_15=r1886count(&ds,C);
se_trace(&ds,212,11,674);
r2135set_all_with(&ds,(C)->_storage/*4*/,a1,(C)->_upper/*12*/);
if(f1886set_all_with.assertion_flag){
f1886set_all_with.assertion_flag=0;
se_trace(&ds,126,9,592);
ac_ens((r1886count(&ds,C))==(o592_126_15));
f1886set_all_with.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886set_all_with={"set_all_with of FIXED_ARRAY",1,2,"%R1886%v%R7%old l126c15COLLECTION%E2%",1};


T6 r1886valid_index(se_dump_stack*caller,T1886* C,T2 a1){
T6 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886valid_index;
ds.current=((void**)&C);
ds.l=44;
ds.c=11;
ds.f=592;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,48,3,592);
R=((0)<=(a1))&&((a1)<=((C)->_upper/*12*/));
if(f1886valid_index.assertion_flag){
f1886valid_index.assertion_flag=0;
se_trace(&ds,50,10,592);
ac_ens((R)==(((0)<=(a1))&&((a1)<=((C)->_upper/*12*/))));
f1886valid_index.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886valid_index={"valid_index of COLLECTION",1,2,"%R1886%index%E2%Result%E6%",1};


T0* r1886last(se_dump_stack*caller,T1886* C){
T0* R=NULL;
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886last;
ds.current=((void**)&C);
ds.l=85;
ds.c=4;
ds.f=592;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_require_uppermost_flag=1;
if(f1886last.assertion_flag){
f1886last.assertion_flag=0;
se_trace(&ds,88,9,592);
ac_req((r1886count(&ds,C))>=(1));
f1886last.assertion_flag=1;
}
se_trace(&ds,90,3,592);
R=r1886item(&ds,C,(C)->_upper/*12*/);
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886last={"last of COLLECTION",1,1,"%R1886%Result%R7%",1};
/*No:FIXED_ARRAY[STRING].lower*/


T2 r1886count(se_dump_stack*caller,T1886* C){
T2 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886count;
ds.current=((void**)&C);
ds.l=177;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,179,3,674);
R=((C)->_upper/*12*/)+(1);
if(f1886count.assertion_flag){
f1886count.assertion_flag=0;
se_trace(&ds,59,10,592);
ac_ens((R)==((((C)->_upper/*12*/)-(0))+(1)));
f1886count.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886count={"count of FIXED_ARRAY",1,1,"%R1886%Result%E2%",1};


void r1886make(se_dump_stack*caller,T1886* C,T2 a1){
T2 o674_54_19=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886make;
ds.current=((void**)&C);
ds.l=32;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&o674_54_19;
se_dst=&ds;/*link*/
o674_54_19=(C)->_capacity/*8*/;
se_require_uppermost_flag=1;
if(f1886make.assertion_flag){
f1886make.assertion_flag=0;
se_trace(&ds,36,13,674);
ac_req((a1)>=(0));
f1886make.assertion_flag=1;
}
/*[IF*/
if((se_trace(&ds,38,16,674),(a1)==(0))){
se_trace(&ds,39,6,674);
C->_upper=-(1);
}
 else if((se_trace(&ds,40,19,674),((C)->_capacity/*8*/)==(0))){
se_trace(&ds,41,6,674);
C->_storage=new2135(a1);
se_trace(&ds,42,6,674);
C->_capacity=a1;
se_trace(&ds,43,6,674);
C->_upper=(a1)-(1);
}
 else if((se_trace(&ds,44,19,674),((C)->_capacity/*8*/)<(a1))){
se_trace(&ds,45,6,674);
C->_storage=new2135(a1);
se_trace(&ds,46,6,674);
C->_capacity=a1;
se_trace(&ds,47,6,674);
C->_upper=(a1)-(1);
}
else{
se_trace(&ds,49,6,674);
C->_upper=(a1)-(1);
se_trace(&ds,50,6,674);
r1886clear_all(&ds,C);
}
/*FI]*/
if(f1886make.assertion_flag){
f1886make.assertion_flag=0;
se_trace(&ds,53,9,674);
ac_ens((r1886count(&ds,C))==(a1));
se_trace(&ds,54,12,674);
ac_ens(((C)->_capacity/*8*/)>=(o674_54_19));
se_trace(&ds,55,3,674);
ac_ens(r1886all_cleared(&ds,C));
f1886make.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886make={"make of FIXED_ARRAY",1,2,"%R1886%new_count%E2%old l54c19FIXED_ARRAY%E2%",1};


T6 r1886equal(se_dump_stack*caller,T1886* C,T0* a1,T0* a2){
T6 R=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f1886equal;
ds.current=((void**)&C);
ds.l=74;
ds.c=11;
ds.f=1;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&R;
se_dst=&ds;/*link*/
/*[IF*/
if((se_trace(&ds,78,11,1),(a1)==((void*)(a2)))){
se_trace(&ds,79,6,1);
R=1;
}
 else if((se_trace(&ds,80,15,1),(a1)==((void*)(NULL)))){
}
 else if((se_trace(&ds,81,16,1),(a2)==((void*)(NULL)))){
}
else{
se_trace(&ds,83,6,1);
R=X98is_equal(&ds,83,16,1,a1,a2);
}
/*FI]*/
if(f1886equal.assertion_flag){
f1886equal.assertion_flag=0;
se_trace(&ds,86,55,1);
ac_ens(((R)==(r6_px_and(&ds,(a1)==((void*)(NULL)),(a2)==((void*)(NULL)))))||((r6_px_and(&ds,(a1)!=((void*)(NULL)),(a2)!=((void*)(NULL))))&&(X98is_equal(&ds,88,9,1,a1,a2))));
f1886equal.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886equal={"equal of GENERAL",1,3,"%R1886%some%R98%other%R98%Result%E6%",1};
/*No:FIXED_ARRAY[STRING].upper*/


void r1886clear(se_dump_stack*caller,T1886* C){
T2 o674_186_18=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886clear;
ds.current=((void**)&C);
ds.l=182;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&o674_186_18;
se_dst=&ds;/*link*/
o674_186_18=(C)->_capacity/*8*/;
se_trace(&ds,184,3,674);
C->_upper=-(1);
if(f1886clear.assertion_flag){
f1886clear.assertion_flag=0;
se_trace(&ds,186,12,674);
ac_ens(((C)->_capacity/*8*/)==(o674_186_18));
se_trace(&ds,260,3,592);
ac_ens(r1886empty(&ds,C));
f1886clear.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886clear={"clear of FIXED_ARRAY",1,1,"%R1886%old l186c18FIXED_ARRAY%E2%",1};


T6 r1886all_cleared(se_dump_stack*caller,T1886* C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886all_cleared;
ds.current=((void**)&C);
ds.l=243;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,245,3,674);
R=r2135all_cleared(&ds,(C)->_storage/*4*/,(C)->_upper/*12*/);
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886all_cleared={"all_cleared of FIXED_ARRAY",1,1,"%R1886%Result%E6%",1};


T6 r1886empty(se_dump_stack*caller,T1886* C){
T6 R=0;
void**locals[1];
se_dump_stack ds;
ds.fd=&f1886empty;
ds.current=((void**)&C);
ds.l=62;
ds.c=4;
ds.f=592;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,65,3,592);
R=(r1886count(&ds,C))==(0);
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886empty={"empty of COLLECTION",1,1,"%R1886%Result%E6%",1};


T2 r1886index_of(se_dump_stack*caller,T1886* C,T0* a1){
T2 R=0;
void**locals[2];
se_dump_stack ds;
ds.fd=&f1886index_of;
ds.current=((void**)&C);
ds.l=258;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&R;
se_dst=&ds;/*link*/
se_trace(&ds,260,3,674);
R=r2135index_of(&ds,(C)->_storage/*4*/,a1,(C)->_upper/*12*/);
if(f1886index_of.assertion_flag){
f1886index_of.assertion_flag=0;
se_trace(&ds,286,9,592);
ac_ens((0)<=(R));
se_trace(&ds,287,10,592);
ac_ens((R)<=(((C)->_upper/*12*/)+(1)));
se_trace(&ds,288,19,592);
ac_ens((!((R)<=((C)->_upper/*12*/)))||(r1886equal(&ds,C,a1,r1886item(&ds,C,R))));
f1886index_of.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
return R;
}
se_frame_descriptor f1886index_of={"index_of of FIXED_ARRAY",1,2,"%R1886%element%R7%Result%E2%",1};
/*No:FIXED_ARRAY[STRING].capacity*/


void r1886put(se_dump_stack*caller,T1886* C,T0* a1,T2 a2){
T2 o592_102_15=0;
void**locals[3];
se_dump_stack ds;
ds.fd=&f1886put;
ds.current=((void**)&C);
ds.l=141;
ds.c=4;
ds.f=674;
ds.caller=caller;
ds.locals=locals;
locals[0]=(void**)&a1;
locals[1]=(void**)&a2;
locals[2]=(void**)&o592_102_15;
se_dst=&ds;/*link*/
o592_102_15=r1886count(&ds,C);
se_require_uppermost_flag=1;
if(f1886put.assertion_flag){
f1886put.assertion_flag=0;
se_trace(&ds,98,3,592);
ac_req(r1886valid_index(&ds,C,a2));
f1886put.assertion_flag=1;
}
se_trace(&ds,143,11,674);
((C)->_storage/*4*/)[a2]=(a1);
if(f1886put.assertion_flag){
f1886put.assertion_flag=0;
se_trace(&ds,101,15,592);
ac_ens((r1886item(&ds,C,a2))==((void*)(a1)));
se_trace(&ds,102,9,592);
ac_ens((r1886count(&ds,C))==(o592_102_15));
f1886put.assertion_flag=1;
}
if(se_rci(C))se_i1886(&ds,C);
se_dst=caller;/*unlink*/
}
se_frame_descriptor f1886put={"put of FIXED_ARRAY",1,3,"%R1886%element%R7%index%E2%old l102c15COLLECTION%E2%",1};
/*No:FIXED_ARRAY[STRING].storage*/
se_frame_descriptor se_ifd1886={"Class invariant of FIXED_ARRAY[STRING]",1,0,"%R1886%",1};


T1886*se_i1886(se_dump_stack*caller,T1886*C){
se_dump_stack ds;
ds.fd=&se_ifd1886;
ds.current=((void**)&C);
ds.l=0;
ds.c=0;
ds.f=0;
ds.caller=caller;
se_dst=&ds;
if(ds.fd->assertion_flag){
ds.fd->assertion_flag=0;
se_trace(&ds,107,13,1626);
ac_inv(((C)->_capacity/*8*/)>=((((C)->_upper/*12*/)-(0))+(1)));
se_trace(&ds,109,17,1626);
ac_inv((!(((C)->_capacity/*8*/)>(0)))||(r2135is_not_null(&ds,(C)->_storage/*4*/)));
ds.fd->assertion_flag=1;
}
se_dst=caller;
return C;
}

