text: #include <lib/sj-lib-common/common.h>
  
  struct {
      int refcount;
      int size;
      int count;
      char data[0];
  } g_empty = { 1, 0, 0 };
  #define sjs_hash_type_bool_typeId 15
  #define sjs_log_typeId 20
  #define sjs_array_char_typeId 23
  #define sjs_string_typeId 21
  #define sjs_class_typeId 27
  
  typedef struct td_sjs_hash_type_bool sjs_hash_type_bool;
  typedef struct td_sjs_log sjs_log;
  typedef struct td_sjs_array_char sjs_array_char;
  typedef struct td_sjs_string sjs_string;
  typedef struct td_sjs_class sjs_class;
  
  struct td_sjs_hash_type_bool {
      int _refCount;
      void* _hash;
  };
  
  struct td_sjs_log {
      int _refCount;
      int32_t minlevel;
      sjs_hash_type_bool traceincludes;
      sjs_hash_type_bool debugincludes;
      sjs_hash_type_bool infoincludes;
      sjs_hash_type_bool warnincludes;
      sjs_hash_type_bool errorincludes;
      sjs_hash_type_bool fatalincludes;
  };
  
  struct td_sjs_array_char {
      int _refCount;
      void* v;
  };
  
  struct td_sjs_string {
      int _refCount;
      int32_t offset;
      int32_t count;
      sjs_array_char data;
      bool _isnullterminated;
  };
  
  struct td_sjs_class {
      int _refCount;
  };
  
  #ifndef type_bool_hash_typedef
  #define type_bool_hash_typedef
  KHASH_INIT_TYPEDEF(type_bool_hash_type, int32_t, bool)
  #endif
  #ifndef type_bool_hash_typedef
  #define type_bool_hash_typedef
  KHASH_INIT_TYPEDEF(type_bool_hash_type, int32_t, bool)
  #endif
  char* string_char(sjs_string* str);
  int32_t g_loglevel_debug;
  int32_t g_loglevel_error;
  int32_t g_loglevel_fatal;
  int32_t g_loglevel_info;
  int32_t g_loglevel_trace;
  int32_t g_loglevel_warn;
  
  sjs_class g_c = { -1 };
  int32_t g_clocks_per_sec;
  float g_f32_pi;
  int32_t g_i32_maxvalue;
  int32_t g_i32_minvalue;
  sjs_log g_log = { -1 };
  sjs_hash_type_bool g_log_excludeall = { -1 };
  sjs_hash_type_bool g_log_includeall = { -1 };
  uint32_t g_u32_maxvalue;
  int32_t result1;
  sjs_class* sjt_parent4 = 0;
  sjs_hash_type_bool sjt_value1 = { -1 };
  int32_t sjt_void1;
  
  void sjf_array_char(sjs_array_char* _this);
  void sjf_array_char_clone(sjs_array_char* _parent, int32_t offset, int32_t count, int32_t newsize, sjs_array_char* _return);
  void sjf_array_char_clone_heap(sjs_array_char* _parent, int32_t offset, int32_t count, int32_t newsize, sjs_array_char** _return);
  void sjf_array_char_copy(sjs_array_char* _this, sjs_array_char* _from);
  void sjf_array_char_destroy(sjs_array_char* _this);
  void sjf_array_char_getcount(sjs_array_char* _parent, int32_t* _return);
  void sjf_array_char_gettotalcount(sjs_array_char* _parent, int32_t* _return);
  void sjf_array_char_heap(sjs_array_char* _this);
  void sjf_class(sjs_class* _this);
  void sjf_class_copy(sjs_class* _this, sjs_class* _from);
  void sjf_class_destroy(sjs_class* _this);
  void sjf_class_func(sjs_class* _parent, int32_t* _return);
  void sjf_class_heap(sjs_class* _this);
  void sjf_hash_type_bool(sjs_hash_type_bool* _this);
  void sjf_hash_type_bool__weakptrremovekey(sjs_hash_type_bool* _parent, int32_t key);
  void sjf_hash_type_bool__weakptrremovevalue(sjs_hash_type_bool* _parent, bool val);
  void sjf_hash_type_bool_copy(sjs_hash_type_bool* _this, sjs_hash_type_bool* _from);
  void sjf_hash_type_bool_destroy(sjs_hash_type_bool* _this);
  void sjf_hash_type_bool_heap(sjs_hash_type_bool* _this);
  void sjf_log(sjs_log* _this);
  void sjf_log_copy(sjs_log* _this, sjs_log* _from);
  void sjf_log_destroy(sjs_log* _this);
  void sjf_log_heap(sjs_log* _this);
  void sjf_string_nullterminate(sjs_string* _parent);
  void sjf_type_hash(int32_t val, uint32_t* _return);
  void sjf_type_isequal(int32_t l, int32_t r, bool* _return);
  void main_destroy(void);
  
  #ifndef type_bool_hash_function
  #define type_bool_hash_function
  #if false
  KHASH_INIT_FUNCTION_DEREF(type_bool_hash_type, int32_t, bool, 1, sjf_type_hash, sjf_type_isequal)
  #else
  KHASH_INIT_FUNCTION(type_bool_hash_type, int32_t, bool, 1, sjf_type_hash, sjf_type_isequal)
  #endif
  #endif
  #ifndef type_bool_hash_function
  #define type_bool_hash_function
  #if false
  KHASH_INIT_FUNCTION_DEREF(type_bool_hash_type, int32_t, bool, 1, sjf_type_hash, sjf_type_isequal)
  #else
  KHASH_INIT_FUNCTION(type_bool_hash_type, int32_t, bool, 1, sjf_type_hash, sjf_type_isequal)
  #endif
  #endif
  char* string_char(sjs_string* str) {
      sjf_string_nullterminate(str);
      return ((sjs_array*)str->data.v)->data + str->offset;
  }
  #include <lib/sj-lib-common/common.cpp>
  void sjf_array_char(sjs_array_char* _this) {
  #line 363 "lib/sj-lib-common/array.sj"
      if (_this->v == 0) {
  #line 364
          _this->v = &g_empty;
  #line 365
      }
  #line 366
      sjs_array* arr = (sjs_array*)_this->v;
  #line 367
      arr->refcount++;
  }
  
  void sjf_array_char_clone(sjs_array_char* _parent, int32_t offset, int32_t count, int32_t newsize, sjs_array_char* _return) {
      void* newv;
  
  #line 169 "lib/sj-lib-common/array.sj"
      newv = 0;
  #line 171
      sjs_array* arr = (sjs_array*)_parent->v;
  #line 172
      if (offset + count > arr->count) {
  #line 173
          halt("grow: offset %d count %d out of bounds %d\n", offset, count, arr->count);
  #line 174
      }
  #line 176
      if (count > arr->count - offset) {
  #line 177
          halt("grow: new count larger than old count %d:%d\n", count, arr->count - offset);
  #line 178
      }
  #line 180
      sjs_array* newArr = createarray(sizeof(char), newsize);
  #line 181
      if (!newArr) {
  #line 182
          halt("grow: out of memory\n");
  #line 183
      }
  #line 185
      newv = newArr;
  #line 186
      char* p = (char*)arr->data + offset;
  #line 187
      char* newp = (char*)newArr->data;
  #line 189
      newArr->size = newsize;
  #line 190
      newArr->count = count;
  #line 192
      #if true
  #line 193
      memcpy(newp, p, sizeof(char) * count);
  #line 194
      #else
  #line 195
      for (int i = 0; i < count; i++) {
  #line 196
          #line 170 "lib/sj-lib-common/array.sj"
  newp[i] = p[i];
  ;
  #line 197
      }
  #line 198
      #endif
  #line 198
      _return->_refCount = 1;
  #line 200
      _return->v = newv;
  #line 200
      sjf_array_char(_return);
  }
  
  void sjf_array_char_clone_heap(sjs_array_char* _parent, int32_t offset, int32_t count, int32_t newsize, sjs_array_char** _return) {
      void* newv;
  
  #line 169 "lib/sj-lib-common/array.sj"
      newv = 0;
  #line 171
      sjs_array* arr = (sjs_array*)_parent->v;
  #line 172
      if (offset + count > arr->count) {
  #line 173
          halt("grow: offset %d count %d out of bounds %d\n", offset, count, arr->count);
  #line 174
      }
  #line 176
      if (count > arr->count - offset) {
  #line 177
          halt("grow: new count larger than old count %d:%d\n", count, arr->count - offset);
  #line 178
      }
  #line 180
      sjs_array* newArr = createarray(sizeof(char), newsize);
  #line 181
      if (!newArr) {
  #line 182
          halt("grow: out of memory\n");
  #line 183
      }
  #line 185
      newv = newArr;
  #line 186
      char* p = (char*)arr->data + offset;
  #line 187
      char* newp = (char*)newArr->data;
  #line 189
      newArr->size = newsize;
  #line 190
      newArr->count = count;
  #line 192
      #if true
  #line 193
      memcpy(newp, p, sizeof(char) * count);
  #line 194
      #else
  #line 195
      for (int i = 0; i < count; i++) {
  #line 196
          #line 170 "lib/sj-lib-common/array.sj"
  newp[i] = p[i];
  ;
  #line 197
      }
  #line 198
      #endif
  #line 198
      (*_return) = (sjs_array_char*)malloc(sizeof(sjs_array_char));
  #line 198
      (*_return)->_refCount = 1;
  #line 200
      (*_return)->v = newv;
  #line 200
      sjf_array_char_heap((*_return));
  }
  
  void sjf_array_char_copy(sjs_array_char* _this, sjs_array_char* _from) {
  #line 26 "lib/sj-lib-common/array.sj"
      _this->v = _from->v;
  #line 372
      sjs_array* arr = (sjs_array*)_this->v;
  #line 373
      arr->refcount++;
  }
  
  void sjf_array_char_destroy(sjs_array_char* _this) {
  #line 377 "lib/sj-lib-common/array.sj"
      sjs_array* arr = (sjs_array*)_this->v;
  #line 378
      arr->refcount--;
  #line 379
      if (arr->refcount == 0) {
  #line 380
          #if !true && !false
  #line 381
          char* p = (char*)arr->data;
  #line 382
          for (int i = 0; i < arr->count; i++) {
  #line 383
              ;
  #line 384
          }
  #line 385
          #endif
  #line 386
          free(arr);
  #line 387
      }
  }
  
  void sjf_array_char_getcount(sjs_array_char* _parent, int32_t* _return) {
  #line 31 "lib/sj-lib-common/array.sj"
      #line 30 "lib/sj-lib-common/array.sj"
  (*_return) = ((sjs_array*)_parent->v)->count;
  return;;
  }
  
  void sjf_array_char_gettotalcount(sjs_array_char* _parent, int32_t* _return) {
  #line 37 "lib/sj-lib-common/array.sj"
      #line 36 "lib/sj-lib-common/array.sj"
  (*_return) = ((sjs_array*)_parent->v)->size;
  return;;
  }
  
  void sjf_array_char_heap(sjs_array_char* _this) {
  #line 363 "lib/sj-lib-common/array.sj"
      if (_this->v == 0) {
  #line 364
          _this->v = &g_empty;
  #line 365
      }
  #line 366
      sjs_array* arr = (sjs_array*)_this->v;
  #line 367
      arr->refcount++;
  }
  
  void sjf_class(sjs_class* _this) {
  }
  
  void sjf_class_copy(sjs_class* _this, sjs_class* _from) {
  }
  
  void sjf_class_destroy(sjs_class* _this) {
  }
  
  void sjf_class_func(sjs_class* _parent, int32_t* _return) {
  #line 1 "class9.sj"
      (*_return) = 1;
  }
  
  void sjf_class_heap(sjs_class* _this) {
  }
  
  void sjf_hash_type_bool(sjs_hash_type_bool* _this) {
  #line 233 "lib/sj-lib-common/hash.sj"
      _this->_hash = kh_init(type_bool_hash_type);
  }
  
  void sjf_hash_type_bool__weakptrremovekey(sjs_hash_type_bool* _parent, int32_t key) {
  #line 188 "lib/sj-lib-common/hash.sj"
      #if false
  #line 189
      khash_t(type_bool_hash_type)* p = (khash_t(type_bool_hash_type)*)_parent->_hash;    
  #line 190
      khiter_t k = kh_get(type_bool_hash_type, p, key);
  #line 191
      if (k != kh_end(p)) {
  #line 192
          kh_del(type_bool_hash_type, p, k);
  #line 193
      }
  #line 194
      #endif
  }
  
  void sjf_hash_type_bool__weakptrremovevalue(sjs_hash_type_bool* _parent, bool val) {
  #line 200 "lib/sj-lib-common/hash.sj"
      #if false
  #line 201
      khash_t(type_bool_hash_type)* p = (khash_t(type_bool_hash_type)*)_parent->_hash;
  #line 202
      for (khiter_t k = kh_begin(p); k != kh_end(p); ++k) {
  #line 203
          if (kh_exist(p, k)) {
  #line 204
              bool t = kh_value(p, k);
  #line 205
              if (t == val) {
  #line 206
                  kh_del(type_bool_hash_type, p, k);
  #line 207
              }
  #line 208
          }
  #line 209
      }
  #line 210
      #endif
  }
  
  void sjf_hash_type_bool_copy(sjs_hash_type_bool* _this, sjs_hash_type_bool* _from) {
  #line 238 "lib/sj-lib-common/hash.sj"
      _this->_hash = _from->_hash;
  #line 239
      khash_t(type_bool_hash_type)* p = (khash_t(type_bool_hash_type)*)_this->_hash;
  #line 240
      p->refcount++;
  }
  
  void sjf_hash_type_bool_destroy(sjs_hash_type_bool* _this) {
  #line 244 "lib/sj-lib-common/hash.sj"
      khash_t(type_bool_hash_type)* p = (khash_t(type_bool_hash_type)*)_this->_hash;
  #line 245
      p->refcount--;
  #line 246
      if (p->refcount == 0) {
  #line 247
          for (khiter_t k = kh_begin(p); k != kh_end(p); ++k) {
  #line 248
              if (kh_exist(p, k)) {
  #line 250
                  #if false
  #line 251
                  delete_cb cb = { p, (void(*)(void*, void*))sjf_hash_type_bool__weakptrremovekey };
  #line 252
                  weakptr_cb_remove(kh_key(p, k), cb);
  #line 253
                  #else
  #line 254
                  ;
  #line 255
                  #endif
  #line 257
                  #if false
  #line 258
                  delete_cb cb = { p, (void(*)(void*, void*))sjf_hash_type_bool__weakptrremovevalue };
  #line 259
                  weakptr_cb_remove(kh_value(p, k), cb);
  #line 260
                  #else
  #line 261
                  ;
  #line 262
                  #endif
  #line 263
              }
  #line 264
          }
  #line 265
          kh_destroy(type_bool_hash_type, (khash_t(type_bool_hash_type)*)_this->_hash);
  #line 266
      }
  }
  
  void sjf_hash_type_bool_heap(sjs_hash_type_bool* _this) {
  #line 233 "lib/sj-lib-common/hash.sj"
      _this->_hash = kh_init(type_bool_hash_type);
  }
  
  void sjf_log(sjs_log* _this) {
  }
  
  void sjf_log_copy(sjs_log* _this, sjs_log* _from) {
  #line 13 "lib/sj-lib-common/log.sj"
      _this->minlevel = _from->minlevel;
  #line 13
      sjs_hash_type_bool* copyoption2 = (_from->traceincludes._refCount != -1 ? &_from->traceincludes : 0);
      if (copyoption2 != 0) {
          _this->traceincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->traceincludes, copyoption2);
      } else {
          _this->traceincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption3 = (_from->debugincludes._refCount != -1 ? &_from->debugincludes : 0);
      if (copyoption3 != 0) {
          _this->debugincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->debugincludes, copyoption3);
      } else {
          _this->debugincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption4 = (_from->infoincludes._refCount != -1 ? &_from->infoincludes : 0);
      if (copyoption4 != 0) {
          _this->infoincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->infoincludes, copyoption4);
      } else {
          _this->infoincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption5 = (_from->warnincludes._refCount != -1 ? &_from->warnincludes : 0);
      if (copyoption5 != 0) {
          _this->warnincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->warnincludes, copyoption5);
      } else {
          _this->warnincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption6 = (_from->errorincludes._refCount != -1 ? &_from->errorincludes : 0);
      if (copyoption6 != 0) {
          _this->errorincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->errorincludes, copyoption6);
      } else {
          _this->errorincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption7 = (_from->fatalincludes._refCount != -1 ? &_from->fatalincludes : 0);
      if (copyoption7 != 0) {
          _this->fatalincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&_this->fatalincludes, copyoption7);
      } else {
          _this->fatalincludes._refCount = -1;
      }
  }
  
  void sjf_log_destroy(sjs_log* _this) {
      if (_this->traceincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->traceincludes); }
  ;
      if (_this->debugincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->debugincludes); }
  ;
      if (_this->infoincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->infoincludes); }
  ;
      if (_this->warnincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->warnincludes); }
  ;
      if (_this->errorincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->errorincludes); }
  ;
      if (_this->fatalincludes._refCount == 1) { sjf_hash_type_bool_destroy(&_this->fatalincludes); }
  ;
  }
  
  void sjf_log_heap(sjs_log* _this) {
  }
  
  void sjf_string_nullterminate(sjs_string* _parent) {
      bool result2;
      sjs_array_char sjt_funcold1 = { -1 };
  
  #line 133 "lib/sj-lib-common/string.sj"
      result2 = !_parent->_isnullterminated;
      if (result2) {
          int32_t sjt_capture1;
          int32_t sjt_capture2;
          sjs_array_char* sjt_parent1 = 0;
          sjs_array_char* sjt_parent2 = 0;
  
  #line 35 "lib/sj-lib-common/array.sj"
          sjt_parent1 = &_parent->data;
  #line 35
          sjf_array_char_gettotalcount(sjt_parent1, &sjt_capture1);
  #line 29
          sjt_parent2 = &_parent->data;
  #line 29
          sjf_array_char_getcount(sjt_parent2, &sjt_capture2);
          if ((((_parent->offset + _parent->count) + 1) > sjt_capture1) || ((_parent->offset + _parent->count) != sjt_capture2)) {
              int32_t sjt_functionParam1;
              int32_t sjt_functionParam2;
              int32_t sjt_functionParam3;
              sjs_array_char* sjt_parent3 = 0;
  
  #line 168 "lib/sj-lib-common/array.sj"
              sjt_parent3 = &_parent->data;
  #line 135 "lib/sj-lib-common/string.sj"
              sjt_functionParam1 = _parent->offset;
  #line 135
              sjt_functionParam2 = _parent->count;
  #line 135
              sjt_functionParam3 = _parent->count + 1;
  #line 135
              sjf_array_char_clone(sjt_parent3, sjt_functionParam1, sjt_functionParam2, sjt_functionParam3, &sjt_funcold1);
  #line 135
              if (_parent->data._refCount == 1) { sjf_array_char_destroy(&_parent->data); }
  ;
  #line 168 "lib/sj-lib-common/array.sj"
              sjf_array_char_copy(&_parent->data, &sjt_funcold1);
  #line 136 "lib/sj-lib-common/string.sj"
              _parent->offset = 0;
          }
  
  #line 139 "lib/sj-lib-common/string.sj"
          ((sjs_array*)_parent->data.v)->data[_parent->offset + _parent->count] = 0;
  #line 141
          _parent->_isnullterminated = true;
      }
  
      if (sjt_funcold1._refCount == 1) { sjf_array_char_destroy(&sjt_funcold1); }
  ;
  }
  
  void sjf_type_hash(int32_t val, uint32_t* _return) {
      int32_t sjt_cast1;
  
  #line 5 "lib/sj-lib-common/type.sj"
      sjt_cast1 = val;
  #line 6
      (*_return) = (uint32_t)sjt_cast1;
  }
  
  void sjf_type_isequal(int32_t l, int32_t r, bool* _return) {
  #line 10 "lib/sj-lib-common/type.sj"
      (*_return) = l == r;
  }
  
  int main(int argc, char** argv) {
  #line 1 "lib/sj-lib-common/log.sj"
      g_loglevel_trace = 0;
  #line 1
      g_loglevel_debug = 1;
  #line 1
      g_loglevel_info = 2;
  #line 1
      g_loglevel_warn = 3;
  #line 1
      g_loglevel_error = 4;
  #line 1
      g_loglevel_fatal = 5;
  #line 1 "lib/sj-lib-common/f32.sj"
      g_f32_pi = 3.14159265358979323846f;
  #line 1 "lib/sj-lib-common/i32.sj"
      g_u32_maxvalue = (uint32_t)4294967295u;
  #line 3
      result1 = -1;
  #line 3
      g_i32_maxvalue = result1 - 2147483647;
  #line 4
      g_i32_minvalue = 2147483647;
  #line 10 "lib/sj-lib-common/log.sj"
      g_log_includeall._refCount = -1;
  #line 10
      sjt_value1._refCount = 1;
  #line 10
      sjf_hash_type_bool(&sjt_value1);
  #line 11
      sjs_hash_type_bool* copyoption1 = &sjt_value1;
      if (copyoption1 != 0) {
          g_log_excludeall._refCount = 1;
  #line 11 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log_excludeall, copyoption1);
      } else {
          g_log_excludeall._refCount = -1;
      }
  
  #line 11
      g_log._refCount = 1;
  #line 13
      g_log.minlevel = g_loglevel_warn;
  #line 13
      sjs_hash_type_bool* copyoption8 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption8 != 0) {
          g_log.traceincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.traceincludes, copyoption8);
      } else {
          g_log.traceincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption9 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption9 != 0) {
          g_log.debugincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.debugincludes, copyoption9);
      } else {
          g_log.debugincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption10 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption10 != 0) {
          g_log.infoincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.infoincludes, copyoption10);
      } else {
          g_log.infoincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption11 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption11 != 0) {
          g_log.warnincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.warnincludes, copyoption11);
      } else {
          g_log.warnincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption12 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption12 != 0) {
          g_log.errorincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.errorincludes, copyoption12);
      } else {
          g_log.errorincludes._refCount = -1;
      }
  
  #line 13
      sjs_hash_type_bool* copyoption13 = (g_log_includeall._refCount != -1 ? &g_log_includeall : 0);
      if (copyoption13 != 0) {
          g_log.fatalincludes._refCount = 1;
  #line 13 "lib/sj-lib-common/log.sj"
          sjf_hash_type_bool_copy(&g_log.fatalincludes, copyoption13);
      } else {
          g_log.fatalincludes._refCount = -1;
      }
  
  #line 13
      sjf_log(&g_log);
  #line 2 "lib/sj-lib-common/weakptr.sj"
      ptr_init();
  #line 3
      weakptr_init();
  #line 7 "lib/sj-lib-common/clock.sj"
      g_clocks_per_sec = 0;
  #line 9
      g_clocks_per_sec = CLOCKS_PER_SEC;
  #line 9
      g_c._refCount = 1;
  #line 9
      sjf_class(&g_c);
  #line 1 "class9.sj"
      sjt_parent4 = &g_c;
  #line 1
      sjf_class_func(sjt_parent4, &sjt_void1);
      main_destroy();
      return 0;
  }
  
  void main_destroy() {
  
      if (g_c._refCount == 1) { sjf_class_destroy(&g_c); }
  ;
      if (g_log._refCount == 1) { sjf_log_destroy(&g_log); }
  ;
      if (g_log_excludeall._refCount == 1) { sjf_hash_type_bool_destroy(&g_log_excludeall); }
  ;
      if (g_log_includeall._refCount == 1) { sjf_hash_type_bool_destroy(&g_log_includeall); }
  ;
      if (sjt_value1._refCount == 1) { sjf_hash_type_bool_destroy(&sjt_value1); }
  ;
  }
  