Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 232825 Details for
Bug 321403
dev-ruby/mmap fails tests
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Build log
mmap-0.2.6-r1:20100524-162547.log (text/plain), 114.96 KB, created by
Diego Elio Pettenò (RETIRED)
on 2010-05-25 06:28:04 UTC
(
hide
)
Description:
Build log
Filename:
MIME Type:
Creator:
Diego Elio Pettenò (RETIRED)
Created:
2010-05-25 06:28:04 UTC
Size:
114.96 KB
patch
obsolete
> * CPV: dev-ruby/mmap-0.2.6-r1 > * REPO: gentoo > * USE: elibc_glibc kernel_linux ruby_targets_ruby18 test userland_GNU x86 >>>> Unpacking source... >>>> Unpacking mmap-0.2.6.tar.gz to /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work/all >>>> Source unpacked in /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work >>>> Preparing source in /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work ... > * Running prepare phase for all ... > * Running source copy phase for ruby18 ... >>>> Source prepared. >>>> Configuring source in /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work ... > * Running configure phase for ruby18 ... >creating Makefile >>>> Source configured. >>>> Compiling source in /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work ... > * Running compile phase for ruby18 ... >make -j14 >i686-pc-linux-gnu-gcc -I. -I/usr/lib/ruby/1.8/i686-linux -I/usr/lib/ruby/1.8/i686-linux -I. -D_FILE_OFFSET_BITS=64 -fPIC -O2 -pipe -fno-strict-aliasing -fPIC -DHAVE_RB_STR_LSTRIP -DHAVE_RB_STR_MATCH -DHAVE_RB_STR_INSERT -DHAVE_RB_STR_CASECMP -DRUBYLIBDIR='"/usr/lib/ruby/1.8"' -c mmap.c >i686-pc-linux-gnu-gcc -shared -o mmap.so mmap.o -L. -L/usr/lib -Wl,-R/usr/lib -L. -Wl,-O1 -rdynamic -Wl,-export-dynamic -Wl,--no-undefined -Wl,-R -Wl,/usr/lib -L/usr/lib -lruby18 -lrt -ldl -lcrypt -lm -lc >>>> Source compiled. > * Running test phase for ruby18 ... >make -j14 test >ruby test/mmapt.rb >Loaded suite test/mmapt >Started >.....F......... >Finished in 0.393424 seconds. > > 1) Failure: >test_05_modify(TestMmap) > [test/mmapt.rb:202:in `internal_modify' > test/mmapt.rb:209:in `test_05_modify']: ><reverse!>. ><"#include <ruby.h>\n#include <fcntl.h>\n#include <ctype.h>\n#include <sys/types.h>\n#include <sys/stat.h>\n#include <unistd.h>\n#include <sys/mman.h>\n\n#if HAVE_SEMCTL && HAVE_SHMCTL\n#include <sys/shm.h>\n#include <sys/ipc.h>\n#include <sys/sem.h>\n#endif\n\n#include <rubyio.h>\n#include <intern.h>\n#include <re.h>\n\n#ifndef StringValue\n#define StringValue(x) do { \t\t\t\t\\\n if (TYPE(x) != T_STRING) x = rb_str_to_str(x); \t\\\n} while (0)\n#endif\n\n#ifndef StringValuePtr\n#define StringValuePtr(x) STR2CSTR(x)\n#endif\n\n#ifndef SafeStringValue\n#define SafeStringValue(x) Check_SafeStr(x)\n#endif\n\n#ifndef MADV_NORMAL\n#ifdef POSIX_MADV_NORMAL\n#define MADV_NORMAL POSIX_MADV_NORMAL \n#define MADV_RANDOM POSIX_MADV_RANDOM \n#define MADV_SEQUENTIAL POSIX_MADV_SEQUENTIAL\n#define MADV_WILLNEED POSIX_MADV_WILLNEED\n#define MADV_DONTNEED POSIX_MADV_DONTNEED\n#define madvise posix_madvise\n#endif\n#endif\n\n#define BEG(no) regs->beg[no]\n#define END(no) regs->end[no]\n\n#ifndef MMAP_RETTYPE\n#ifndef _POSIX_C_SOURCE\n#define _POSIX_C_SOURCE 199309\n#endif /* !_POSIX_C_SOURCE */\n#ifdef _POSIX_VERSION\n#if _POSIX_VERSION >= 199309\n#define MMAP_RETTYPE void *\n#endif /* _POSIX_VERSION >= 199309 */\n#endif /* _POSIX_VERSION */\n#endif /* !MMAP_RETTYPE */\n\n#ifndef MMAP_RETTYPE\n#define MMAP_RETTYPE caddr_t\n#endif\n\n#ifndef MAP_FAILED\n#define MAP_FAILED ((caddr_t)-1)\n#endif /* !MAP_FAILED */\n\n#ifndef MAP_ANON\n#ifdef MAP_ANONYMOUS\n#define MAP_ANON MAP_ANONYMOUS\n#endif\n#endif\n\nstatic VALUE mm_cMap;\n\n#define EXP_INCR_SIZE 4096\n\ntypedef struct {\n MMAP_RETTYPE addr;\n int smode, pmode, vscope;\n int advice, flag;\n VALUE key;\n int semid, shmid;\n size_t len, real, incr;\n off_t offset;\n char *path, *template;\n} mm_mmap;\n\ntypedef struct {\n int count;\n mm_mmap *t;\n} mm_ipc;\n\ntypedef struct {\n VALUE obj, *argv;\n int flag, id, argc;\n} mm_bang;\n\n#define MM_MODIFY 1\n#define MM_ORIGIN 2\n#define MM_CHANGE (MM_MODIFY | 4)\n#define MM_PROTECT 8\n\n#define MM_FROZEN (1<<0)\n#define MM_FIXED (1<<1)\n#define MM_ANON (1<<2)\n#define MM_LOCK (1<<3)\n#define MM_IPC (1<<4)\n#define MM_TMP (1<<5)\n\n#if HAVE_SEMCTL && HAVE_SHMCTL\nstatic char template[1024];\n\nunion semun\n{\n int val;\n struct semid_ds *buf;\n unsigned short int *array;\n struct seminfo *__buf;\n};\n#endif\n\nstatic void\nmm_free(i_mm)\n mm_ipc *i_mm;\n{\n#if HAVE_SEMCTL && HAVE_SHMCTL\n if (i_mm->t->flag & MM_IPC) {\n\tstruct shmid_ds buf;\n\n\tif (shmctl(i_mm->t->shmid, IPC_STAT, &buf) != -1) {\n\t if (buf.shm_nattch == 1 && (i_mm->t->flag & MM_TMP)) {\n\t\tsemctl(i_mm->t->semid, 0, IPC_RMID);\n\t\tif (i_mm->t->template) {\n\t\t unlink(i_mm->t->template);\n\t\t free(i_mm->t->template);\n\t\t}\n\t }\n\t}\n\tshmdt(i_mm->t);\n }\n else {\n\tfree(i_mm->t);\n }\n#endif\n if (i_mm->t->path) {\n\tmunmap(i_mm->t->addr, i_mm->t->len);\n\tif (i_mm->t->path != (char *)-1) {\n\t if (i_mm->t->real < i_mm->t->len && i_mm->t->vscope != MAP_PRIVATE &&\n\t\ttruncate(i_mm->t->path, i_mm->t->real) == -1) {\n\t\tfree(i_mm->t->path);\n\t\tfree(i_mm);\n\t\trb_raise(rb_eTypeError, \"truncate\");\n\t }\n\t free(i_mm->t->path);\n\t}\n }\n free(i_mm);\n}\n\nstatic void\nmm_lock(i_mm, wait_lock)\n mm_ipc *i_mm;\n int wait_lock;\n{\n#if HAVE_SEMCTL && HAVE_SHMCTL\n struct sembuf sem_op;\n\n if (i_mm->t->flag & MM_IPC) {\n\ti_mm->count++;\n\tif (i_mm->count == 1) {\n\tretry:\n\t sem_op.sem_num = 0;\n\t sem_op.sem_op = -1;\n\t sem_op.sem_flg = IPC_NOWAIT;\n\t if (semop(i_mm->t->semid, &sem_op, 1) == -1) {\n\t\tif (errno == EAGAIN) {\n\t\t if (!wait_lock) {\n\t\t\trb_raise(rb_const_get(rb_mErrno, rb_intern(\"EAGAIN\")), \"EAGAIN\");\n\t\t }\n\t\t rb_thread_sleep(1);\n\t\t goto retry;\n\t\t}\n\t\trb_sys_fail(\"semop()\");\n\t }\n\t}\n }\n#endif\n}\n\nstatic void\nmm_unlock(i_mm)\n mm_ipc *i_mm;\n{\n#if HAVE_SEMCTL && HAVE_SHMCTL\n struct sembuf sem_op;\n\n if (i_mm->t->flag & MM_IPC) {\n\ti_mm->count--;\n\tif (!i_mm->count) {\n\tretry:\n\t sem_op.sem_num = 0;\n\t sem_op.sem_op = 1;\n\t sem_op.sem_flg = IPC_NOWAIT;\n\t if (semop(i_mm->t->semid, &sem_op, 1) == -1) {\n\t\tif (errno == EAGAIN) {\n\t\t rb_thread_sleep(1);\n\t\t goto retry;\n\t\t}\n\t\trb_sys_fail(\"semop()\");\n\t }\n\t}\n }\n#endif\n}\n\n#define GetMmap(obj, i_mm, t_modify)\t\t\t\t\t\\\n Data_Get_Struct(obj, mm_ipc, i_mm);\t\t\t\t\t\\\n if (!i_mm->t->path) {\t\t\t\t\t\t\\\n\trb_raise(rb_eIOError, \"unmapped file\");\t\t\t\t\\\n }\t\t\t\t\t\t\t\t\t\\\n if ((t_modify & MM_MODIFY) && (i_mm->t->flag & MM_FROZEN)) {\t\\\n\trb_error_frozen(\"mmap\");\t\t\t\t\t\\\n }\n\nstatic VALUE\nmm_vunlock(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n\n GetMmap(obj, i_mm, 0);\n mm_unlock(i_mm);\n return Qnil;\n}\n\nstatic VALUE\nmm_semlock(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n mm_ipc *i_mm;\n\n GetMmap(obj, i_mm, 0);\n if (!(i_mm->t->flag & MM_IPC)) {\n\trb_warning(\"useless use of #semlock\");\n\trb_yield(obj);\n }\n else {\n#if HAVE_SEMCTL && HAVE_SHMCTL\n\tVALUE a;\n\tint wait_lock = Qtrue;\n\n\tif (rb_scan_args(argc, argv, \"01\", &a)) {\n\t wait_lock = RTEST(a);\n\t}\n\tmm_lock(i_mm, wait_lock);\n\trb_ensure(rb_yield, obj, mm_vunlock, obj);\n#endif\n }\n return Qnil;\n}\n\nstatic VALUE\nmm_ipc_key(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n\n GetMmap(obj, i_mm, 0);\n if (i_mm->t->flag & MM_IPC) {\n\treturn INT2NUM(i_mm->t->key);\n }\n return INT2NUM(-1);\n}\n\nstatic VALUE\nmm_unmap(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n\n GetMmap(obj, i_mm, 0);\n if (i_mm->t->path) {\n\tmm_lock(i_mm, Qtrue);\n\tmunmap(i_mm->t->addr, i_mm->t->len);\n\tif (i_mm->t->path != (char *)-1) {\n\t if (i_mm->t->real < i_mm->t->len && i_mm->t->vscope != MAP_PRIVATE &&\n\t\ttruncate(i_mm->t->path, i_mm->t->real) == -1) {\n\t\trb_raise(rb_eTypeError, \"truncate\");\n\t }\n\t free(i_mm->t->path);\n\t}\n\ti_mm->t->path = '\\0';\n\tmm_unlock(i_mm);\n }\n return Qnil;\n}\n\nstatic VALUE\nmm_freeze(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n rb_obj_freeze(obj);\n GetMmap(obj, i_mm, 0);\n i_mm->t->flag |= MM_FROZEN;\n return obj;\n}\n\nstatic VALUE\nmm_str(obj, modify)\n VALUE obj;\n int modify;\n{\n mm_ipc *i_mm;\n VALUE ret = Qnil;\n\n GetMmap(obj, i_mm, modify & ~MM_ORIGIN);\n if (modify & MM_MODIFY) {\n\tif (i_mm->t->flag & MM_FROZEN) rb_error_frozen(\"mmap\");\n\tif (!OBJ_TAINTED(ret) && rb_safe_level() >= 4)\n\t rb_raise(rb_eSecurityError, \"Insecure: can't modify mmap\");\n }\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n ret = rb_obj_alloc(rb_cString);\n if (rb_obj_tainted(obj)) {\n\tOBJ_TAINT(ret);\n }\n#else\n if (rb_obj_tainted(obj)) {\n\tret = rb_tainted_str_new2(\"\");\n }\n else {\n\tret = rb_str_new2(\"\");\n }\n free(RSTRING(ret)->ptr);\n#endif\n RSTRING(ret)->ptr = i_mm->t->addr;\n RSTRING(ret)->len = i_mm->t->real;\n if (modify & MM_ORIGIN) {\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n\tRSTRING(ret)->aux.shared = ret;\n\tFL_SET(ret, ELTS_SHARED);\n#else\n\tRSTRING(ret)->orig = ret;\n#endif\n }\n if (i_mm->t->flag & MM_FROZEN) {\n\tret = rb_obj_freeze(ret);\n }\n return ret;\n}\n\nstatic VALUE\nmm_to_str(obj)\n VALUE obj;\n{\n return mm_str(obj, MM_ORIGIN);\n}\n \nextern char *ruby_strdup();\n\ntypedef struct {\n mm_ipc *i_mm;\n size_t len;\n} mm_st;\n\nstatic VALUE\nmm_i_expand(st_mm)\n mm_st *st_mm;\n{\n int fd;\n mm_ipc *i_mm = st_mm->i_mm;\n size_t len = st_mm->len;\n\n if (munmap(i_mm->t->addr, i_mm->t->len)) {\n\trb_raise(rb_eArgError, \"munmap failed\");\n }\n if ((fd = open(i_mm->t->path, i_mm->t->smode)) == -1) {\n\trb_raise(rb_eArgError, \"Can't open %s\", i_mm->t->path);\n }\n if (len > i_mm->t->len) {\n\tif (lseek(fd, len - i_mm->t->len - 1, SEEK_END) == -1) {\n\t rb_raise(rb_eIOError, \"Can't lseek %d\", len - i_mm->t->len - 1);\n\t}\n\tif (write(fd, \"\\000\", 1) != 1) {\n\t rb_raise(rb_eIOError, \"Can't extend %s\", i_mm->t->path);\n\t}\n }\n else if (len < i_mm->t->len && truncate(i_mm->t->path, len) == -1) {\n\trb_raise(rb_eIOError, \"Can't truncate %s\", i_mm->t->path);\n }\n i_mm->t->addr = mmap(0, len, i_mm->t->pmode, i_mm->t->vscope, fd, i_mm->t->offset);\n close(fd);\n if (i_mm->t->addr == MAP_FAILED) {\n\trb_raise(rb_eArgError, \"mmap failed\");\n }\n#ifdef MADV_NORMAL\n if (i_mm->t->advice && madvise(i_mm->t->addr, len, i_mm->t->advice) == -1) {\n\trb_raise(rb_eArgError, \"madvise(%d)\", errno);\n }\n#endif\n if ((i_mm->t->flag & MM_LOCK) && mlock(i_mm->t->addr, len) == -1) {\n\trb_raise(rb_eArgError, \"mlock(%d)\", errno);\n }\n i_mm->t->len = len;\n return Qnil;\n}\n\nstatic void\nmm_expandf(i_mm, len)\n mm_ipc *i_mm;\n size_t len;\n{\n int status;\n mm_st st_mm;\n\n if (i_mm->t->vscope == MAP_PRIVATE) {\n\trb_raise(rb_eTypeError, \"expand for a private map\");\n }\n if (i_mm->t->flag & MM_FIXED) {\n\trb_raise(rb_eTypeError, \"expand for a fixed map\");\n }\n if (!i_mm->t->path || i_mm->t->path == (char *)-1) {\n\trb_raise(rb_eTypeError, \"expand for an anonymous map\");\n }\n st_mm.i_mm = i_mm;\n st_mm.len = len;\n if (i_mm->t->flag & MM_IPC) {\n\tmm_lock(i_mm, Qtrue);\n\trb_protect(mm_i_expand, (VALUE)&st_mm, &status);\n\tmm_unlock(i_mm);\n\tif (status) {\n\t rb_jump_tag(status);\n\t}\n }\n else {\n\tmm_i_expand(&st_mm);\n }\n}\n\nstatic void\nmm_realloc(i_mm, len)\n mm_ipc *i_mm;\n size_t len;\n{\n if (i_mm->t->flag & MM_FROZEN) rb_error_frozen(\"mmap\");\n if (len > i_mm->t->len) {\n\tif ((len - i_mm->t->len) < i_mm->t->incr) {\n\t len = i_mm->t->len + i_mm->t->incr;\n\t}\n\tmm_expandf(i_mm, len);\n }\n}\n\nstatic VALUE\nmm_extend(obj, a)\n VALUE obj, a;\n{\n mm_ipc *i_mm;\n long len;\n\n GetMmap(obj, i_mm, MM_MODIFY);\n len = NUM2LONG(a);\n if (len > 0) {\n\tmm_expandf(i_mm, i_mm->t->len + len);\n }\n return UINT2NUM(i_mm->t->len);\n}\n\nstatic VALUE\nmm_i_options(arg, obj)\n VALUE arg, obj;\n{\n mm_ipc *i_mm;\n char *options;\n VALUE key, value;\n\n Data_Get_Struct(obj, mm_ipc, i_mm);\n key = rb_ary_entry(arg, 0);\n value = rb_ary_entry(arg, 1);\n key = rb_obj_as_string(key);\n options = StringValuePtr(key);\n if (strcmp(options, \"length\") == 0) {\n\ti_mm->t->len = NUM2UINT(value);\n\tif (i_mm->t->len <= 0) {\n\t rb_raise(rb_eArgError, \"Invalid value for length %d\", i_mm->t->len);\n\t}\n\ti_mm->t->flag |= MM_FIXED;\n }\n else if (strcmp(options, \"offset\") == 0) {\n\ti_mm->t->offset = NUM2INT(value);\n\tif (i_mm->t->offset < 0) {\n\t rb_raise(rb_eArgError, \"Invalid value for offset %d\", i_mm->t->offset);\n\t}\n\ti_mm->t->flag |= MM_FIXED;\n }\n else if (strcmp(options, \"advice\") == 0) {\n\ti_mm->t->advice = NUM2INT(value);\n }\n else if (strcmp(options, \"increment\") == 0) {\n\tint incr = NUM2INT(value);\n\tif (incr < 0) {\n\t rb_raise(rb_eArgError, \"Invalid value for increment %d\", incr);\n\t}\n\ti_mm->t->incr = incr;\n }\n else if (strcmp(options, \"initialize\") == 0) {\n }\n#if HAVE_SEMCTL && HAVE_SHMCTL\n else if (strcmp(options, \"ipc\") == 0) {\n\tif (value != Qtrue && TYPE(value) != T_HASH) {\n\t rb_raise(rb_eArgError, \"Expected an Hash for :ipc\");\n\t}\n\ti_mm->t->shmid = value;\n\ti_mm->t->flag |= (MM_IPC | MM_TMP);\n }\n#endif\n else {\n\trb_warning(\"Unknown option `%s'\", options);\n }\n return Qnil;\n}\n\n#if HAVE_SEMCTL && HAVE_SHMCTL\n\nstatic VALUE\nmm_i_ipc(arg, obj)\n VALUE arg, obj;\n{\n mm_ipc *i_mm;\n char *options;\n VALUE key, value;\n\n Data_Get_Struct(obj, mm_ipc, i_mm);\n key = rb_ary_entry(arg, 0);\n value = rb_ary_entry(arg, 1);\n key = rb_obj_as_string(key);\n options = StringValuePtr(key);\n if (strcmp(options, \"key\") == 0) {\n\ti_mm->t->key = rb_funcall2(value, rb_intern(\"to_int\"), 0, 0);\n }\n else if (strcmp(options, \"permanent\") == 0) {\n\tif (RTEST(value)) {\n\t i_mm->t->flag &= ~MM_TMP;\n\t}\n }\n else if (strcmp(options, \"mode\") == 0) {\n\ti_mm->t->semid = NUM2INT(value);\n }\n else {\n\trb_warning(\"Unknown option `%s'\", options);\n }\n return Qnil;\n}\n\n#endif\n\nstatic VALUE\nmm_s_new(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n VALUE res = rb_funcall2(obj, rb_intern(\"allocate\"), 0, 0);\n rb_obj_call_init(res, argc, argv);\n return res;\n}\n\nstatic VALUE\nmm_s_alloc(obj)\n VALUE obj;\n{\n VALUE res;\n mm_ipc *i_mm;\n\n res = Data_Make_Struct(obj, mm_ipc, 0, mm_free, i_mm);\n i_mm->t = ALLOC_N(mm_mmap, 1);\n MEMZERO(i_mm->t, mm_mmap, 1);\n i_mm->t->incr = EXP_INCR_SIZE;\n return res;\n}\n\nstatic VALUE\nmm_init(argc, argv, obj)\n VALUE obj, *argv;\n int argc;\n{\n struct stat st;\n int fd, smode = 0, pmode = 0, vscope, perm, init;\n MMAP_RETTYPE addr;\n VALUE fname, fdv, vmode, scope, options;\n mm_ipc *i_mm;\n char *path, *mode;\n size_t size = 0;\n off_t offset;\n int anonymous;\n\n options = Qnil;\n if (argc > 1 && TYPE(argv[argc - 1]) == T_HASH) {\n\toptions = argv[argc - 1];\n\targc--;\n }\n rb_scan_args(argc, argv, \"12\", &fname, &vmode, &scope);\n vscope = 0;\n path = 0;\n fd = -1;\n anonymous = 0;\n fdv = Qnil;\n#ifdef MAP_ANON\n if (NIL_P(fname)) {\n\tvscope = MAP_ANON | MAP_SHARED;\n\tanonymous = 1;\n }\n else \n#endif\n {\n\tif (rb_safe_level() > 0 && OBJ_TAINTED(fname)){\n\t rb_raise(rb_eSecurityError, \"Insecure operation\");\n\t}\n\trb_secure(4);\n\tif (rb_respond_to(fname, rb_intern(\"fileno\"))) {\n\t fdv = rb_funcall2(fname, rb_intern(\"fileno\"), 0, 0);\n\t}\n\tif (NIL_P(fdv)) {\n\t fname = rb_str_to_str(fname);\n\t SafeStringValue(fname);\n\t path = StringValuePtr(fname);\n\t}\n\telse {\n\t fd = NUM2INT(fdv);\n\t if (fd < 0) {\n\t\trb_raise(rb_eArgError, \"invalid file descriptor %d\", fd);\n\t }\n\t}\n\tif (!NIL_P(scope)) {\n\t vscope = NUM2INT(scope);\n#ifdef MAP_ANON\n\t if (vscope & MAP_ANON) {\n\t\trb_raise(rb_eArgError, \"filename specified for an anonymous map\");\n\t }\n#endif\n\t}\n }\n vscope |= NIL_P(scope) ? MAP_SHARED : NUM2INT(scope);\n size = 0;\n perm = 0666;\n if (!anonymous) {\n\tif (NIL_P(vmode)) {\n\t mode = \"r\";\n\t}\n\telse if (rb_respond_to(vmode, rb_intern(\"to_ary\"))) {\n VALUE tmp;\n\n vmode = rb_convert_type(vmode, T_ARRAY, \"Array\", \"to_ary\");\n if (RARRAY(vmode)->len != 2) {\n rb_raise(rb_eArgError, \"Invalid length %d (expected 2)\",\n RARRAY(vmode)->len);\n }\n\t tmp = RARRAY(vmode)->ptr[0];\n\t mode = StringValuePtr(tmp);\n\t perm = NUM2INT(RARRAY(vmode)->ptr[1]);\n\t}\n\telse {\n\t mode = StringValuePtr(vmode);\n\t}\n\tif (strcmp(mode, \"r\") == 0) {\n\t smode = O_RDONLY;\n\t pmode = PROT_READ;\n\t}\n\telse if (strcmp(mode, \"w\") == 0) {\n\t smode = O_RDWR | O_TRUNC;\n\t pmode = PROT_READ | PROT_WRITE;\n\t}\n\telse if (strcmp(mode, \"rw\") == 0 || strcmp(mode, \"wr\") == 0) {\n\t smode = O_RDWR;\n\t pmode = PROT_READ | PROT_WRITE;\n\t}\n\telse if (strcmp(mode, \"a\") == 0) {\n\t smode = O_RDWR | O_CREAT;\n\t pmode = PROT_READ | PROT_WRITE;\n\t}\n\telse {\n\t rb_raise(rb_eArgError, \"Invalid mode %s\", mode);\n\t}\n\tif (NIL_P(fdv)) {\n\t if ((fd = open(path, smode, perm)) == -1) {\n\t\trb_raise(rb_eArgError, \"Can't open %s\", path);\n\t }\n\t}\n\tif (fstat(fd, &st) == -1) {\n\t rb_raise(rb_eArgError, \"Can't stat %s\", path);\n\t}\n\tsize = st.st_size;\n }\n else {\n\tfd = -1;\n\tif (!NIL_P(vmode) && TYPE(vmode) != T_STRING) {\n\t size = NUM2INT(vmode);\n\t}\n }\n Data_Get_Struct(obj, mm_ipc, i_mm);\n if (i_mm->t->flag & MM_FROZEN) {\n\trb_raise(rb_eArgError, \"frozen mmap\");\n }\n i_mm->t->shmid = 0;\n i_mm->t->semid = 0;\n offset = 0;\n if (options != Qnil) {\n\trb_iterate(rb_each, options, mm_i_options, obj);\n\tif (path && (i_mm->t->len + i_mm->t->offset) > st.st_size) {\n\t rb_raise(rb_eArgError, \"invalid value for length (%d) or offset (%d)\",\n\t\t i_mm->t->len, i_mm->t->offset);\n\t}\n\tif (i_mm->t->len) size = i_mm->t->len;\n\toffset = i_mm->t->offset;\n#if HAVE_SEMCTL && HAVE_SHMCTL\n\tif (i_mm->t->flag & MM_IPC) {\n\t key_t key;\n\t int shmid, semid, mode;\n\t union semun sem_val;\n\t struct shmid_ds buf;\n\t mm_mmap *data;\n\n\t if (!(vscope & MAP_SHARED)) {\n\t\trb_warning(\"Probably it will not do what you expect ...\");\n\t }\n\t i_mm->t->key = -1;\n\t i_mm->t->semid = 0;\n\t if (TYPE(i_mm->t->shmid) == T_HASH) {\n\t\trb_iterate(rb_each, i_mm->t->shmid, mm_i_ipc, obj);\n\t }\n\t i_mm->t->shmid = 0;\n\t if (i_mm->t->semid) {\n\t\tmode = i_mm->t->semid;\n\t\ti_mm->t->semid = 0;\n\t }\n\t else {\n\t\tmode = 0644;\n\t }\n\t if ((int)i_mm->t->key <= 0) {\n\t\tmode |= IPC_CREAT;\n\t\tstrcpy(template, \"/tmp/ruby_mmap.XXXXXX\");\n\t\tif (mkstemp(template) == -1) {\n\t\t rb_sys_fail(\"mkstemp()\");\n\t\t}\n\t\tif ((key = ftok(template, 'R')) == -1) {\n\t\t rb_sys_fail(\"ftok()\");\n\t\t}\n\t }\n\t else {\n\t\tkey = (key_t)i_mm->t->key;\n\t }\n\t if ((shmid = shmget(key, sizeof(mm_ipc), mode)) == -1) {\n\t\trb_sys_fail(\"shmget()\");\n\t }\n\t data = shmat(shmid, (void *)0, 0);\n\t if (data == (mm_mmap *)-1) {\n\t\trb_sys_fail(\"shmat()\");\n\t }\n\t if (i_mm->t->flag & MM_TMP) {\n\t\tif (shmctl(shmid, IPC_RMID, &buf) == -1) {\n\t\t rb_sys_fail(\"shmctl()\");\n\t\t}\n\t }\n\t if ((semid = semget(key, 1, mode)) == -1) {\n\t\trb_sys_fail(\"semget()\");\n\t }\n\t if (mode & IPC_CREAT) {\n\t\tsem_val.val = 1;\n\t\tif (semctl(semid, 0, SETVAL, sem_val) == -1) {\n\t\t rb_sys_fail(\"semctl()\");\n\t\t}\n\t }\n\t memcpy(data, i_mm->t, sizeof(mm_mmap));\n\t free(i_mm->t);\n\t i_mm->t = data;\n\t i_mm->t->key = key;\n\t i_mm->t->semid = semid;\n\t i_mm->t->shmid = shmid;\n\t if (i_mm->t->flag & MM_TMP) {\n\t\ti_mm->t->template = ALLOC_N(char, strlen(template) + 1);\n\t\tstrcpy(i_mm->t->template, template);\n\t }\n }\n#endif\n }\n init = 0;\n if (anonymous) {\n\tif (size <= 0) {\n\t rb_raise(rb_eArgError, \"length not specified for an anonymous map\");\n\t}\n\tif (offset) {\n\t rb_warning(\"Ignoring offset for an anonymous map\");\n\t offset = 0;\n\t}\n\tsmode = O_RDWR;\n\tpmode = PROT_READ | PROT_WRITE;\n\ti_mm->t->flag |= MM_FIXED | MM_ANON;\n }\n else {\n\tif (size == 0 && (smode & O_RDWR)) {\n\t if (lseek(fd, i_mm->t->incr - 1, SEEK_END) == -1) {\n\t\trb_raise(rb_eIOError, \"Can't lseek %d\", i_mm->t->incr - 1);\n\t }\n\t if (write(fd, \"\\000\", 1) != 1) {\n\t\trb_raise(rb_eIOError, \"Can't extend %s\", path);\n\t }\n\t init = 1;\n\t size = i_mm->t->incr;\n\t}\n\tif (!NIL_P(fdv)) {\n\t i_mm->t->flag |= MM_FIXED;\n\t}\n }\n addr = mmap(0, size, pmode, vscope, fd, offset);\n if (NIL_P(fdv) && !anonymous) {\n\tclose(fd);\n }\n if (addr == MAP_FAILED || !addr) {\n\trb_raise(rb_eArgError, \"mmap failed (%d)\", errno);\n }\n#ifdef MADV_NORMAL\n if (i_mm->t->advice && madvise(addr, size, i_mm->t->advice) == -1) {\n\trb_raise(rb_eArgError, \"madvise(%d)\", errno);\n }\n#endif\n if (anonymous && TYPE(options) == T_HASH) {\n\tVALUE val;\n\tchar *ptr;\n\n\tval = rb_hash_aref(options, rb_str_new2(\"initialize\"));\n\tif (!NIL_P(val)) {\n\t ptr = StringValuePtr(val);\n\t memset(addr, ptr[0], size);\n\t}\n }\n i_mm->t->addr = addr;\n i_mm->t->len = size;\n if (!init) i_mm->t->real = size;\n i_mm->t->pmode = pmode;\n i_mm->t->vscope = vscope;\n i_mm->t->smode = smode & ~O_TRUNC;\n i_mm->t->path = (path)?ruby_strdup(path):(char *)-1;\n if (smode == O_RDONLY) {\n\tobj = rb_obj_freeze(obj);\n\ti_mm->t->flag |= MM_FROZEN;\n }\n else {\n\tif (smode == O_WRONLY) {\n\t i_mm->t->flag |= MM_FIXED;\n\t}\n\tOBJ_TAINT(obj);\n }\n return obj;\n}\n\nstatic VALUE\nmm_msync(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n mm_ipc *i_mm;\n VALUE oflag;\n int ret;\n int flag = MS_SYNC;\n\n if (argc) {\n\trb_scan_args(argc, argv, \"01\", &oflag);\n\tflag = NUM2INT(oflag);\n }\n GetMmap(obj, i_mm, MM_MODIFY);\n if ((ret = msync(i_mm->t->addr, i_mm->t->len, flag)) != 0) {\n\trb_raise(rb_eArgError, \"msync(%d)\", ret);\n }\n if (i_mm->t->real < i_mm->t->len && i_mm->t->vscope != MAP_PRIVATE)\n\tmm_expandf(i_mm, i_mm->t->real);\n return obj;\n}\n\nstatic VALUE\nmm_mprotect(obj, a)\n VALUE obj, a;\n{\n mm_ipc *i_mm;\n int ret, pmode;\n char *smode;\n\n GetMmap(obj, i_mm, 0);\n if (TYPE(a) == T_STRING) {\n\tsmode = StringValuePtr(a);\n\tif (strcmp(smode, \"r\") == 0) pmode = PROT_READ;\n\telse if (strcmp(smode, \"w\") == 0) pmode = PROT_WRITE;\n\telse if (strcmp(smode, \"rw\") == 0 || strcmp(smode, \"wr\") == 0)\n\t pmode = PROT_READ | PROT_WRITE;\n\telse {\n\t rb_raise(rb_eArgError, \"Invalid mode %s\", smode);\n\t}\n }\n else {\n\tpmode = NUM2INT(a);\n }\n if ((pmode & PROT_WRITE) && (i_mm->t->flag & MM_FROZEN)) \n\trb_error_frozen(\"mmap\");\n if ((ret = mprotect(i_mm->t->addr, i_mm->t->len, pmode | PROT_READ)) != 0) {\n\trb_raise(rb_eArgError, \"mprotect(%d)\", ret);\n }\n i_mm->t->pmode = pmode;\n if (pmode & PROT_READ) {\n\tif (pmode & PROT_WRITE) i_mm->t->smode = O_RDWR;\n\telse {\n\t i_mm->t->smode = O_RDONLY;\n\t obj = rb_obj_freeze(obj);\n\t i_mm->t->flag |= MM_FROZEN;\n\t}\n }\n else if (pmode & PROT_WRITE) {\n\ti_mm->t->flag |= MM_FIXED;\n\ti_mm->t->smode = O_WRONLY;\n }\n return obj;\n}\n\n#ifdef MADV_NORMAL\nstatic VALUE\nmm_madvise(obj, a)\n VALUE obj, a;\n{\n mm_ipc *i_mm;\n \n GetMmap(obj, i_mm, 0);\n if (madvise(i_mm->t->addr, i_mm->t->len, NUM2INT(a)) == -1) {\n\trb_raise(rb_eTypeError, \"madvise(%d)\", errno);\n }\n i_mm->t->advice = NUM2INT(a);\n return Qnil;\n}\n#endif\n\n#define StringMmap(b, bp, bl)\t\t\t\t\t\t \\\ndo {\t\t\t\t\t\t\t\t\t \\\n if (TYPE(b) == T_DATA && RDATA(b)->dfree == (RUBY_DATA_FUNC)mm_free) { \\\n\tmm_ipc *b_mm;\t\t\t\t\t\t\t \\\n\tGetMmap(b, b_mm, 0);\t\t\t\t\t\t \\\n\tbp = b_mm->t->addr;\t\t\t\t\t\t \\\n\tbl = b_mm->t->real;\t\t\t\t\t\t \\\n }\t\t\t\t\t\t\t\t\t \\\n else {\t\t\t\t\t\t\t\t \\\n\tbp = StringValuePtr(b);\t\t\t\t\t\t \\\n\tbl = RSTRING(b)->len;\t\t\t\t\t\t \\\n }\t\t\t\t\t\t\t\t\t \\\n} while (0);\n\nstatic void\nmm_update(str, beg, len, val)\n mm_ipc *str;\n VALUE val;\n long beg;\n long len;\n{\n char *valp;\n long vall;\n\n if (str->t->flag & MM_FROZEN) rb_error_frozen(\"mmap\");\n if (len < 0) rb_raise(rb_eIndexError, \"negative length %d\", len);\n mm_lock(str);\n if (beg < 0) {\n\tbeg += str->t->real;\n }\n if (beg < 0 || str->t->real < (size_t)beg) {\n\tif (beg < 0) {\n\t beg -= str->t->real;\n\t}\n\tmm_unlock(str);\n\trb_raise(rb_eIndexError, \"index %d out of string\", beg);\n }\n if (str->t->real < (size_t)(beg + len)) {\n\tlen = str->t->real - beg;\n }\n\n mm_unlock(str);\n StringMmap(val, valp, vall);\n mm_lock(str);\n\n if ((str->t->flag & MM_FIXED) && vall != len) {\n\tmm_unlock(str);\n\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n }\n if (len < vall) {\n\tmm_realloc(str, str->t->real + vall - len);\n }\n\n if (vall != len) {\n\tmemmove((char *)str->t->addr + beg + vall,\n\t\t(char *)str->t->addr + beg + len,\n\t\tstr->t->real - (beg + len));\n }\n if (str->t->real < (size_t)beg && len < 0) {\n\tMEMZERO(str->t->addr + str->t->real, char, -len);\n }\n if (vall > 0) {\n\tmemmove((char *)str->t->addr + beg, valp, vall);\n }\n str->t->real += vall - len;\n mm_unlock(str);\n}\n\nstatic VALUE\nmm_match(x, y)\n VALUE x, y;\n{\n VALUE reg, res;\n long start;\n\n x = mm_str(x, MM_ORIGIN);\n if (TYPE(y) == T_DATA && RDATA(y)->dfree == (RUBY_DATA_FUNC)mm_free) {\n\ty = mm_to_str(y);\n }\n switch (TYPE(y)) {\n case T_REGEXP:\n\tres = rb_reg_match(y, x);\n\tbreak;\n\n case T_STRING:\n\treg = rb_reg_regcomp(y);\n\tstart = rb_reg_search(reg, x, 0, 0);\n\tif (start == -1) res = Qnil;\n\telse res = INT2NUM(start);\n\tbreak;\n\n default:\n\tres = rb_funcall(y, rb_intern(\"=~\"), 1, x);\n\tbreak;\n }\n return res;\n}\n\nstatic VALUE\nget_pat(pat)\n VALUE pat;\n{\n switch (TYPE(pat)) {\n case T_REGEXP:\n\tbreak;\n\n case T_STRING:\n\tpat = rb_reg_regcomp(pat);\n\tbreak;\n\n default:\n\t/* type failed */\n\tCheck_Type(pat, T_REGEXP);\n }\n return pat;\n}\n\nstatic int\nmm_correct_backref()\n{\n VALUE match;\n int i, start;\n\n match = rb_backref_get();\n if (NIL_P(match)) return 0;\n if (RMATCH(match)->BEG(0) == -1) return 0;\n start = RMATCH(match)->BEG(0);\n RMATCH(match)->str = rb_str_new(StringValuePtr(RMATCH(match)->str) + start,\n\t\t\t\t RMATCH(match)->END(0) - start);\n if (OBJ_TAINTED(match)) OBJ_TAINT(RMATCH(match)->str);\n for (i = 0; i < RMATCH(match)->regs->num_regs && RMATCH(match)->BEG(i) != -1; i++) {\n\tRMATCH(match)->BEG(i) -= start;\n\tRMATCH(match)->END(i) -= start;\n }\n rb_backref_set(match);\n return start;\n}\n\nstatic VALUE\nmm_sub_bang_int(bang_st)\n mm_bang *bang_st;\n{\n int argc = bang_st->argc;\n VALUE *argv = bang_st->argv;\n VALUE obj = bang_st->obj;\n VALUE pat, repl = Qnil, match, str, res;\n struct re_registers *regs;\n int start, iter = 0;\n int tainted = 0;\n long plen;\n mm_ipc *i_mm;\n\n if (argc == 1 && rb_block_given_p()) {\n\titer = 1;\n }\n else if (argc == 2) {\n\trepl = rb_str_to_str(argv[1]);\n\tif (OBJ_TAINTED(repl)) tainted = 1;\n }\n else {\n\trb_raise(rb_eArgError, \"wrong # of arguments(%d for 2)\", argc);\n }\n GetMmap(obj, i_mm, MM_MODIFY);\n str = mm_str(obj, MM_MODIFY | MM_ORIGIN);\n\n pat = get_pat(argv[0]);\n res = Qnil;\n if (rb_reg_search(pat, str, 0, 0) >= 0) {\n\tstart = mm_correct_backref();\n\tmatch = rb_backref_get();\n\tregs = RMATCH(match)->regs;\n\tif (iter) {\n\t rb_match_busy(match);\n\t repl = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));\n\t rb_backref_set(match);\n\t}\n\telse {\n\t RSTRING(str)->ptr += start;\n\t repl = rb_reg_regsub(repl, str, regs);\n\t RSTRING(str)->ptr -= start;\n\t}\n\tif (OBJ_TAINTED(repl)) tainted = 1;\n\tplen = END(0) - BEG(0);\n\tif (RSTRING(repl)->len > plen) {\n\t mm_realloc(i_mm, RSTRING(str)->len + RSTRING(repl)->len - plen);\n\t RSTRING(str)->ptr = i_mm->t->addr;\n\t}\n\tif (RSTRING(repl)->len != plen) {\n\t if (i_mm->t->flag & MM_FIXED) {\n\t\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n\t }\n\t memmove(RSTRING(str)->ptr + start + BEG(0) + RSTRING(repl)->len,\n\t\t RSTRING(str)->ptr + start + BEG(0) + plen,\n\t\t RSTRING(str)->len - start - BEG(0) - plen);\n\t}\n\tmemcpy(RSTRING(str)->ptr + start + BEG(0),\n\t RSTRING(repl)->ptr, RSTRING(repl)->len);\n\ti_mm->t->real += RSTRING(repl)->len - plen;\n\tif (tainted) OBJ_TAINT(obj);\n\n\tres = obj;\n }\n rb_gc_force_recycle(str);\n return res;\n}\n\nstatic VALUE\nmm_sub_bang(argc, argv, obj)\n int argc;\n VALUE *argv;\n VALUE obj;\n{\n VALUE res;\n mm_bang bang_st;\n mm_ipc *i_mm;\n\n bang_st.argc = argc;\n bang_st.argv = argv;\n bang_st.obj = obj;\n GetMmap(obj, i_mm, MM_MODIFY);\n if (i_mm->t->flag & MM_IPC) {\n\tmm_lock(i_mm, Qtrue);\n\tres = rb_ensure(mm_sub_bang_int, (VALUE)&bang_st, mm_vunlock, obj);\n }\n else {\n\tres = mm_sub_bang_int(&bang_st);\n }\n return res;\n}\n\nstatic VALUE\nmm_gsub_bang_int(bang_st)\n mm_bang *bang_st;\n{\n int argc = bang_st->argc;\n VALUE *argv = bang_st->argv;\n VALUE obj = bang_st->obj;\n VALUE pat, val, repl = Qnil, match, str;\n struct re_registers *regs;\n long beg, offset;\n int start, iter = 0;\n int tainted = 0;\n long plen;\n mm_ipc *i_mm;\n\n if (argc == 1 && rb_block_given_p()) {\n\titer = 1;\n }\n else if (argc == 2) {\n\trepl = rb_str_to_str(argv[1]);\n\tif (OBJ_TAINTED(repl)) tainted = 1;\n }\n else {\n\trb_raise(rb_eArgError, \"wrong # of arguments(%d for 2)\", argc);\n }\n GetMmap(obj, i_mm, MM_MODIFY);\n str = mm_str(obj, MM_MODIFY | MM_ORIGIN);\n\n pat = get_pat(argv[0]);\n offset = 0;\n beg = rb_reg_search(pat, str, 0, 0);\n if (beg < 0) {\n\trb_gc_force_recycle(str);\n\treturn Qnil;\n }\n while (beg >= 0) {\n\tstart = mm_correct_backref();\n\tmatch = rb_backref_get();\n\tregs = RMATCH(match)->regs;\n\tif (iter) {\n\t rb_match_busy(match);\n\t val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));\n\t rb_backref_set(match);\n\t}\n\telse {\n\t RSTRING(str)->ptr += start;\n\t val = rb_reg_regsub(repl, str, regs);\n\t RSTRING(str)->ptr -= start;\n\t}\n\tif (OBJ_TAINTED(repl)) tainted = 1;\n\tplen = END(0) - BEG(0);\n\tif ((i_mm->t->real + RSTRING(val)->len - plen) > i_mm->t->len) {\n\t mm_realloc(i_mm, RSTRING(str)->len + RSTRING(val)->len - plen);\n\t}\n\tif (RSTRING(val)->len != plen) {\n\t if (i_mm->t->flag & MM_FIXED) {\n\t\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n\t }\n\t memmove(RSTRING(str)->ptr + start + BEG(0) + RSTRING(val)->len,\n\t\t RSTRING(str)->ptr + start + BEG(0) + plen,\n\t\t RSTRING(str)->len - start - BEG(0) - plen);\n\t}\n\tmemcpy(RSTRING(str)->ptr + start + BEG(0),\n\t RSTRING(val)->ptr, RSTRING(val)->len);\n\tRSTRING(str)->len += RSTRING(val)->len - plen;\n\ti_mm->t->real = RSTRING(str)->len;\n\tif (BEG(0) == END(0)) {\n\t offset = start + END(0) + mbclen2(RSTRING(str)->ptr[END(0)], pat);\n\t offset += RSTRING(val)->len - plen;\n\t}\n\telse {\n\t offset = start + END(0) + RSTRING(val)->len - plen;\n\t}\n\tif (offset > RSTRING(str)->len) break;\n\tbeg = rb_reg_search(pat, str, offset, 0);\n }\n rb_backref_set(match);\n if (tainted) OBJ_TAINT(obj);\n rb_gc_force_recycle(str);\n return obj;\n}\n\nstatic VALUE\nmm_gsub_bang(argc, argv, obj)\n int argc;\n VALUE *argv;\n VALUE obj;\n{\n VALUE res;\n mm_bang bang_st;\n mm_ipc *i_mm;\n\n bang_st.argc = argc;\n bang_st.argv = argv;\n bang_st.obj = obj;\n GetMmap(obj, i_mm, MM_MODIFY);\n if (i_mm->t->flag & MM_IPC) {\n\tmm_lock(i_mm, Qtrue);\n\tres = rb_ensure(mm_gsub_bang_int, (VALUE)&bang_st, mm_vunlock, obj);\n }\n else {\n\tres = mm_gsub_bang_int(&bang_st);\n }\n return res;\n}\n\nstatic VALUE mm_index __((int, VALUE *, VALUE));\n\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n\nstatic void\nmm_subpat_set(obj, re, offset, val)\n VALUE obj, re;\n int offset;\n VALUE val;\n{\n VALUE str, match;\n int start, end, len;\n mm_ipc *i_mm;\n \n str = mm_str(obj, MM_MODIFY | MM_ORIGIN);\n if (rb_reg_search(re, str, 0, 0) < 0) {\n\trb_raise(rb_eIndexError, \"regexp not matched\");\n }\n match = rb_backref_get();\n if (offset >= RMATCH(match)->regs->num_regs) {\n\trb_raise(rb_eIndexError, \"index %d out of regexp\", offset);\n }\n\n start = RMATCH(match)->BEG(offset);\n if (start == -1) {\n\trb_raise(rb_eIndexError, \"regexp group %d not matched\", offset);\n }\n end = RMATCH(match)->END(offset);\n len = end - start;\n GetMmap(obj, i_mm, MM_MODIFY);\n mm_update(i_mm, start, len, val);\n}\n\n#endif\n\nstatic VALUE\nmm_aset(str, indx, val)\n VALUE str;\n VALUE indx, val;\n{\n long idx;\n mm_ipc *i_mm;\n\n GetMmap(str, i_mm, MM_MODIFY);\n switch (TYPE(indx)) {\n case T_FIXNUM:\n num_index:\n\tidx = NUM2INT(indx);\n\tif (idx < 0) {\n\t idx += i_mm->t->real;\n\t}\n\tif (idx < 0 || i_mm->t->real <= (size_t)idx) {\n\t rb_raise(rb_eIndexError, \"index %d out of string\", idx);\n\t}\n\tif (FIXNUM_P(val)) {\n\t if (i_mm->t->real == (size_t)idx) {\n\t\ti_mm->t->real += 1;\n\t\tmm_realloc(i_mm, i_mm->t->real);\n\t }\n\t ((char *)i_mm->t->addr)[idx] = NUM2INT(val) & 0xff;\n\t}\n\telse {\n\t mm_update(i_mm, idx, 1, val);\n\t}\n\treturn val;\n\n case T_REGEXP:\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n\t mm_subpat_set(str, indx, 0, val);\n#else \n {\n\t VALUE args[2];\n\t args[0] = indx;\n\t args[1] = val;\n\t mm_sub_bang(2, args, str);\n\t}\n#endif\n\treturn val;\n\n case T_STRING:\n {\n\t VALUE res;\n\n\t res = mm_index(1, &indx, str);\n\t if (!NIL_P(res)) {\n\t mm_update(i_mm, NUM2LONG(res), RSTRING(indx)->len, val);\n\t }\n\t return val;\n }\n\n default:\n\t/* check if indx is Range */\n\t{\n\t long beg, len;\n\t if (rb_range_beg_len(indx, &beg, &len, i_mm->t->real, 2)) {\n\t\tmm_update(i_mm, beg, len, val);\n\t\treturn val;\n\t }\n\t}\n\tidx = NUM2LONG(indx);\n\tgoto num_index;\n }\n}\n\nstatic VALUE\nmm_aset_m(argc, argv, str)\n int argc;\n VALUE *argv;\n VALUE str;\n{\n mm_ipc *i_mm;\n\n GetMmap(str, i_mm, MM_MODIFY);\n if (argc == 3) {\n\tlong beg, len;\n\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n\tif (TYPE(argv[0]) == T_REGEXP) {\n\t mm_subpat_set(str, argv[0], NUM2INT(argv[1]), argv[2]);\n\t}\n\telse\n#endif\n\t{\n\t beg = NUM2INT(argv[0]);\n\t len = NUM2INT(argv[1]);\n\t mm_update(i_mm, beg, len, argv[2]);\n\t}\n\treturn argv[2];\n }\n if (argc != 2) {\n\trb_raise(rb_eArgError, \"wrong # of arguments(%d for 2)\", argc);\n }\n return mm_aset(str, argv[0], argv[1]);\n}\n\n#if HAVE_RB_STR_INSERT\n\nstatic VALUE\nmm_insert(str, idx, str2)\n VALUE str, idx, str2;\n{\n mm_ipc *i_mm;\n long pos = NUM2LONG(idx);\n\n GetMmap(str, i_mm, MM_MODIFY);\n if (pos == -1) {\n\tpos = RSTRING(str)->len;\n }\n else if (pos < 0) {\n\tpos++;\n }\n mm_update(i_mm, pos, 0, str2);\n return str;\n}\n\n#endif\n\nstatic VALUE mm_aref_m _((int, VALUE *, VALUE));\n\nstatic VALUE\nmm_slice_bang(argc, argv, str)\n int argc;\n VALUE *argv;\n VALUE str;\n{\n VALUE result;\n VALUE buf[3];\n int i;\n\n if (argc < 1 || 2 < argc) {\n\trb_raise(rb_eArgError, \"wrong # of arguments(%d for 1)\", argc);\n }\n for (i = 0; i < argc; i++) {\n\tbuf[i] = argv[i];\n }\n buf[i] = rb_str_new(0,0);\n result = mm_aref_m(argc, buf, str);\n if (!NIL_P(result)) {\n\tmm_aset_m(argc+1, buf, str);\n }\n return result;\n}\n\nstatic VALUE\nmm_cat(str, ptr, len)\n VALUE str;\n const char *ptr;\n long len;\n{\n mm_ipc *i_mm;\n char *sptr;\n\n GetMmap(str, i_mm, MM_MODIFY);\n if (len > 0) {\n\tint poffset = -1;\n\tsptr = (char *)i_mm->t->addr;\n\n\tif (sptr <= ptr &&\n\t ptr < sptr + i_mm->t->real) {\n\t poffset = ptr - sptr;\n\t}\n\tmm_lock(i_mm, Qtrue);\n\tmm_realloc(i_mm, i_mm->t->real + len);\n\tsptr = (char *)i_mm->t->addr;\n\tif (ptr) {\n\t if (poffset >= 0) ptr = sptr + poffset;\n\t memcpy(sptr + i_mm->t->real, ptr, len);\n\t}\n\ti_mm->t->real += len;\n\tmm_unlock(i_mm);\n }\n return str;\n}\n\nstatic VALUE\nmm_append(str1, str2)\n VALUE str1, str2;\n{\n str2 = rb_str_to_str(str2);\n str1 = mm_cat(str1, StringValuePtr(str2), RSTRING(str2)->len);\n return str1;\n}\n\nstatic VALUE\nmm_concat(str1, str2)\n VALUE str1, str2;\n{\n if (FIXNUM_P(str2)) {\n\tint i = FIX2INT(str2);\n\tif (0 <= i && i <= 0xff) { /* byte */\n\t char c = i;\n\t return mm_cat(str1, &c, 1);\n\t}\n }\n str1 = mm_append(str1, str2);\n return str1;\n}\n\n#ifndef HAVE_RB_STR_LSTRIP\n\nstatic VALUE\nmm_strip_bang(str)\n VALUE str;\n{\n char *s, *t, *e;\n mm_ipc *i_mm;\n\n GetMmap(str, i_mm, MM_MODIFY);\n mm_lock(i_mm, Qtrue);\n s = (char *)i_mm->t->addr;\n e = t = s + i_mm->t->real;\n while (s < t && ISSPACE(*s)) s++;\n t--;\n while (s <= t && ISSPACE(*t)) t--;\n t++;\n\n if (i_mm->t->real != (t - s) && (i_mm->t->flag & MM_FIXED)) {\n\tmm_unlock(i_mm);\n rb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n }\n i_mm->t->real = t-s;\n if (s > (char *)i_mm->t->addr) { \n memmove(i_mm->t->addr, s, i_mm->t->real);\n ((char *)i_mm->t->addr)[i_mm->t->real] = '\\0';\n }\n else if (t < e) {\n ((char *)i_mm->t->addr)[i_mm->t->real] = '\\0';\n }\n else {\n str = Qnil;\n }\n mm_unlock(i_mm);\n return str;\n}\n\n#else\n\nstatic VALUE\nmm_lstrip_bang(str)\n VALUE str;\n{\n char *s, *t, *e;\n mm_ipc *i_mm;\n\n GetMmap(str, i_mm, MM_MODIFY);\n mm_lock(i_mm, Qtrue);\n s = (char *)i_mm->t->addr;\n e = t = s + i_mm->t->real;\n while (s < t && ISSPACE(*s)) s++;\n\n if (i_mm->t->real != (size_t)(t - s) && (i_mm->t->flag & MM_FIXED)) {\n\tmm_unlock(i_mm);\n\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n }\n i_mm->t->real = t - s;\n if (s > (char *)i_mm->t->addr) { \n\tmemmove(i_mm->t->addr, s, i_mm->t->real);\n\t((char *)i_mm->t->addr)[i_mm->t->real] = '\\0';\n\tmm_unlock(i_mm);\n\treturn str;\n }\n mm_unlock(i_mm);\n return Qnil;\n}\n\nstatic VALUE\nmm_rstrip_bang(str)\n VALUE str;\n{\n char *s, *t, *e;\n mm_ipc *i_mm;\n\n GetMmap(str, i_mm, MM_MODIFY);\n mm_lock(i_mm, Qtrue);\n s = (char *)i_mm->t->addr;\n e = t = s + i_mm->t->real;\n t--;\n while (s <= t && ISSPACE(*t)) t--;\n t++;\n if (i_mm->t->real != (size_t)(t - s) && (i_mm->t->flag & MM_FIXED)) {\n\tmm_unlock(i_mm);\n\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n }\n i_mm->t->real = t - s;\n if (t < e) {\n\t((char *)i_mm->t->addr)[i_mm->t->real] = '\\0';\n\tmm_unlock(i_mm);\n\treturn str;\n }\n mm_unlock(i_mm);\n return Qnil;\n}\n\nstatic VALUE\nmm_strip_bang(str)\n VALUE str;\n{\n VALUE l = mm_lstrip_bang(str);\n VALUE r = mm_rstrip_bang(str);\n\n if (NIL_P(l) && NIL_P(r)) return Qnil;\n return str;\n}\n\n#endif\n\n#define MmapStr(b, recycle)\t\t\t\t\t\t \\\ndo {\t\t\t\t\t\t\t\t\t \\\n recycle = 0;\t\t\t\t\t\t\t \\\n if (TYPE(b) == T_DATA && RDATA(b)->dfree == (RUBY_DATA_FUNC)mm_free) { \\\n\trecycle = 1;\t\t\t\t\t\t\t \\\n\tb = mm_str(b, MM_ORIGIN);\t\t\t\t\t \\\n }\t\t\t\t\t\t\t\t\t \\\n else {\t\t\t\t\t\t\t\t \\\n\tb = rb_str_to_str(b);\t\t\t\t\t\t \\\n }\t\t\t\t\t\t\t\t\t \\\n} while (0);\n \n \nstatic VALUE\nmm_cmp(a, b)\n VALUE a, b;\n{\n int result;\n int recycle = 0;\n\n a = mm_str(a, MM_ORIGIN);\n MmapStr(b, recycle);\n result = rb_str_cmp(a, b);\n rb_gc_force_recycle(a);\n if (recycle) rb_gc_force_recycle(b);\n return INT2FIX(result);\n}\n\n#if HAVE_RB_STR_CASECMP\n\nstatic VALUE\nmm_casecmp(a, b)\n VALUE a, b;\n{\n VALUE result;\n int recycle = 0;\n\n a = mm_str(a, MM_ORIGIN);\n MmapStr(b, recycle);\n result = rb_funcall2(a, rb_intern(\"casecmp\"), 1, &b);\n rb_gc_force_recycle(a);\n if (recycle) rb_gc_force_recycle(b);\n return result;\n}\n\n#endif\n\nstatic VALUE\nmm_equal(a, b)\n VALUE a, b;\n{\n VALUE result;\n mm_ipc *i_mm, *u_mm;\n\n if (a == b) return Qtrue;\n if (TYPE(b) != T_DATA || RDATA(b)->dfree != (RUBY_DATA_FUNC)mm_free)\n\treturn Qfalse;\n\n GetMmap(a, i_mm, 0);\n GetMmap(b, u_mm, 0);\n if (i_mm->t->real != u_mm->t->real)\n return Qfalse;\n a = mm_str(a, MM_ORIGIN);\n b = mm_str(b, MM_ORIGIN);\n result = rb_funcall2(a, rb_intern(\"==\"), 1, &b);\n rb_gc_force_recycle(a);\n rb_gc_force_recycle(b);\n return result;\n}\n\nstatic VALUE\nmm_eql(a, b)\n VALUE a, b;\n{\n VALUE result;\n mm_ipc *i_mm, *u_mm;\n \n if (a == b) return Qtrue;\n if (TYPE(b) != T_DATA || RDATA(b)->dfree != (RUBY_DATA_FUNC)mm_free)\n\treturn Qfalse;\n\n GetMmap(a, i_mm, 0);\n GetMmap(b, u_mm, 0);\n if (i_mm->t->real != u_mm->t->real)\n return Qfalse;\n a = mm_str(a, MM_ORIGIN);\n b = mm_str(b, MM_ORIGIN);\n result = rb_funcall2(a, rb_intern(\"eql?\"), 1, &b);\n rb_gc_force_recycle(a);\n rb_gc_force_recycle(b);\n return result;\n}\n\nstatic VALUE\nmm_hash(a)\n VALUE a;\n{\n VALUE b;\n int res;\n\n b = mm_str(a, MM_ORIGIN);\n res = rb_str_hash(b);\n rb_gc_force_recycle(b);\n return INT2FIX(res);\n}\n\nstatic VALUE\nmm_size(a)\n VALUE a;\n{\n mm_ipc *i_mm;\n\n GetMmap(a, i_mm, 0);\n return UINT2NUM(i_mm->t->real);\n}\n\nstatic VALUE\nmm_empty(a)\n VALUE a;\n{\n mm_ipc *i_mm;\n\n GetMmap(a, i_mm, 0);\n if (i_mm->t->real == 0) return Qtrue;\n return Qfalse;\n}\n\nstatic VALUE\nmm_protect_bang(t)\n VALUE *t;\n{\n return rb_funcall2(t[0], (ID)t[1], (int)t[2], (VALUE *)t[3]);\n}\n\nstatic VALUE\nmm_recycle(str)\n VALUE str;\n{\n rb_gc_force_recycle(str);\n return str;\n}\n\nstatic VALUE\nmm_i_bang(bang_st)\n mm_bang *bang_st;\n{\n VALUE str, res;\n mm_ipc *i_mm;\n \n str = mm_str(bang_st->obj, bang_st->flag);\n if (bang_st->flag & MM_PROTECT) {\n\tVALUE tmp[4];\n\ttmp[0] = str;\n\ttmp[1] = (VALUE)bang_st->id;\n\ttmp[2] = (VALUE)bang_st->argc;\n\ttmp[3] = (VALUE)bang_st->argv;\n\tres = rb_ensure(mm_protect_bang, (VALUE)tmp, mm_recycle, str);\n }\n else {\n\tres = rb_funcall2(str, bang_st->id, bang_st->argc, bang_st->argv);\n\trb_gc_force_recycle(str);\n }\n if (res != Qnil) {\n\tGetMmap(bang_st->obj, i_mm, 0);\n\ti_mm->t->real = RSTRING(str)->len;\n }\n return res;\n}\n\n\nstatic VALUE\nmm_bang_i(obj, flag, id, argc, argv)\n VALUE obj, *argv;\n int flag, id, argc;\n{\n VALUE res;\n mm_ipc *i_mm;\n mm_bang bang_st;\n\n GetMmap(obj, i_mm, 0);\n if ((flag & MM_CHANGE) && (i_mm->t->flag & MM_FIXED)) {\n\trb_raise(rb_eTypeError, \"try to change the size of a fixed map\");\n }\n bang_st.obj = obj;\n bang_st.flag = flag;\n bang_st.id = id;\n bang_st.argc = argc;\n bang_st.argv = argv;\n if (i_mm->t->flag & MM_IPC) {\n\tmm_lock(i_mm, Qtrue);\n\tres = rb_ensure(mm_i_bang, (VALUE)&bang_st, mm_vunlock, obj);\n }\n else {\n\tres = mm_i_bang(&bang_st);\n }\n if (res == Qnil) return res;\n return (flag & MM_ORIGIN)?res:obj;\n\n}\n\n#if HAVE_RB_STR_MATCH\n\nstatic VALUE\nmm_match_m(a, b)\n VALUE a, b;\n{\n return mm_bang_i(a, MM_ORIGIN, rb_intern(\"match\"), 1, &b);\n}\n\n#endif\n\nstatic VALUE\nmm_upcase_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_MODIFY, rb_intern(\"upcase!\"), 0, 0);\n}\n\nstatic VALUE\nmm_downcase_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_MODIFY, rb_intern(\"downcase!\"), 0, 0);\n}\n\nstatic VALUE\nmm_capitalize_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_MODIFY, rb_intern(\"capitalize!\"), 0, 0);\n}\n\nstatic VALUE\nmm_swapcase_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_MODIFY, rb_intern(\"swapcase!\"), 0, 0);\n}\n \nstatic VALUE\nmm_reverse_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_MODIFY, rb_intern(\"reverse!\"), 0, 0);\n}\n\nstatic VALUE\nmm_chop_bang(a)\n VALUE a;\n{\n return mm_bang_i(a, MM_CHANGE, rb_intern(\"chop!\"), 0, 0);\n}\n\nstatic VALUE\nmm_inspect(a)\n VALUE a;\n{\n return rb_any_to_s(a);\n}\n\nstatic VALUE\nmm_chomp_bang(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_CHANGE | MM_PROTECT, rb_intern(\"chomp!\"), argc, argv);\n}\n\nstatic VALUE\nmm_delete_bang(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_CHANGE | MM_PROTECT, rb_intern(\"delete!\"), argc, argv);\n}\n\nstatic VALUE\nmm_squeeze_bang(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_CHANGE | MM_PROTECT, rb_intern(\"squeeze!\"), argc, argv);\n}\n\nstatic VALUE\nmm_tr_bang(obj, a, b)\n VALUE obj, a, b;\n{\n VALUE tmp[2];\n tmp[0] = a;\n tmp[1] = b;\n return mm_bang_i(obj, MM_MODIFY | MM_PROTECT, rb_intern(\"tr!\"), 2, tmp);\n}\n\nstatic VALUE\nmm_tr_s_bang(obj, a, b)\n VALUE obj, a, b;\n{\n VALUE tmp[2];\n tmp[0] = a;\n tmp[1] = b;\n return mm_bang_i(obj, MM_CHANGE | MM_PROTECT, rb_intern(\"tr_s!\"), 2, tmp);\n}\n\nstatic VALUE\nmm_crypt(a, b)\n VALUE a, b;\n{\n return mm_bang_i(a, MM_ORIGIN, rb_intern(\"crypt\"), 1, &b);\n}\n\nstatic VALUE\nmm_include(a, b)\n VALUE a, b;\n{\n return mm_bang_i(a, MM_ORIGIN, rb_intern(\"include?\"), 1, &b);\n}\n\nstatic VALUE\nmm_index(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"index\"), argc, argv);\n}\n\nstatic VALUE\nmm_rindex(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"rindex\"), argc, argv);\n}\n\nstatic VALUE\nmm_aref_m(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"[]\"), argc, argv);\n}\n\nstatic VALUE\nmm_sum(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"sum\"), argc, argv);\n}\n\nstatic VALUE\nmm_split(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"split\"), argc, argv);\n}\n\nstatic VALUE\nmm_count(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n return mm_bang_i(obj, MM_ORIGIN, rb_intern(\"count\"), argc, argv);\n}\n\nstatic VALUE\nmm_internal_each(tmp)\n VALUE *tmp;\n{\n return rb_funcall2(tmp[0], (ID)tmp[1], (int)tmp[2], (VALUE *)tmp[3]);\n}\n\nstatic VALUE\nmm_scan(obj, a)\n VALUE obj, a;\n{\n VALUE tmp[4];\n\n if (!rb_block_given_p()) {\n\treturn rb_funcall(mm_str(obj, MM_ORIGIN), rb_intern(\"scan\"), 1, a);\n }\n tmp[0] = mm_str(obj, MM_ORIGIN);\n tmp[1] = (VALUE)rb_intern(\"scan\");\n tmp[2] = (VALUE)1;\n tmp[3] = (VALUE)&a;\n rb_iterate(mm_internal_each, (VALUE)tmp, rb_yield, 0);\n return obj;\n}\n\nstatic VALUE\nmm_each_line(argc, argv, obj)\n int argc;\n VALUE obj, *argv;\n{\n VALUE tmp[4];\n\n tmp[0] = mm_str(obj, MM_ORIGIN);\n tmp[1] = (VALUE)rb_intern(\"each_line\");\n tmp[2] = (VALUE)argc;\n tmp[3] = (VALUE)argv;\n rb_iterate(mm_internal_each, (VALUE)tmp, rb_yield, 0);\n return obj;\n}\n\nstatic VALUE\nmm_each_byte(argc, argv, obj)\n int argc;\n VALUE obj, *argv;\n{\n VALUE tmp[4];\n\n tmp[0] = mm_str(obj, MM_ORIGIN);\n tmp[1] = (VALUE)rb_intern(\"each_byte\");\n tmp[2] = (VALUE)argc;\n tmp[3] = (VALUE)argv;\n rb_iterate(mm_internal_each, (VALUE)tmp, rb_yield, 0);\n return obj;\n}\n\nstatic VALUE\nmm_undefined(argc, argv, obj)\n int argc;\n VALUE *argv, obj;\n{\n rb_raise(rb_eNameError, \"not yet implemented\");\n}\n\nstatic VALUE\nmm_mlockall(obj, flag)\n VALUE obj, flag;\n{\n if (mlockall(NUM2INT(flag)) == -1) {\n\trb_raise(rb_eArgError, \"mlockall(%d)\", errno);\n }\n return Qnil;\n}\n\nstatic VALUE\nmm_munlockall(obj)\n VALUE obj;\n{\n if (munlockall() == -1) {\n\trb_raise(rb_eArgError, \"munlockall(%d)\", errno);\n }\n return Qnil;\n}\n\nstatic VALUE\nmm_mlock(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n\n Data_Get_Struct(obj, mm_ipc, i_mm);\n if (i_mm->t->flag & MM_LOCK) {\n\treturn obj;\n }\n if (i_mm->t->flag & MM_ANON) {\n\trb_raise(rb_eArgError, \"mlock(anonymous)\");\n }\n if (mlock(i_mm->t->addr, i_mm->t->len) == -1) {\n\trb_raise(rb_eArgError, \"mlock(%d)\", errno);\n }\n i_mm->t->flag |= MM_LOCK;\n return obj;\n}\n\nstatic VALUE\nmm_munlock(obj)\n VALUE obj;\n{\n mm_ipc *i_mm;\n\n Data_Get_Struct(obj, mm_ipc, i_mm);\n if (!(i_mm->t->flag & MM_LOCK)) {\n\treturn obj;\n }\n if (munlock(i_mm->t->addr, i_mm->t->len) == -1) {\n\trb_raise(rb_eArgError, \"munlock(%d)\", errno);\n }\n i_mm->t->flag &= ~MM_LOCK;\n return obj;\n}\n\nvoid\nInit_mmap()\n{\n if (rb_const_defined_at(rb_cObject, rb_intern(\"Mmap\"))) {\n\trb_raise(rb_eNameError, \"class already defined\");\n }\n mm_cMap = rb_define_class(\"Mmap\", rb_cObject);\n rb_define_const(mm_cMap, \"MS_SYNC\", INT2FIX(MS_SYNC));\n rb_define_const(mm_cMap, \"MS_ASYNC\", INT2FIX(MS_ASYNC));\n rb_define_const(mm_cMap, \"MS_INVALIDATE\", INT2FIX(MS_INVALIDATE));\n rb_define_const(mm_cMap, \"PROT_READ\", INT2FIX(PROT_READ));\n rb_define_const(mm_cMap, \"PROT_WRITE\", INT2FIX(PROT_WRITE));\n rb_define_const(mm_cMap, \"PROT_EXEC\", INT2FIX(PROT_EXEC));\n rb_define_const(mm_cMap, \"PROT_NONE\", INT2FIX(PROT_NONE));\n rb_define_const(mm_cMap, \"MAP_SHARED\", INT2FIX(MAP_SHARED));\n rb_define_const(mm_cMap, \"MAP_PRIVATE\", INT2FIX(MAP_PRIVATE));\n#ifdef MADV_NORMAL\n rb_define_const(mm_cMap, \"MADV_NORMAL\", INT2FIX(MADV_NORMAL));\n rb_define_const(mm_cMap, \"MADV_RANDOM\", INT2FIX(MADV_RANDOM));\n rb_define_const(mm_cMap, \"MADV_SEQUENTIAL\", INT2FIX(MADV_SEQUENTIAL));\n rb_define_const(mm_cMap, \"MADV_WILLNEED\", INT2FIX(MADV_WILLNEED));\n rb_define_const(mm_cMap, \"MADV_DONTNEED\", INT2FIX(MADV_DONTNEED));\n#endif\n#ifdef MAP_DENYWRITE\n rb_define_const(mm_cMap, \"MAP_DENYWRITE\", INT2FIX(MAP_DENYWRITE));\n#endif\n#ifdef MAP_EXECUTABLE\n rb_define_const(mm_cMap, \"MAP_EXECUTABLE\", INT2FIX(MAP_EXECUTABLE));\n#endif\n#ifdef MAP_NORESERVE\n rb_define_const(mm_cMap, \"MAP_NORESERVE\", INT2FIX(MAP_NORESERVE));\n#endif\n#ifdef MAP_LOCKED\n rb_define_const(mm_cMap, \"MAP_LOCKED\", INT2FIX(MAP_LOCKED));\n#endif\n#ifdef MAP_GROWSDOWN\n rb_define_const(mm_cMap, \"MAP_GROWSDOWN\", INT2FIX(MAP_GROWSDOWN));\n#endif\n#ifdef MAP_ANON\n rb_define_const(mm_cMap, \"MAP_ANON\", INT2FIX(MAP_ANON));\n#endif\n#ifdef MAP_ANONYMOUS\n rb_define_const(mm_cMap, \"MAP_ANONYMOUS\", INT2FIX(MAP_ANONYMOUS));\n#endif\n#ifdef MAP_NOSYNC\n rb_define_const(mm_cMap, \"MAP_NOSYNC\", INT2FIX(MAP_NOSYNC));\n#endif\n#ifdef MCL_CURRENT\n rb_define_const(mm_cMap, \"MCL_CURRENT\", INT2FIX(MCL_CURRENT));\n rb_define_const(mm_cMap, \"MCL_FUTURE\", INT2FIX(MCL_FUTURE));\n#endif\n rb_include_module(mm_cMap, rb_mComparable);\n rb_include_module(mm_cMap, rb_mEnumerable);\n\n#if HAVE_RB_DEFINE_ALLOC_FUNC\n rb_define_alloc_func(mm_cMap, mm_s_alloc);\n#else\n rb_define_singleton_method(mm_cMap, \"allocate\", mm_s_alloc, 0);\n#endif\n rb_define_singleton_method(mm_cMap, \"new\", mm_s_new, -1);\n rb_define_singleton_method(mm_cMap, \"mlockall\", mm_mlockall, 1);\n rb_define_singleton_method(mm_cMap, \"lockall\", mm_mlockall, 1);\n rb_define_singleton_method(mm_cMap, \"munlockall\", mm_munlockall, 0);\n rb_define_singleton_method(mm_cMap, \"unlockall\", mm_munlockall, 0);\n\n rb_define_method(mm_cMap, \"initialize\", mm_init, -1);\n\n rb_define_method(mm_cMap, \"unmap\", mm_unmap, 0);\n rb_define_method(mm_cMap, \"munmap\", mm_unmap, 0);\n rb_define_method(mm_cMap, \"msync\", mm_msync, -1);\n rb_define_method(mm_cMap, \"sync\", mm_msync, -1);\n rb_define_method(mm_cMap, \"flush\", mm_msync, -1);\n rb_define_method(mm_cMap, \"mprotect\", mm_mprotect, 1);\n rb_define_method(mm_cMap, \"protect\", mm_mprotect, 1);\n#ifdef MADV_NORMAL\n rb_define_method(mm_cMap, \"madvise\", mm_madvise, 1);\n rb_define_method(mm_cMap, \"advise\", mm_madvise, 1);\n#endif\n rb_define_method(mm_cMap, \"mlock\", mm_mlock, 0);\n rb_define_method(mm_cMap, \"lock\", mm_mlock, 0);\n rb_define_method(mm_cMap, \"munlock\", mm_munlock, 0);\n rb_define_method(mm_cMap, \"unlock\", mm_munlock, 0);\n\n rb_define_method(mm_cMap, \"extend\", mm_extend, 1);\n rb_define_method(mm_cMap, \"freeze\", mm_freeze, 0);\n rb_define_method(mm_cMap, \"clone\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"initialize_copy\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"dup\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"<=>\", mm_cmp, 1);\n rb_define_method(mm_cMap, \"==\", mm_equal, 1);\n rb_define_method(mm_cMap, \"===\", mm_equal, 1);\n rb_define_method(mm_cMap, \"eql?\", mm_eql, 1);\n rb_define_method(mm_cMap, \"hash\", mm_hash, 0);\n#if HAVE_RB_STR_CASECMP\n rb_define_method(mm_cMap, \"casecmp\", mm_casecmp, 1);\n#endif\n rb_define_method(mm_cMap, \"+\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"*\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"%\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"[]\", mm_aref_m, -1);\n rb_define_method(mm_cMap, \"[]=\", mm_aset_m, -1);\n#if HAVE_RB_STR_INSERT\n rb_define_method(mm_cMap, \"insert\", mm_insert, 2);\n#endif\n rb_define_method(mm_cMap, \"length\", mm_size, 0);\n rb_define_method(mm_cMap, \"size\", mm_size, 0);\n rb_define_method(mm_cMap, \"empty?\", mm_empty, 0);\n rb_define_method(mm_cMap, \"=~\", mm_match, 1);\n rb_define_method(mm_cMap, \"~\", mm_undefined, -1);\n#if HAVE_RB_STR_MATCH\n rb_define_method(mm_cMap, \"match\", mm_match_m, 1);\n#endif\n rb_define_method(mm_cMap, \"succ\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"succ!\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"next\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"next!\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"upto\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"index\", mm_index, -1);\n rb_define_method(mm_cMap, \"rindex\", mm_rindex, -1);\n rb_define_method(mm_cMap, \"replace\", mm_undefined, -1);\n\n rb_define_method(mm_cMap, \"to_i\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"to_f\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"to_sym\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"to_s\", rb_any_to_s, 0);\n rb_define_method(mm_cMap, \"to_str\", mm_to_str, 0);\n rb_define_method(mm_cMap, \"inspect\", mm_inspect, 0);\n rb_define_method(mm_cMap, \"dump\", mm_undefined, -1);\n\n rb_define_method(mm_cMap, \"upcase\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"downcase\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"capitalize\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"swapcase\", mm_undefined, -1);\n\n rb_define_method(mm_cMap, \"upcase!\", mm_upcase_bang, 0);\n rb_define_method(mm_cMap, \"downcase!\", mm_downcase_bang, 0);\n rb_define_method(mm_cMap, \"capitalize!\", mm_capitalize_bang, 0);\n rb_define_method(mm_cMap, \"swapcase!\", mm_swapcase_bang, 0);\n\n rb_define_method(mm_cMap, \"hex\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"oct\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"split\", mm_split, -1);\n rb_define_method(mm_cMap, \"reverse\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"reverse!\", mm_reverse_bang, 0);\n rb_define_method(mm_cMap, \"concat\", mm_concat, 1);\n rb_define_method(mm_cMap, \"<<\", mm_concat, 1);\n rb_define_method(mm_cMap, \"crypt\", mm_crypt, 1);\n rb_define_method(mm_cMap, \"intern\", mm_undefined, -1);\n\n rb_define_method(mm_cMap, \"include?\", mm_include, 1);\n\n rb_define_method(mm_cMap, \"scan\", mm_scan, 1);\n\n rb_define_method(mm_cMap, \"ljust\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"rjust\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"center\", mm_undefined, -1);\n\n rb_define_method(mm_cMap, \"sub\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"gsub\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"chop\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"chomp\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"strip\", mm_undefined, -1);\n#if HAVE_RB_STR_LSTRIP\n rb_define_method(mm_cMap, \"lstrip\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"rstrip\", mm_undefined, -1);\n#endif\n\n rb_define_method(mm_cMap, \"sub!\", mm_sub_bang, -1);\n rb_define_method(mm_cMap, \"gsub!\", mm_gsub_bang, -1);\n rb_define_method(mm_cMap, \"strip!\", mm_strip_bang, 0);\n#if HAVE_RB_STR_LSTRIP\n rb_define_method(mm_cMap, \"lstrip!\", mm_lstrip_bang, 0);\n rb_define_method(mm_cMap, \"rstrip!\", mm_rstrip_bang, 0);\n#endif\n rb_define_method(mm_cMap, \"chop!\", mm_chop_bang, 0);\n rb_define_method(mm_cMap, \"chomp!\", mm_chomp_bang, -1);\n\n rb_define_method(mm_cMap, \"tr\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"tr_s\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"delete\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"squeeze\", mm_undefined, -1);\n rb_define_method(mm_cMap, \"count\", mm_count, -1);\n\n rb_define_method(mm_cMap, \"tr!\", mm_tr_bang, 2);\n rb_define_method(mm_cMap, \"tr_s!\", mm_tr_s_bang, 2);\n rb_define_method(mm_cMap, \"delete!\", mm_delete_bang, -1);\n rb_define_method(mm_cMap, \"squeeze!\", mm_squeeze_bang, -1);\n\n rb_define_method(mm_cMap, \"each_line\", mm_each_line, -1);\n rb_define_method(mm_cMap, \"each\", mm_each_line, -1);\n rb_define_method(mm_cMap, \"each_byte\", mm_each_byte, -1);\n\n rb_define_method(mm_cMap, \"sum\", mm_sum, -1);\n\n rb_define_method(mm_cMap, \"slice\", mm_aref_m, -1);\n rb_define_method(mm_cMap, \"slice!\", mm_slice_bang, -1);\n rb_define_method(mm_cMap, \"semlock\", mm_semlock, -1);\n rb_define_method(mm_cMap, \"ipc_key\", mm_ipc_key, 0);\n}\n"> expected but was ><"\n}\n;)0 ,yek_cpi_mm ,\"yek_cpi\" ,paMc_mm(dohtem_enifed_br \n;)1- ,kcolmes_mm ,\"kcolmes\" ,paMc_mm(dohtem_enifed_br \n;)1- ,gnab_ecils_mm ,\"!ecils\" ,paMc_mm(dohtem_enifed_br \n;)1- ,m_fera_mm ,\"ecils\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,mus_mm ,\"mus\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,etyb_hcae_mm ,\"etyb_hcae\" ,paMc_mm(dohtem_enifed_br \n;)1- ,enil_hcae_mm ,\"hcae\" ,paMc_mm(dohtem_enifed_br \n;)1- ,enil_hcae_mm ,\"enil_hcae\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,gnab_ezeeuqs_mm ,\"!ezeeuqs\" ,paMc_mm(dohtem_enifed_br \n;)1- ,gnab_eteled_mm ,\"!eteled\" ,paMc_mm(dohtem_enifed_br \n;)2 ,gnab_s_rt_mm ,\"!s_rt\" ,paMc_mm(dohtem_enifed_br \n;)2 ,gnab_rt_mm ,\"!rt\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,tnuoc_mm ,\"tnuoc\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"ezeeuqs\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"eteled\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"s_rt\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"rt\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,gnab_pmohc_mm ,\"!pmohc\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_pohc_mm ,\"!pohc\" ,paMc_mm(dohtem_enifed_br \nfidne#\n;)0 ,gnab_pirtsr_mm ,\"!pirtsr\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_pirtsl_mm ,\"!pirtsl\" ,paMc_mm(dohtem_enifed_br \nPIRTSL_RTS_BR_EVAH fi#\n;)0 ,gnab_pirts_mm ,\"!pirts\" ,paMc_mm(dohtem_enifed_br \n;)1- ,gnab_busg_mm ,\"!busg\" ,paMc_mm(dohtem_enifed_br \n;)1- ,gnab_bus_mm ,\"!bus\" ,paMc_mm(dohtem_enifed_br \n\nfidne#\n;)1- ,denifednu_mm ,\"pirtsr\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"pirtsl\" ,paMc_mm(dohtem_enifed_br \nPIRTSL_RTS_BR_EVAH fi#\n;)1- ,denifednu_mm ,\"pirts\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"pmohc\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"pohc\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"busg\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"bus\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,denifednu_mm ,\"retnec\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"tsujr\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"tsujl\" ,paMc_mm(dohtem_enifed_br \n\n;)1 ,nacs_mm ,\"nacs\" ,paMc_mm(dohtem_enifed_br \n\n;)1 ,edulcni_mm ,\"?edulcni\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,denifednu_mm ,\"nretni\" ,paMc_mm(dohtem_enifed_br \n;)1 ,tpyrc_mm ,\"tpyrc\" ,paMc_mm(dohtem_enifed_br \n;)1 ,tacnoc_mm ,\"<<\" ,paMc_mm(dohtem_enifed_br \n;)1 ,tacnoc_mm ,\"tacnoc\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_esrever_mm ,\"!esrever\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"esrever\" ,paMc_mm(dohtem_enifed_br \n;)1- ,tilps_mm ,\"tilps\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"tco\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"xeh\" ,paMc_mm(dohtem_enifed_br \n\n;)0 ,gnab_esacpaws_mm ,\"!esacpaws\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_ezilatipac_mm ,\"!ezilatipac\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_esacnwod_mm ,\"!esacnwod\" ,paMc_mm(dohtem_enifed_br \n;)0 ,gnab_esacpu_mm ,\"!esacpu\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,denifednu_mm ,\"esacpaws\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"ezilatipac\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"esacnwod\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"esacpu\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,denifednu_mm ,\"pmud\" ,paMc_mm(dohtem_enifed_br \n;)0 ,tcepsni_mm ,\"tcepsni\" ,paMc_mm(dohtem_enifed_br \n;)0 ,rts_ot_mm ,\"rts_ot\" ,paMc_mm(dohtem_enifed_br \n;)0 ,s_ot_yna_br ,\"s_ot\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"mys_ot\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"f_ot\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"i_ot\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,denifednu_mm ,\"ecalper\" ,paMc_mm(dohtem_enifed_br \n;)1- ,xednir_mm ,\"xednir\" ,paMc_mm(dohtem_enifed_br \n;)1- ,xedni_mm ,\"xedni\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"otpu\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"!txen\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"txen\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"!ccus\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"ccus\" ,paMc_mm(dohtem_enifed_br \nfidne#\n;)1 ,m_hctam_mm ,\"hctam\" ,paMc_mm(dohtem_enifed_br \nHCTAM_RTS_BR_EVAH fi#\n;)1- ,denifednu_mm ,\"~\" ,paMc_mm(dohtem_enifed_br \n;)1 ,hctam_mm ,\"~=\" ,paMc_mm(dohtem_enifed_br \n;)0 ,ytpme_mm ,\"?ytpme\" ,paMc_mm(dohtem_enifed_br \n;)0 ,ezis_mm ,\"ezis\" ,paMc_mm(dohtem_enifed_br \n;)0 ,ezis_mm ,\"htgnel\" ,paMc_mm(dohtem_enifed_br \nfidne#\n;)2 ,tresni_mm ,\"tresni\" ,paMc_mm(dohtem_enifed_br \nTRESNI_RTS_BR_EVAH fi#\n;)1- ,m_tesa_mm ,\"=][\" ,paMc_mm(dohtem_enifed_br \n;)1- ,m_fera_mm ,\"][\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"%\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"*\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"+\" ,paMc_mm(dohtem_enifed_br \nfidne#\n;)1 ,pmcesac_mm ,\"pmcesac\" ,paMc_mm(dohtem_enifed_br \nPMCESAC_RTS_BR_EVAH fi#\n;)0 ,hsah_mm ,\"hsah\" ,paMc_mm(dohtem_enifed_br \n;)1 ,lqe_mm ,\"?lqe\" ,paMc_mm(dohtem_enifed_br \n;)1 ,lauqe_mm ,\"===\" ,paMc_mm(dohtem_enifed_br \n;)1 ,lauqe_mm ,\"==\" ,paMc_mm(dohtem_enifed_br \n;)1 ,pmc_mm ,\">=<\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"pud\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"ypoc_ezilaitini\" ,paMc_mm(dohtem_enifed_br \n;)1- ,denifednu_mm ,\"enolc\" ,paMc_mm(dohtem_enifed_br \n;)0 ,ezeerf_mm ,\"ezeerf\" ,paMc_mm(dohtem_enifed_br \n;)1 ,dnetxe_mm ,\"dnetxe\" ,paMc_mm(dohtem_enifed_br \n\n;)0 ,kcolnum_mm ,\"kcolnu\" ,paMc_mm(dohtem_enifed_br \n;)0 ,kcolnum_mm ,\"kcolnum\" ,paMc_mm(dohtem_enifed_br \n;)0 ,kcolm_mm ,\"kcol\" ,paMc_mm(dohtem_enifed_br \n;)0 ,kcolm_mm ,\"kcolm\" ,paMc_mm(dohtem_enifed_br \nfidne#\n;)1 ,esivdam_mm ,\"esivda\" ,paMc_mm(dohtem_enifed_br \n;)1 ,esivdam_mm ,\"esivdam\" ,paMc_mm(dohtem_enifed_br \nLAMRON_VDAM fedfi#\n;)1 ,tcetorpm_mm ,\"tcetorp\" ,paMc_mm(dohtem_enifed_br \n;)1 ,tcetorpm_mm ,\"tcetorpm\" ,paMc_mm(dohtem_enifed_br \n;)1- ,cnysm_mm ,\"hsulf\" ,paMc_mm(dohtem_enifed_br \n;)1- ,cnysm_mm ,\"cnys\" ,paMc_mm(dohtem_enifed_br \n;)1- ,cnysm_mm ,\"cnysm\" ,paMc_mm(dohtem_enifed_br \n;)0 ,pamnu_mm ,\"pamnum\" ,paMc_mm(dohtem_enifed_br \n;)0 ,pamnu_mm ,\"pamnu\" ,paMc_mm(dohtem_enifed_br \n\n;)1- ,tini_mm ,\"ezilaitini\" ,paMc_mm(dohtem_enifed_br \n\n;)0 ,llakcolnum_mm ,\"llakcolnu\" ,paMc_mm(dohtem_notelgnis_enifed_br \n;)0 ,llakcolnum_mm ,\"llakcolnum\" ,paMc_mm(dohtem_notelgnis_enifed_br \n;)1 ,llakcolm_mm ,\"llakcol\" ,paMc_mm(dohtem_notelgnis_enifed_br \n;)1 ,llakcolm_mm ,\"llakcolm\" ,paMc_mm(dohtem_notelgnis_enifed_br \n;)1- ,wen_s_mm ,\"wen\" ,paMc_mm(dohtem_notelgnis_enifed_br \nfidne#\n;)0 ,colla_s_mm ,\"etacolla\" ,paMc_mm(dohtem_notelgnis_enifed_br \nesle#\n;)colla_s_mm ,paMc_mm(cnuf_colla_enifed_br \nCNUF_COLLA_ENIFED_BR_EVAH fi#\n\n;)elbaremunEm_br ,paMc_mm(eludom_edulcni_br \n;)elbarapmoCm_br ,paMc_mm(eludom_edulcni_br \nfidne#\n;))ERUTUF_LCM(XIF2TNI ,\"ERUTUF_LCM\" ,paMc_mm(tsnoc_enifed_br \n;))TNERRUC_LCM(XIF2TNI ,\"TNERRUC_LCM\" ,paMc_mm(tsnoc_enifed_br \nTNERRUC_LCM fedfi#\nfidne#\n;))CNYSON_PAM(XIF2TNI ,\"CNYSON_PAM\" ,paMc_mm(tsnoc_enifed_br \nCNYSON_PAM fedfi#\nfidne#\n;))SUOMYNONA_PAM(XIF2TNI ,\"SUOMYNONA_PAM\" ,paMc_mm(tsnoc_enifed_br \nSUOMYNONA_PAM fedfi#\nfidne#\n;))NONA_PAM(XIF2TNI ,\"NONA_PAM\" ,paMc_mm(tsnoc_enifed_br \nNONA_PAM fedfi#\nfidne#\n;))NWODSWORG_PAM(XIF2TNI ,\"NWODSWORG_PAM\" ,paMc_mm(tsnoc_enifed_br \nNWODSWORG_PAM fedfi#\nfidne#\n;))DEKCOL_PAM(XIF2TNI ,\"DEKCOL_PAM\" ,paMc_mm(tsnoc_enifed_br \nDEKCOL_PAM fedfi#\nfidne#\n;))EVRESERON_PAM(XIF2TNI ,\"EVRESERON_PAM\" ,paMc_mm(tsnoc_enifed_br \nEVRESERON_PAM fedfi#\nfidne#\n;))ELBATUCEXE_PAM(XIF2TNI ,\"ELBATUCEXE_PAM\" ,paMc_mm(tsnoc_enifed_br \nELBATUCEXE_PAM fedfi#\nfidne#\n;))ETIRWYNED_PAM(XIF2TNI ,\"ETIRWYNED_PAM\" ,paMc_mm(tsnoc_enifed_br \nETIRWYNED_PAM fedfi#\nfidne#\n;))DEENTNOD_VDAM(XIF2TNI ,\"DEENTNOD_VDAM\" ,paMc_mm(tsnoc_enifed_br \n;))DEENLLIW_VDAM(XIF2TNI ,\"DEENLLIW_VDAM\" ,paMc_mm(tsnoc_enifed_br \n;))LAITNEUQES_VDAM(XIF2TNI ,\"LAITNEUQES_VDAM\" ,paMc_mm(tsnoc_enifed_br \n;))MODNAR_VDAM(XIF2TNI ,\"MODNAR_VDAM\" ,paMc_mm(tsnoc_enifed_br \n;))LAMRON_VDAM(XIF2TNI ,\"LAMRON_VDAM\" ,paMc_mm(tsnoc_enifed_br \nLAMRON_VDAM fedfi#\n;))ETAVIRP_PAM(XIF2TNI ,\"ETAVIRP_PAM\" ,paMc_mm(tsnoc_enifed_br \n;))DERAHS_PAM(XIF2TNI ,\"DERAHS_PAM\" ,paMc_mm(tsnoc_enifed_br \n;))ENON_TORP(XIF2TNI ,\"ENON_TORP\" ,paMc_mm(tsnoc_enifed_br \n;))CEXE_TORP(XIF2TNI ,\"CEXE_TORP\" ,paMc_mm(tsnoc_enifed_br \n;))ETIRW_TORP(XIF2TNI ,\"ETIRW_TORP\" ,paMc_mm(tsnoc_enifed_br \n;))DAER_TORP(XIF2TNI ,\"DAER_TORP\" ,paMc_mm(tsnoc_enifed_br \n;))ETADILAVNI_SM(XIF2TNI ,\"ETADILAVNI_SM\" ,paMc_mm(tsnoc_enifed_br \n;))CNYSA_SM(XIF2TNI ,\"CNYSA_SM\" ,paMc_mm(tsnoc_enifed_br \n;))CNYS_SM(XIF2TNI ,\"CNYS_SM\" ,paMc_mm(tsnoc_enifed_br \n;)tcejbOc_br ,\"pamM\"(ssalc_enifed_br = paMc_mm \n} \n;)\"denifed ydaerla ssalc\" ,rorrEemaNe_br(esiar_br\t\n{ )))\"pamM\"(nretni_br ,tcejbOc_br(ta_denifed_tsnoc_br( fi \n{\n)(pamm_tinI\ndiov\n\n}\n;jbo nruter \n;KCOL_MM~ =& galf>-t>-mm_i \n} \n;)onrre ,\")d%(kcolnum\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )nel>-t>-mm_i ,rdda>-t>-mm_i(kcolnum( fi \n} \n;jbo nruter\t\n{ ))KCOL_MM & galf>-t>-mm_i(!( fi \n;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n\n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(kcolnum_mm\nEULAV citats\n\n}\n;jbo nruter \n;KCOL_MM =| galf>-t>-mm_i \n} \n;)onrre ,\")d%(kcolm\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )nel>-t>-mm_i ,rdda>-t>-mm_i(kcolm( fi \n} \n;)\")suomynona(kcolm\" ,rorrEgrAe_br(esiar_br\t\n{ )NONA_MM & galf>-t>-mm_i( fi \n} \n;jbo nruter\t\n{ )KCOL_MM & galf>-t>-mm_i( fi \n;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n\n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(kcolm_mm\nEULAV citats\n\n}\n;linQ nruter \n} \n;)onrre ,\")d%(llakcolnum\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )(llakcolnum( fi \n{\n;jbo EULAV \n)jbo(llakcolnum_mm\nEULAV citats\n\n}\n;linQ nruter \n} \n;)onrre ,\")d%(llakcolm\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == ))galf(TNI2MUN(llakcolm( fi \n{\n;galf ,jbo EULAV \n)galf ,jbo(llakcolm_mm\nEULAV citats\n\n}\n;)\"detnemelpmi tey ton\" ,rorrEemaNe_br(esiar_br \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(denifednu_mm\nEULAV citats\n\n}\n;jbo nruter \n;)0 ,dleiy_br ,pmt)EULAV( ,hcae_lanretni_mm(etareti_br \n;vgra)EULAV( = ]3[pmt \n;cgra)EULAV( = ]2[pmt \n;)\"etyb_hcae\"(nretni_br)EULAV( = ]1[pmt \n;)NIGIRO_MM ,jbo(rts_mm = ]0[pmt \n\n;]4[pmt EULAV \n{\n;vgra* ,jbo EULAV \n;cgra tni \n)jbo ,vgra ,cgra(etyb_hcae_mm\nEULAV citats\n\n}\n;jbo nruter \n;)0 ,dleiy_br ,pmt)EULAV( ,hcae_lanretni_mm(etareti_br \n;vgra)EULAV( = ]3[pmt \n;cgra)EULAV( = ]2[pmt \n;)\"enil_hcae\"(nretni_br)EULAV( = ]1[pmt \n;)NIGIRO_MM ,jbo(rts_mm = ]0[pmt \n\n;]4[pmt EULAV \n{\n;vgra* ,jbo EULAV \n;cgra tni \n)jbo ,vgra ,cgra(enil_hcae_mm\nEULAV citats\n\n}\n;jbo nruter \n;)0 ,dleiy_br ,pmt)EULAV( ,hcae_lanretni_mm(etareti_br \n;a&)EULAV( = ]3[pmt \n;1)EULAV( = ]2[pmt \n;)\"nacs\"(nretni_br)EULAV( = ]1[pmt \n;)NIGIRO_MM ,jbo(rts_mm = ]0[pmt \n} \n;)a ,1 ,)\"nacs\"(nretni_br ,)NIGIRO_MM ,jbo(rts_mm(llacnuf_br nruter\t\n{ ))(p_nevig_kcolb_br!( fi \n\n;]4[pmt EULAV \n{\n;a ,jbo EULAV \n)a ,jbo(nacs_mm\nEULAV citats\n\n}\n;)]3[pmt)* EULAV( ,]2[pmt)tni( ,]1[pmt)DI( ,]0[pmt(2llacnuf_br nruter \n{\n;pmt* EULAV \n)pmt(hcae_lanretni_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"tnuoc\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(tnuoc_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"tilps\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(tilps_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"mus\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(mus_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"][\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(m_fera_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"xednir\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(xednir_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"xedni\"(nretni_br ,NIGIRO_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(xedni_mm\nEULAV citats\n\n}\n;)b& ,1 ,)\"?edulcni\"(nretni_br ,NIGIRO_MM ,a(i_gnab_mm nruter \n{\n;b ,a EULAV \n)b ,a(edulcni_mm\nEULAV citats\n\n}\n;)b& ,1 ,)\"tpyrc\"(nretni_br ,NIGIRO_MM ,a(i_gnab_mm nruter \n{\n;b ,a EULAV \n)b ,a(tpyrc_mm\nEULAV citats\n\n}\n;)pmt ,2 ,)\"!s_rt\"(nretni_br ,TCETORP_MM | EGNAHC_MM ,jbo(i_gnab_mm nruter \n;b = ]1[pmt \n;a = ]0[pmt \n;]2[pmt EULAV \n{\n;b ,a ,jbo EULAV \n)b ,a ,jbo(gnab_s_rt_mm\nEULAV citats\n\n}\n;)pmt ,2 ,)\"!rt\"(nretni_br ,TCETORP_MM | YFIDOM_MM ,jbo(i_gnab_mm nruter \n;b = ]1[pmt \n;a = ]0[pmt \n;]2[pmt EULAV \n{\n;b ,a ,jbo EULAV \n)b ,a ,jbo(gnab_rt_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"!ezeeuqs\"(nretni_br ,TCETORP_MM | EGNAHC_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(gnab_ezeeuqs_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"!eteled\"(nretni_br ,TCETORP_MM | EGNAHC_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(gnab_eteled_mm\nEULAV citats\n\n}\n;)vgra ,cgra ,)\"!pmohc\"(nretni_br ,TCETORP_MM | EGNAHC_MM ,jbo(i_gnab_mm nruter \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(gnab_pmohc_mm\nEULAV citats\n\n}\n;)a(s_ot_yna_br nruter \n{\n;a EULAV \n)a(tcepsni_mm\nEULAV citats\n\n}\n;)0 ,0 ,)\"!pohc\"(nretni_br ,EGNAHC_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_pohc_mm\nEULAV citats\n\n}\n;)0 ,0 ,)\"!esrever\"(nretni_br ,YFIDOM_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_esrever_mm\nEULAV citats\n \n}\n;)0 ,0 ,)\"!esacpaws\"(nretni_br ,YFIDOM_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_esacpaws_mm\nEULAV citats\n\n}\n;)0 ,0 ,)\"!ezilatipac\"(nretni_br ,YFIDOM_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_ezilatipac_mm\nEULAV citats\n\n}\n;)0 ,0 ,)\"!esacnwod\"(nretni_br ,YFIDOM_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_esacnwod_mm\nEULAV citats\n\n}\n;)0 ,0 ,)\"!esacpu\"(nretni_br ,YFIDOM_MM ,a(i_gnab_mm nruter \n{\n;a EULAV \n)a(gnab_esacpu_mm\nEULAV citats\n\nfidne#\n\n}\n;)b& ,1 ,)\"hctam\"(nretni_br ,NIGIRO_MM ,a(i_gnab_mm nruter \n{\n;b ,a EULAV \n)b ,a(m_hctam_mm\nEULAV citats\n\nHCTAM_RTS_BR_EVAH fi#\n\n}\n\n;jbo:ser?)NIGIRO_MM & galf( nruter \n;ser nruter )linQ == ser( fi \n} \n;)ts_gnab&(gnab_i_mm = ser\t\n{ esle \n} \n;)jbo ,kcolnuv_mm ,ts_gnab&)EULAV( ,gnab_i_mm(erusne_br = ser\t\n;)eurtQ ,mm_i(kcol_mm\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n;vgra = vgra.ts_gnab \n;cgra = cgra.ts_gnab \n;di = di.ts_gnab \n;galf = galf.ts_gnab \n;jbo = jbo.ts_gnab \n} \n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\n{ ))DEXIF_MM & galf>-t>-mm_i( && )EGNAHC_MM & galf(( fi \n;)0 ,mm_i ,jbo(pamMteG \n\n;ts_gnab gnab_mm \n;mm_i* cpi_mm \n;ser EULAV \n{\n;cgra ,di ,galf tni \n;vgra* ,jbo EULAV \n)vgra ,cgra ,di ,galf ,jbo(i_gnab_mm\nEULAV citats\n\n\n}\n;ser nruter \n} \n;nel>-)rts(GNIRTSR = laer>-t>-mm_i\t\n;)0 ,mm_i ,jbo>-ts_gnab(pamMteG\t\n{ )linQ =! ser( fi \n} \n;)rts(elcycer_ecrof_cg_br\t\n;)vgra>-ts_gnab ,cgra>-ts_gnab ,di>-ts_gnab ,rts(2llacnuf_br = ser\t\n{ esle \n} \n;)rts ,elcycer_mm ,pmt)EULAV( ,gnab_tcetorp_mm(erusne_br = ser\t\n;vgra>-ts_gnab)EULAV( = ]3[pmt\t\n;cgra>-ts_gnab)EULAV( = ]2[pmt\t\n;di>-ts_gnab)EULAV( = ]1[pmt\t\n;rts = ]0[pmt\t\n;]4[pmt EULAV\t\n{ )TCETORP_MM & galf>-ts_gnab( fi \n;)galf>-ts_gnab ,jbo>-ts_gnab(rts_mm = rts \n \n;mm_i* cpi_mm \n;ser ,rts EULAV \n{\n;ts_gnab* gnab_mm \n)ts_gnab(gnab_i_mm\nEULAV citats\n\n}\n;rts nruter \n;)rts(elcycer_ecrof_cg_br \n{\n;rts EULAV \n)rts(elcycer_mm\nEULAV citats\n\n}\n;)]3[t)* EULAV( ,]2[t)tni( ,]1[t)DI( ,]0[t(2llacnuf_br nruter \n{\n;t* EULAV \n)t(gnab_tcetorp_mm\nEULAV citats\n\n}\n;eslafQ nruter \n;eurtQ nruter )0 == laer>-t>-mm_i( fi \n;)0 ,mm_i ,a(pamMteG \n\n;mm_i* cpi_mm \n{\n;a EULAV \n)a(ytpme_mm\nEULAV citats\n\n}\n;)laer>-t>-mm_i(MUN2TNIU nruter \n;)0 ,mm_i ,a(pamMteG \n\n;mm_i* cpi_mm \n{\n;a EULAV \n)a(ezis_mm\nEULAV citats\n\n}\n;)ser(XIF2TNI nruter \n;)b(elcycer_ecrof_cg_br \n;)b(hsah_rts_br = ser \n;)NIGIRO_MM ,a(rts_mm = b \n\n;ser tni \n;b EULAV \n{\n;a EULAV \n)a(hsah_mm\nEULAV citats\n\n}\n;tluser nruter \n;)b(elcycer_ecrof_cg_br \n;)a(elcycer_ecrof_cg_br \n;)b& ,1 ,)\"?lqe\"(nretni_br ,a(2llacnuf_br = tluser \n;)NIGIRO_MM ,b(rts_mm = b \n;)NIGIRO_MM ,a(rts_mm = a \n;eslafQ nruter \n)laer>-t>-mm_u =! laer>-t>-mm_i( fi \n;)0 ,mm_u ,b(pamMteG \n;)0 ,mm_i ,a(pamMteG \n\n;eslafQ nruter\t\n)eerf_mm)CNUF_ATAD_YBUR( =! eerfd>-)b(ATADR || ATAD_T =! )b(EPYT( fi \n;eurtQ nruter )b == a( fi \n \n;mm_u* ,mm_i* cpi_mm \n;tluser EULAV \n{\n;b ,a EULAV \n)b ,a(lqe_mm\nEULAV citats\n\n}\n;tluser nruter \n;)b(elcycer_ecrof_cg_br \n;)a(elcycer_ecrof_cg_br \n;)b& ,1 ,)\"==\"(nretni_br ,a(2llacnuf_br = tluser \n;)NIGIRO_MM ,b(rts_mm = b \n;)NIGIRO_MM ,a(rts_mm = a \n;eslafQ nruter \n)laer>-t>-mm_u =! laer>-t>-mm_i( fi \n;)0 ,mm_u ,b(pamMteG \n;)0 ,mm_i ,a(pamMteG \n\n;eslafQ nruter\t\n)eerf_mm)CNUF_ATAD_YBUR( =! eerfd>-)b(ATADR || ATAD_T =! )b(EPYT( fi \n;eurtQ nruter )b == a( fi \n\n;mm_u* ,mm_i* cpi_mm \n;tluser EULAV \n{\n;b ,a EULAV \n)b ,a(lauqe_mm\nEULAV citats\n\nfidne#\n\n}\n;tluser nruter \n;)b(elcycer_ecrof_cg_br )elcycer( fi \n;)a(elcycer_ecrof_cg_br \n;)b& ,1 ,)\"pmcesac\"(nretni_br ,a(2llacnuf_br = tluser \n;)elcycer ,b(rtSpamM \n;)NIGIRO_MM ,a(rts_mm = a \n\n;0 = elcycer tni \n;tluser EULAV \n{\n;b ,a EULAV \n)b ,a(pmcesac_mm\nEULAV citats\n\nPMCESAC_RTS_BR_EVAH fi#\n\n}\n;)tluser(XIF2TNI nruter \n;)b(elcycer_ecrof_cg_br )elcycer( fi \n;)a(elcycer_ecrof_cg_br \n;)b ,a(pmc_rts_br = tluser \n;)elcycer ,b(rtSpamM \n;)NIGIRO_MM ,a(rts_mm = a \n\n;0 = elcycer tni \n;tluser tni \n{\n;b ,a EULAV \n)b ,a(pmc_mm\nEULAV citats\n \n \n;)0( elihw }\n\\ \t\t\t\t\t\t\t\t\t} \n\\ \t\t\t\t\t\t;)b(rts_ot_rts_br = b\t\n\\ \t\t\t\t\t\t\t\t{ esle \n\\ \t\t\t\t\t\t\t\t\t} \n\\ \t\t\t\t\t;)NIGIRO_MM ,b(rts_mm = b\t\n\\ \t\t\t\t\t\t\t;1 = elcycer\t\n\\ { )eerf_mm)CNUF_ATAD_YBUR( == eerfd>-)b(ATADR && ATAD_T == )b(EPYT( fi \n\\ \t\t\t\t\t\t\t;0 = elcycer \n\\ \t\t\t\t\t\t\t\t\t{ od\n\\ \t\t\t\t\t\t)elcycer ,b(rtSpamM enifed#\n\nfidne#\n\n}\n;rts nruter \n;linQ nruter ))r(P_LIN && )l(P_LIN( fi \n\n;)rts(gnab_pirtsr_mm = r EULAV \n;)rts(gnab_pirtsl_mm = l EULAV \n{\n;rts EULAV \n)rts(gnab_pirts_mm\nEULAV citats\n\n}\n;linQ nruter \n;)mm_i(kcolnu_mm \n} \n;rts nruter\t\n;)mm_i(kcolnu_mm\t\n;'0\\' = ]laer>-t>-mm_i[)rdda>-t>-mm_i)* rahc((\t\n{ )e < t( fi \n;s - t = laer>-t>-mm_i \n} \n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\n;)mm_i(kcolnu_mm\t\n{ ))DEXIF_MM & galf>-t>-mm_i( && )s - t()t_ezis( =! laer>-t>-mm_i( fi \n;++t \n;--t ))t*(ECAPSSI && t =< s( elihw \n;--t \n;laer>-t>-mm_i + s = t = e \n;rdda>-t>-mm_i)* rahc( = s \n;)eurtQ ,mm_i(kcol_mm \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;mm_i* cpi_mm \n;e* ,t* ,s* rahc \n{\n;rts EULAV \n)rts(gnab_pirtsr_mm\nEULAV citats\n\n}\n;linQ nruter \n;)mm_i(kcolnu_mm \n} \n;rts nruter\t\n;)mm_i(kcolnu_mm\t\n;'0\\' = ]laer>-t>-mm_i[)rdda>-t>-mm_i)* rahc((\t\n;)laer>-t>-mm_i ,s ,rdda>-t>-mm_i(evommem\t\n { )rdda>-t>-mm_i)* rahc( > s( fi \n;s - t = laer>-t>-mm_i \n} \n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\n;)mm_i(kcolnu_mm\t\n{ ))DEXIF_MM & galf>-t>-mm_i( && )s - t()t_ezis( =! laer>-t>-mm_i( fi \n\n;++s ))s*(ECAPSSI && t < s( elihw \n;laer>-t>-mm_i + s = t = e \n;rdda>-t>-mm_i)* rahc( = s \n;)eurtQ ,mm_i(kcol_mm \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;mm_i* cpi_mm \n;e* ,t* ,s* rahc \n{\n;rts EULAV \n)rts(gnab_pirtsl_mm\nEULAV citats\n\nesle#\n\n}\n;rts nruter \n;)mm_i(kcolnu_mm \n} \n;linQ = rts \n{ esle \n} \n;'0\\' = ]laer>-t>-mm_i[)rdda>-t>-mm_i)* rahc(( \n{ )e < t( fi esle \n} \n;'0\\' = ]laer>-t>-mm_i[)rdda>-t>-mm_i)* rahc(( \n;)laer>-t>-mm_i ,s ,rdda>-t>-mm_i(evommem \n { )rdda>-t>-mm_i)* rahc( > s( fi \n;s-t = laer>-t>-mm_i \n} \n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br \n;)mm_i(kcolnu_mm\t\n{ ))DEXIF_MM & galf>-t>-mm_i( && )s - t( =! laer>-t>-mm_i( fi \n\n;++t \n;--t ))t*(ECAPSSI && t =< s( elihw \n;--t \n;++s ))s*(ECAPSSI && t < s( elihw \n;laer>-t>-mm_i + s = t = e \n;rdda>-t>-mm_i)* rahc( = s \n;)eurtQ ,mm_i(kcol_mm \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;mm_i* cpi_mm \n;e* ,t* ,s* rahc \n{\n;rts EULAV \n)rts(gnab_pirts_mm\nEULAV citats\n\nPIRTSL_RTS_BR_EVAH fednfi#\n\n}\n;1rts nruter \n;)2rts ,1rts(dneppa_mm = 1rts \n} \n}\t\n;)1 ,c& ,1rts(tac_mm nruter \t\n;i = c rahc \t\n/* etyb */ { )ffx0 =< i && i =< 0( fi\t\n;)2rts(TNI2XIF = i tni\t\n{ ))2rts(P_MUNXIF( fi \n{\n;2rts ,1rts EULAV \n)2rts ,1rts(tacnoc_mm\nEULAV citats\n\n}\n;1rts nruter \n;)nel>-)2rts(GNIRTSR ,)2rts(rtPeulaVgnirtS ,1rts(tac_mm = 1rts \n;)2rts(rts_ot_rts_br = 2rts \n{\n;2rts ,1rts EULAV \n)2rts ,1rts(dneppa_mm\nEULAV citats\n\n}\n;rts nruter \n} \n;)mm_i(kcolnu_mm\t\n;nel =+ laer>-t>-mm_i\t\n}\t\n;)nel ,rtp ,laer>-t>-mm_i + rtps(ypcmem \t\n;tesffop + rtps = rtp )0 => tesffop( fi \t\n{ )rtp( fi\t\n;rdda>-t>-mm_i)* rahc( = rtps\t\n;)nel + laer>-t>-mm_i ,mm_i(collaer_mm\t\n;)eurtQ ,mm_i(kcol_mm\t\n}\t\n;rtps - rtp = tesffop \t\n{ )laer>-t>-mm_i + rtps < rtp \t\n&& rtp =< rtps( fi\t\n\n;rdda>-t>-mm_i)* rahc( = rtps\t\n;1- = tesffop tni\t\n{ )0 > nel( fi \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;rtps* rahc \n;mm_i* cpi_mm \n{\n;nel gnol \n;rtp* rahc tsnoc \n;rts EULAV \n)nel ,rtp ,rts(tac_mm\nEULAV citats\n\n}\n;tluser nruter \n} \n;)rts ,fub ,1+cgra(m_tesa_mm\t\n{ ))tluser(P_LIN!( fi \n;)rts ,fub ,cgra(m_fera_mm = tluser \n;)0,0(wen_rts_br = ]i[fub \n} \n;]i[vgra = ]i[fub\t\n{ )++i ;cgra < i ;0 = i( rof \n} \n;)cgra ,\")1 rof d%(stnemugra fo # gnorw\" ,rorrEgrAe_br(esiar_br\t\n{ )cgra < 2 || 1 < cgra( fi \n\n;i tni \n;]3[fub EULAV \n;tluser EULAV \n{\n;rts EULAV \n;vgra* EULAV \n;cgra tni \n)rts ,vgra ,cgra(gnab_ecils_mm\nEULAV citats\n\n;))EULAV ,* EULAV ,tni((_ m_fera_mm EULAV citats\n\nfidne#\n\n}\n;rts nruter \n;)2rts ,0 ,sop ,mm_i(etadpu_mm \n} \n;++sop\t\n{ )0 < sop( fi esle \n} \n;nel>-)rts(GNIRTSR = sop\t\n{ )1- == sop( fi \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;)xdi(GNOL2MUN = sop gnol \n;mm_i* cpi_mm \n{\n;2rts ,xdi ,rts EULAV \n)2rts ,xdi ,rts(tresni_mm\nEULAV citats\n\nTRESNI_RTS_BR_EVAH fi#\n\n}\n;)]1[vgra ,]0[vgra ,rts(tesa_mm nruter \n} \n;)cgra ,\")2 rof d%(stnemugra fo # gnorw\" ,rorrEgrAe_br(esiar_br\t\n{ )2 =! cgra( fi \n} \n;]2[vgra nruter\t\n}\t\n;)]2[vgra ,nel ,geb ,mm_i(etadpu_mm \t\n;)]1[vgra(TNI2MUN = nel \t\n;)]0[vgra(TNI2MUN = geb \t\n{\t\nfidne#\nesle\t\n}\t\n;)]2[vgra ,)]1[vgra(TNI2MUN ,]0[vgra ,rts(tes_tapbus_mm \t\n{ )PXEGER_T == )]0[vgra(EPYT( fi\t\nCNUF_COLLA_ENIFED_BR_EVAH fi#\n\n;nel ,geb gnol\t\n{ )3 == cgra( fi \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;mm_i* cpi_mm \n{\n;rts EULAV \n;vgra* EULAV \n;cgra tni \n)rts ,vgra ,cgra(m_tesa_mm\nEULAV citats\n\n}\n} \n;xedni_mun otog\t\n;)xdni(GNOL2MUN = xdi\t\n}\t\n} \t\n;lav nruter\t\t\n;)lav ,nel ,geb ,mm_i(etadpu_mm\t\t\n{ ))2 ,laer>-t>-mm_i ,nel& ,geb& ,xdni(nel_geb_egnar_br( fi \t\n;nel ,geb gnol \t\n{\t\n/* egnaR si xdni fi kcehc */\t\n:tluafed \n\n} \n;lav nruter \t\n} \t\n;)lav ,nel>-)xdni(GNIRTSR ,)ser(GNOL2MUN ,mm_i(etadpu_mm \t\n{ ))ser(P_LIN!( fi \t\n;)rts ,xdni& ,1(xedni_mm = ser \t\n\n;ser EULAV \t\n{ \n:GNIRTS_T esac \n\n;lav nruter\t\nfidne#\n}\t\n;)rts ,sgra ,2(gnab_bus_mm \t\n;lav = ]1[sgra \t\n;xdni = ]0[sgra \t\n;]2[sgra EULAV \t\n{ \n esle#\n;)lav ,0 ,xdni ,rts(tes_tapbus_mm \t\nCNUF_COLLA_ENIFED_BR_EVAH fi#\n:PXEGER_T esac \n\n;lav nruter\t\n}\t\n;)lav ,1 ,xdi ,mm_i(etadpu_mm \t\n{ esle\t\n}\t\n;ffx0 & )lav(TNI2MUN = ]xdi[)rdda>-t>-mm_i)* rahc(( \t\n} \t\n;)laer>-t>-mm_i ,mm_i(collaer_mm\t\t\n;1 =+ laer>-t>-mm_i\t\t\n{ )xdi)t_ezis( == laer>-t>-mm_i( fi \t\n{ ))lav(P_MUNXIF( fi\t\n}\t\n;)xdi ,\"gnirts fo tuo d% xedni\" ,rorrExednIe_br(esiar_br \t\n{ )xdi)t_ezis( =< laer>-t>-mm_i || 0 < xdi( fi\t\n}\t\n;laer>-t>-mm_i =+ xdi \t\n{ )0 < xdi( fi\t\n;)xdni(TNI2MUN = xdi\t\n:xedni_mun \n:MUNXIF_T esac \n{ ))xdni(EPYT( hctiws \n;)YFIDOM_MM ,mm_i ,rts(pamMteG \n\n;mm_i* cpi_mm \n;xdi gnol \n{\n;lav ,xdni EULAV \n;rts EULAV \n)lav ,xdni ,rts(tesa_mm\nEULAV citats\n\nfidne#\n\n}\n;)lav ,nel ,trats ,mm_i(etadpu_mm \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n;trats - dne = nel \n;)tesffo(DNE>-)hctam(HCTAMR = dne \n} \n;)tesffo ,\"dehctam ton d% puorg pxeger\" ,rorrExednIe_br(esiar_br\t\n{ )1- == trats( fi \n;)tesffo(GEB>-)hctam(HCTAMR = trats \n\n} \n;)tesffo ,\"pxeger fo tuo d% xedni\" ,rorrExednIe_br(esiar_br\t\n{ )sger_mun>-sger>-)hctam(HCTAMR => tesffo( fi \n;)(teg_ferkcab_br = hctam \n} \n;)\"dehctam ton pxeger\" ,rorrExednIe_br(esiar_br\t\n{ )0 < )0 ,0 ,rts ,er(hcraes_ger_br( fi \n;)NIGIRO_MM | YFIDOM_MM ,jbo(rts_mm = rts \n \n;mm_i* cpi_mm \n;nel ,dne ,trats tni \n;hctam ,rts EULAV \n{\n;lav EULAV \n;tesffo tni \n;er ,jbo EULAV \n)lav ,tesffo ,er ,jbo(tes_tapbus_mm\ndiov citats\n\nCNUF_COLLA_ENIFED_BR_EVAH fi#\n\n;))EULAV ,* EULAV ,tni((__ xedni_mm EULAV citats\n\n}\n;ser nruter \n} \n;)ts_gnab&(tni_gnab_busg_mm = ser\t\n{ esle \n} \n;)jbo ,kcolnuv_mm ,ts_gnab&)EULAV( ,tni_gnab_busg_mm(erusne_br = ser\t\n;)eurtQ ,mm_i(kcol_mm\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n;jbo = jbo.ts_gnab \n;vgra = vgra.ts_gnab \n;cgra = cgra.ts_gnab \n\n;mm_i* cpi_mm \n;ts_gnab gnab_mm \n;ser EULAV \n{\n;jbo EULAV \n;vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(gnab_busg_mm\nEULAV citats\n\n}\n;jbo nruter \n;)rts(elcycer_ecrof_cg_br \n;)jbo(TNIAT_JBO )detniat( fi \n;)hctam(tes_ferkcab_br \n} \n;)0 ,tesffo ,rts ,tap(hcraes_ger_br = geb\t\n;kaerb )nel>-)rts(GNIRTSR > tesffo( fi\t\n}\t\n;nelp - nel>-)lav(GNIRTSR + )0(DNE + trats = tesffo \t\n{ esle\t\n}\t\n;nelp - nel>-)lav(GNIRTSR =+ tesffo \t\n;)tap ,])0(DNE[rtp>-)rts(GNIRTSR(2nelcbm + )0(DNE + trats = tesffo \t\n{ ))0(DNE == )0(GEB( fi\t\n;nel>-)rts(GNIRTSR = laer>-t>-mm_i\t\n;nelp - nel>-)lav(GNIRTSR =+ nel>-)rts(GNIRTSR\t\n;)nel>-)lav(GNIRTSR ,rtp>-)lav(GNIRTSR \t\n,)0(GEB + trats + rtp>-)rts(GNIRTSR(ypcmem\t\n}\t\n;)nelp - )0(GEB - trats - nel>-)rts(GNIRTSR \t\t\n,nelp + )0(GEB + trats + rtp>-)rts(GNIRTSR \t\t\n,nel>-)lav(GNIRTSR + )0(GEB + trats + rtp>-)rts(GNIRTSR(evommem \t\n} \t\n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\t\n{ )DEXIF_MM & galf>-t>-mm_i( fi \t\n{ )nelp =! nel>-)lav(GNIRTSR( fi\t\n}\t\n;)nelp - nel>-)lav(GNIRTSR + nel>-)rts(GNIRTSR ,mm_i(collaer_mm \t\n{ )nel>-t>-mm_i > )nelp - nel>-)lav(GNIRTSR + laer>-t>-mm_i(( fi\t\n;)0(GEB - )0(DNE = nelp\t\n;1 = detniat ))lper(DETNIAT_JBO( fi\t\n}\t\n;trats =- rtp>-)rts(GNIRTSR \t\n;)sger ,rts ,lper(busger_ger_br = lav \t\n;trats =+ rtp>-)rts(GNIRTSR \t\n{ esle\t\n}\t\n;)hctam(tes_ferkcab_br \t\n;)))hctam ,0(hctam_htn_ger_br(dleiy_br(gnirts_sa_jbo_br = lav \t\n;)hctam(ysub_hctam_br \t\n{ )reti( fi\t\n;sger>-)hctam(HCTAMR = sger\t\n;)(teg_ferkcab_br = hctam\t\n;)(ferkcab_tcerroc_mm = trats\t\n{ )0 => geb( elihw \n} \n;linQ nruter\t\n;)rts(elcycer_ecrof_cg_br\t\n{ )0 < geb( fi \n;)0 ,0 ,rts ,tap(hcraes_ger_br = geb \n;0 = tesffo \n;)]0[vgra(tap_teg = tap \n\n;)NIGIRO_MM | YFIDOM_MM ,jbo(rts_mm = rts \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n} \n;)cgra ,\")2 rof d%(stnemugra fo # gnorw\" ,rorrEgrAe_br(esiar_br\t\n{ esle \n} \n;1 = detniat ))lper(DETNIAT_JBO( fi\t\n;)]1[vgra(rts_ot_rts_br = lper\t\n{ )2 == cgra( fi esle \n} \n;1 = reti\t\n{ ))(p_nevig_kcolb_br && 1 == cgra( fi \n\n;mm_i* cpi_mm \n;nelp gnol \n;0 = detniat tni \n;0 = reti ,trats tni \n;tesffo ,geb gnol \n;sger* sretsiger_er tcurts \n;rts ,hctam ,linQ = lper ,lav ,tap EULAV \n;jbo>-ts_gnab = jbo EULAV \n;vgra>-ts_gnab = vgra* EULAV \n;cgra>-ts_gnab = cgra tni \n{\n;ts_gnab* gnab_mm \n)ts_gnab(tni_gnab_busg_mm\nEULAV citats\n\n}\n;ser nruter \n} \n;)ts_gnab&(tni_gnab_bus_mm = ser\t\n{ esle \n} \n;)jbo ,kcolnuv_mm ,ts_gnab&)EULAV( ,tni_gnab_bus_mm(erusne_br = ser\t\n;)eurtQ ,mm_i(kcol_mm\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n;jbo = jbo.ts_gnab \n;vgra = vgra.ts_gnab \n;cgra = cgra.ts_gnab \n\n;mm_i* cpi_mm \n;ts_gnab gnab_mm \n;ser EULAV \n{\n;jbo EULAV \n;vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(gnab_bus_mm\nEULAV citats\n\n}\n;ser nruter \n;)rts(elcycer_ecrof_cg_br \n} \n;jbo = ser\t\n\n;)jbo(TNIAT_JBO )detniat( fi\t\n;nelp - nel>-)lper(GNIRTSR =+ laer>-t>-mm_i\t\n;)nel>-)lper(GNIRTSR ,rtp>-)lper(GNIRTSR \t\n,)0(GEB + trats + rtp>-)rts(GNIRTSR(ypcmem\t\n}\t\n;)nelp - )0(GEB - trats - nel>-)rts(GNIRTSR \t\t\n,nelp + )0(GEB + trats + rtp>-)rts(GNIRTSR \t\t\n,nel>-)lper(GNIRTSR + )0(GEB + trats + rtp>-)rts(GNIRTSR(evommem \t\n} \t\n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\t\n{ )DEXIF_MM & galf>-t>-mm_i( fi \t\n{ )nelp =! nel>-)lper(GNIRTSR( fi\t\n}\t\n;rdda>-t>-mm_i = rtp>-)rts(GNIRTSR \t\n;)nelp - nel>-)lper(GNIRTSR + nel>-)rts(GNIRTSR ,mm_i(collaer_mm \t\n{ )nelp > nel>-)lper(GNIRTSR( fi\t\n;)0(GEB - )0(DNE = nelp\t\n;1 = detniat ))lper(DETNIAT_JBO( fi\t\n}\t\n;trats =- rtp>-)rts(GNIRTSR \t\n;)sger ,rts ,lper(busger_ger_br = lper \t\n;trats =+ rtp>-)rts(GNIRTSR \t\n{ esle\t\n}\t\n;)hctam(tes_ferkcab_br \t\n;)))hctam ,0(hctam_htn_ger_br(dleiy_br(gnirts_sa_jbo_br = lper \t\n;)hctam(ysub_hctam_br \t\n{ )reti( fi\t\n;sger>-)hctam(HCTAMR = sger\t\n;)(teg_ferkcab_br = hctam\t\n;)(ferkcab_tcerroc_mm = trats\t\n{ )0 => )0 ,0 ,rts ,tap(hcraes_ger_br( fi \n;linQ = ser \n;)]0[vgra(tap_teg = tap \n\n;)NIGIRO_MM | YFIDOM_MM ,jbo(rts_mm = rts \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n} \n;)cgra ,\")2 rof d%(stnemugra fo # gnorw\" ,rorrEgrAe_br(esiar_br\t\n{ esle \n} \n;1 = detniat ))lper(DETNIAT_JBO( fi\t\n;)]1[vgra(rts_ot_rts_br = lper\t\n{ )2 == cgra( fi esle \n} \n;1 = reti\t\n{ ))(p_nevig_kcolb_br && 1 == cgra( fi \n\n;mm_i* cpi_mm \n;nelp gnol \n;0 = detniat tni \n;0 = reti ,trats tni \n;sger* sretsiger_er tcurts \n;ser ,rts ,hctam ,linQ = lper ,tap EULAV \n;jbo>-ts_gnab = jbo EULAV \n;vgra>-ts_gnab = vgra* EULAV \n;cgra>-ts_gnab = cgra tni \n{\n;ts_gnab* gnab_mm \n)ts_gnab(tni_gnab_bus_mm\nEULAV citats\n\n}\n;trats nruter \n;)hctam(tes_ferkcab_br \n} \n;trats =- )i(DNE>-)hctam(HCTAMR\t\n;trats =- )i(GEB>-)hctam(HCTAMR\t\n{ )++i ;1- =! )i(GEB>-)hctam(HCTAMR && sger_mun>-sger>-)hctam(HCTAMR < i ;0 = i( rof \n;)rts>-)hctam(HCTAMR(TNIAT_JBO ))hctam(DETNIAT_JBO( fi \n;)trats - )0(DNE>-)hctam(HCTAMR \t\t\t\t\n,trats + )rts>-)hctam(HCTAMR(rtPeulaVgnirtS(wen_rts_br = rts>-)hctam(HCTAMR \n;)0(GEB>-)hctam(HCTAMR = trats \n;0 nruter )1- == )0(GEB>-)hctam(HCTAMR( fi \n;0 nruter ))hctam(P_LIN( fi \n;)(teg_ferkcab_br = hctam \n\n;trats ,i tni \n;hctam EULAV \n{\n)(ferkcab_tcerroc_mm\ntni citats\n\n}\n;tap nruter \n} \n;)PXEGER_T ,tap(epyT_kcehC\t\n/* deliaf epyt */\t\n:tluafed \n\n;kaerb\t\n;)tap(pmocger_ger_br = tap\t\n:GNIRTS_T esac \n\n;kaerb\t\n:PXEGER_T esac \n{ ))tap(EPYT( hctiws \n{\n;tap EULAV \n)tap(tap_teg\nEULAV citats\n\n}\n;ser nruter \n} \n;kaerb\t\n;)x ,1 ,)\"~=\"(nretni_br ,y(llacnuf_br = ser\t\n:tluafed \n\n;kaerb\t\n;)trats(MUN2TNI = ser esle\t\n;linQ = ser )1- == trats( fi\t\n;)0 ,0 ,x ,ger(hcraes_ger_br = trats\t\n;)y(pmocger_ger_br = ger\t\n:GNIRTS_T esac \n\n;kaerb\t\n;)x ,y(hctam_ger_br = ser\t\n:PXEGER_T esac \n{ ))y(EPYT( hctiws \n} \n;)y(rts_ot_mm = y\t\n{ )eerf_mm)CNUF_ATAD_YBUR( == eerfd>-)y(ATADR && ATAD_T == )y(EPYT( fi \n;)NIGIRO_MM ,x(rts_mm = x \n\n;trats gnol \n;ser ,ger EULAV \n{\n;y ,x EULAV \n)y ,x(hctam_mm\nEULAV citats\n\n}\n;)rts(kcolnu_mm \n;nel - llav =+ laer>-t>-rts \n} \n;)llav ,plav ,geb + rdda>-t>-rts)* rahc((evommem\t\n{ )0 > llav( fi \n} \n;)nel- ,rahc ,laer>-t>-rts + rdda>-t>-rts(OREZMEM\t\n{ )0 < nel && geb)t_ezis( < laer>-t>-rts( fi \n} \n;))nel + geb( - laer>-t>-rts\t\t\n,nel + geb + rdda>-t>-rts)* rahc(\t\t\n,llav + geb + rdda>-t>-rts)* rahc((evommem\t\n{ )nel =! llav( fi \n\n} \n;)nel - llav + laer>-t>-rts ,rts(collaer_mm\t\n{ )llav < nel( fi \n} \n;)\"pam dexif a fo ezis eht egnahc ot yrt\" ,rorrEepyTe_br(esiar_br\t\n;)rts(kcolnu_mm\t\n{ )nel =! llav && )DEXIF_MM & galf>-t>-rts(( fi \n\n;)rts(kcol_mm \n;)llav ,plav ,lav(pamMgnirtS \n;)rts(kcolnu_mm \n\n} \n;geb - laer>-t>-rts = nel\t\n{ ))nel + geb()t_ezis( < laer>-t>-rts( fi \n} \n;)geb ,\"gnirts fo tuo d% xedni\" ,rorrExednIe_br(esiar_br\t\n;)rts(kcolnu_mm\t\n}\t\n;laer>-t>-rts =- geb \t\n{ )0 < geb( fi\t\n{ )geb)t_ezis( < laer>-t>-rts || 0 < geb( fi \n} \n;laer>-t>-rts =+ geb\t\n{ )0 < geb( fi \n;)rts(kcol_mm \n;)nel ,\"d% htgnel evitagen\" ,rorrExednIe_br(esiar_br )0 < nel( fi \n;)\"pamm\"(nezorf_rorre_br )NEZORF_MM & galf>-t>-rts( fi \n\n;llav gnol \n;plav* rahc \n{\n;nel gnol \n;geb gnol \n;lav EULAV \n;rts* cpi_mm \n)lav ,nel ,geb ,rts(etadpu_mm\ndiov citats\n\n;)0( elihw }\n\\ \t\t\t\t\t\t\t\t\t} \n\\ \t\t\t\t\t\t;nel>-)b(GNIRTSR = lb\t\n\\ \t\t\t\t\t\t;)b(rtPeulaVgnirtS = pb\t\n\\ \t\t\t\t\t\t\t\t{ esle \n\\ \t\t\t\t\t\t\t\t\t} \n\\ \t\t\t\t\t\t;laer>-t>-mm_b = lb\t\n\\ \t\t\t\t\t\t;rdda>-t>-mm_b = pb\t\n\\ \t\t\t\t\t\t;)0 ,mm_b ,b(pamMteG\t\n\\ \t\t\t\t\t\t\t;mm_b* cpi_mm\t\n\\ { )eerf_mm)CNUF_ATAD_YBUR( == eerfd>-)b(ATADR && ATAD_T == )b(EPYT( fi \n\\ \t\t\t\t\t\t\t\t\t{ od\n\\ \t\t\t\t\t\t)lb ,pb ,b(pamMgnirtS enifed#\n\nfidne#\n}\n;linQ nruter \n;)a(TNI2MUN = ecivda>-t>-mm_i \n} \n;)onrre ,\")d%(esivdam\" ,rorrEepyTe_br(esiar_br\t\n{ )1- == ))a(TNI2MUN ,nel>-t>-mm_i ,rdda>-t>-mm_i(esivdam( fi \n;)0 ,mm_i ,jbo(pamMteG \n \n;mm_i* cpi_mm \n{\n;a ,jbo EULAV \n)a ,jbo(esivdam_mm\nEULAV citats\nLAMRON_VDAM fedfi#\n\n}\n;jbo nruter \n} \n;YLNORW_O = edoms>-t>-mm_i\t\n;DEXIF_MM =| galf>-t>-mm_i\t\n{ )ETIRW_TORP & edomp( fi esle \n} \n}\t\n;NEZORF_MM =| galf>-t>-mm_i \t\n;)jbo(ezeerf_jbo_br = jbo \t\n;YLNODR_O = edoms>-t>-mm_i \t\n{ esle\t\n;RWDR_O = edoms>-t>-mm_i )ETIRW_TORP & edomp( fi\t\n{ )DAER_TORP & edomp( fi \n;edomp = edomp>-t>-mm_i \n} \n;)ter ,\")d%(tcetorpm\" ,rorrEgrAe_br(esiar_br\t\n{ )0 =! ))DAER_TORP | edomp ,nel>-t>-mm_i ,rdda>-t>-mm_i(tcetorpm = ter(( fi \n;)\"pamm\"(nezorf_rorre_br\t\n ))NEZORF_MM & galf>-t>-mm_i( && )ETIRW_TORP & edomp(( fi \n} \n;)a(TNI2MUN = edomp\t\n{ esle \n} \n}\t\n;)edoms ,\"s% edom dilavnI\" ,rorrEgrAe_br(esiar_br \t\n{ esle\t\n;ETIRW_TORP | DAER_TORP = edomp \t\n)0 == )\"rw\" ,edoms(pmcrts || 0 == )\"wr\" ,edoms(pmcrts( fi esle\t\n;ETIRW_TORP = edomp )0 == )\"w\" ,edoms(pmcrts( fi esle\t\n;DAER_TORP = edomp )0 == )\"r\" ,edoms(pmcrts( fi\t\n;)a(rtPeulaVgnirtS = edoms\t\n{ )GNIRTS_T == )a(EPYT( fi \n;)0 ,mm_i ,jbo(pamMteG \n\n;edoms* rahc \n;edomp ,ter tni \n;mm_i* cpi_mm \n{\n;a ,jbo EULAV \n)a ,jbo(tcetorpm_mm\nEULAV citats\n\n}\n;jbo nruter \n;)laer>-t>-mm_i ,mm_i(fdnapxe_mm\t\n)ETAVIRP_PAM =! epocsv>-t>-mm_i && nel>-t>-mm_i < laer>-t>-mm_i( fi \n} \n;)ter ,\")d%(cnysm\" ,rorrEgrAe_br(esiar_br\t\n{ )0 =! ))galf ,nel>-t>-mm_i ,rdda>-t>-mm_i(cnysm = ter(( fi \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n} \n;)galfo(TNI2MUN = galf\t\n;)galfo& ,\"10\" ,vgra ,cgra(sgra_nacs_br\t\n{ )cgra( fi \n\n;CNYS_SM = galf tni \n;ter tni \n;galfo EULAV \n;mm_i* cpi_mm \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(cnysm_mm\nEULAV citats\n\n}\n;jbo nruter \n} \n;)jbo(TNIAT_JBO\t\n}\t\n;DEXIF_MM =| galf>-t>-mm_i \t\n{ )YLNORW_O == edoms( fi\t\n{ esle \n} \n;NEZORF_MM =| galf>-t>-mm_i\t\n;)jbo(ezeerf_jbo_br = jbo\t\n{ )YLNODR_O == edoms( fi \n;1-)* rahc(:)htap(pudrts_ybur?)htap( = htap>-t>-mm_i \n;CNURT_O~ & edoms = edoms>-t>-mm_i \n;epocsv = epocsv>-t>-mm_i \n;edomp = edomp>-t>-mm_i \n;ezis = laer>-t>-mm_i )tini!( fi \n;ezis = nel>-t>-mm_i \n;rdda = rdda>-t>-mm_i \n} \n}\t\n;)ezis ,]0[rtp ,rdda(tesmem \t\n;)lav(rtPeulaVgnirtS = rtp \t\n{ ))lav(P_LIN!( fi\t\n;))\"ezilaitini\"(2wen_rts_br ,snoitpo(fera_hsah_br = lav\t\n\n;rtp* rahc\t\n;lav EULAV\t\n{ )HSAH_T == )snoitpo(EPYT && suomynona( fi \nfidne#\n} \n;)onrre ,\")d%(esivdam\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )ecivda>-t>-mm_i ,ezis ,rdda(esivdam && ecivda>-t>-mm_i( fi \nLAMRON_VDAM fedfi#\n} \n;)onrre ,\")d%( deliaf pamm\" ,rorrEgrAe_br(esiar_br\t\n{ )rdda! || DELIAF_PAM == rdda( fi \n} \n;)df(esolc\t\n{ )suomynona! && )vdf(P_LIN( fi \n;)tesffo ,df ,epocsv ,edomp ,ezis ,0(pamm = rdda \n} \n}\t\n;DEXIF_MM =| galf>-t>-mm_i \t\n{ ))vdf(P_LIN!( fi\t\n}\t\n;rcni>-t>-mm_i = ezis \t\n;1 = tini \t\n} \t\n;)htap ,\"s% dnetxe t'naC\" ,rorrEOIe_br(esiar_br\t\t\n{ )1 =! )1 ,\"000\\\" ,df(etirw( fi \t\n} \t\n;)1 - rcni>-t>-mm_i ,\"d% keesl t'naC\" ,rorrEOIe_br(esiar_br\t\t\n{ )1- == )DNE_KEES ,1 - rcni>-t>-mm_i ,df(keesl( fi \t\n{ ))RWDR_O & edoms( && 0 == ezis( fi\t\n{ esle \n} \n;NONA_MM | DEXIF_MM =| galf>-t>-mm_i\t\n;ETIRW_TORP | DAER_TORP = edomp\t\n;RWDR_O = edoms\t\n}\t\n;0 = tesffo \t\n;)\"pam suomynona na rof tesffo gnirongI\"(gninraw_br \t\n{ )tesffo( fi\t\n}\t\n;)\"pam suomynona na rof deificeps ton htgnel\" ,rorrEgrAe_br(esiar_br \t\n{ )0 =< ezis( fi\t\n{ )suomynona( fi \n;0 = tini \n} \nfidne#\n} \n} \t\n;)etalpmet ,etalpmet>-t>-mm_i(ypcrts\t\t\n;)1 + )etalpmet(nelrts ,rahc(N_COLLA = etalpmet>-t>-mm_i\t\t\n{ )PMT_MM & galf>-t>-mm_i( fi \t\n;dimhs = dimhs>-t>-mm_i \t\n;dimes = dimes>-t>-mm_i \t\n;yek = yek>-t>-mm_i \t\n;atad = t>-mm_i \t\n;)t>-mm_i(eerf \t\n;))pamm_mm(foezis ,t>-mm_i ,atad(ypcmem \t\n} \t\n}\t\t\n;)\")(ltcmes\"(liaf_sys_br \t\t\n{ )1- == )lav_mes ,LAVTES ,0 ,dimes(ltcmes( fi\t\t\n;1 = lav.lav_mes\t\t\n{ )TAERC_CPI & edom( fi \t\n} \t\n;)\")(tegmes\"(liaf_sys_br\t\t\n{ )1- == ))edom ,1 ,yek(tegmes = dimes(( fi \t\n} \t\n}\t\t\n;)\")(ltcmhs\"(liaf_sys_br \t\t\n{ )1- == )fub& ,DIMR_CPI ,dimhs(ltcmhs( fi\t\t\n{ )PMT_MM & galf>-t>-mm_i( fi \t\n} \t\n;)\")(tamhs\"(liaf_sys_br\t\t\n{ )1-)* pamm_mm( == atad( fi \t\n;)0 ,0)* diov( ,dimhs(tamhs = atad \t\n} \t\n;)\")(tegmhs\"(liaf_sys_br\t\t\n{ )1- == ))edom ,)cpi_mm(foezis ,yek(tegmhs = dimhs(( fi \t\n} \t\n;yek>-t>-mm_i)t_yek( = yek\t\t\n{ esle \t\n} \t\n}\t\t\n;)\")(kotf\"(liaf_sys_br \t\t\n{ )1- == ))'R' ,etalpmet(kotf = yek(( fi\t\t\n}\t\t\n;)\")(pmetskm\"(liaf_sys_br \t\t\n{ )1- == )etalpmet(pmetskm( fi\t\t\n;)\"XXXXXX.pamm_ybur/pmt/\" ,etalpmet(ypcrts\t\t\n;TAERC_CPI =| edom\t\t\n{ )0 =< yek>-t>-mm_i)tni(( fi \t\n} \t\n;4460 = edom\t\t\n{ esle \t\n} \t\n;0 = dimes>-t>-mm_i\t\t\n;dimes>-t>-mm_i = edom\t\t\n{ )dimes>-t>-mm_i( fi \t\n;0 = dimhs>-t>-mm_i \t\n} \t\n;)jbo ,cpi_i_mm ,dimhs>-t>-mm_i ,hcae_br(etareti_br\t\t\n{ )HSAH_T == )dimhs>-t>-mm_i(EPYT( fi \t\n;0 = dimes>-t>-mm_i \t\n;1- = yek>-t>-mm_i \t\n} \t\n;)\"... tcepxe uoy tahw od ton lliw ti ylbaborP\"(gninraw_br\t\t\n{ ))DERAHS_PAM & epocsv(!( fi \t\n\n;atad* pamm_mm \t\n;fub sd_dimhs tcurts \t\n;lav_mes numes noinu \t\n;edom ,dimes ,dimhs tni \t\n;yek t_yek \t\n{ )CPI_MM & galf>-t>-mm_i( fi\t\nLTCMHS_EVAH && LTCMES_EVAH fi#\n;tesffo>-t>-mm_i = tesffo\t\n;nel>-t>-mm_i = ezis )nel>-t>-mm_i( fi\t\n}\t\n;)tesffo>-t>-mm_i ,nel>-t>-mm_i \t\t\n,\")d%( tesffo ro )d%( htgnel rof eulav dilavni\" ,rorrEgrAe_br(esiar_br \t\n{ )ezis_ts.ts > )tesffo>-t>-mm_i + nel>-t>-mm_i( && htap( fi\t\n;)jbo ,snoitpo_i_mm ,snoitpo ,hcae_br(etareti_br\t\n{ )linQ =! snoitpo( fi \n;0 = tesffo \n;0 = dimes>-t>-mm_i \n;0 = dimhs>-t>-mm_i \n} \n;)\"pamm nezorf\" ,rorrEgrAe_br(esiar_br\t\n{ )NEZORF_MM & galf>-t>-mm_i( fi \n;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n} \n}\t\n;)edomv(TNI2MUN = ezis \t\n{ )GNIRTS_T =! )edomv(EPYT && )edomv(P_LIN!( fi\t\n;1- = df\t\n{ esle \n} \n;ezis_ts.ts = ezis\t\n}\t\n;)htap ,\"s% tats t'naC\" ,rorrEgrAe_br(esiar_br \t\n{ )1- == )ts& ,df(tatsf( fi\t\n}\t\n} \t\n;)htap ,\"s% nepo t'naC\" ,rorrEgrAe_br(esiar_br\t\t\n{ )1- == ))mrep ,edoms ,htap(nepo = df(( fi \t\n{ ))vdf(P_LIN( fi\t\n}\t\n;)edom ,\"s% edom dilavnI\" ,rorrEgrAe_br(esiar_br \t\n{ esle\t\n}\t\n;ETIRW_TORP | DAER_TORP = edomp \t\n;TAERC_O | RWDR_O = edoms \t\n{ )0 == )\"a\" ,edom(pmcrts( fi esle\t\n}\t\n;ETIRW_TORP | DAER_TORP = edomp \t\n;RWDR_O = edoms \t\n{ )0 == )\"rw\" ,edom(pmcrts || 0 == )\"wr\" ,edom(pmcrts( fi esle\t\n}\t\n;ETIRW_TORP | DAER_TORP = edomp \t\n;CNURT_O | RWDR_O = edoms \t\n{ )0 == )\"w\" ,edom(pmcrts( fi esle\t\n}\t\n;DAER_TORP = edomp \t\n;YLNODR_O = edoms \t\n{ )0 == )\"r\" ,edom(pmcrts( fi\t\n}\t\n;)edomv(rtPeulaVgnirtS = edom \t\n{ esle\t\n}\t\n;)]1[rtp>-)edomv(YARRAR(TNI2MUN = mrep \t\n;)pmt(rtPeulaVgnirtS = edom \t\n;]0[rtp>-)edomv(YARRAR = pmt \t\n} \n;)nel>-)edomv(YARRAR \n,\")2 detcepxe( d% htgnel dilavnI\" ,rorrEgrAe_br(esiar_br \n{ )2 =! nel>-)edomv(YARRAR( fi \n;)\"yra_ot\" ,\"yarrA\" ,YARRA_T ,edomv(epyt_trevnoc_br = edomv \n\n;pmt EULAV \n{ )))\"yra_ot\"(nretni_br ,edomv(ot_dnopser_br( fi esle\t\n}\t\n;\"r\" = edom \t\n{ ))edomv(P_LIN( fi\t\n{ )suomynona!( fi \n;6660 = mrep \n;0 = ezis \n;)epocs(TNI2MUN : DERAHS_PAM ? )epocs(P_LIN =| epocsv \n} \n}\t\nfidne#\n} \t\n;)\"pam suomynona na rof deificeps emanelif\" ,rorrEgrAe_br(esiar_br\t\t\n{ )NONA_PAM & epocsv( fi \t\nNONA_PAM fedfi#\n;)epocs(TNI2MUN = epocsv \t\n{ ))epocs(P_LIN!( fi\t\n}\t\n} \t\n;)df ,\"d% rotpircsed elif dilavni\" ,rorrEgrAe_br(esiar_br\t\t\n{ )0 < df( fi \t\n;)vdf(TNI2MUN = df \t\n{ esle\t\n}\t\n;)emanf(rtPeulaVgnirtS = htap \t\n;)emanf(eulaVgnirtSefaS \t\n;)emanf(rts_ot_rts_br = emanf \t\n{ ))vdf(P_LIN( fi\t\n}\t\n;)0 ,0 ,)\"onelif\"(nretni_br ,emanf(2llacnuf_br = vdf \t\n{ )))\"onelif\"(nretni_br ,emanf(ot_dnopser_br( fi\t\n;)4(eruces_br\t\n}\t\n;)\"noitarepo erucesnI\" ,rorrEytiruceSe_br(esiar_br \t\n{))emanf(DETNIAT_JBO && 0 > )(level_efas_br( fi\t\n{ \nfidne#\n esle \n} \n;1 = suomynona\t\n;DERAHS_PAM | NONA_PAM = epocsv\t\n{ ))emanf(P_LIN( fi \nNONA_PAM fedfi#\n;linQ = vdf \n;0 = suomynona \n;1- = df \n;0 = htap \n;0 = epocsv \n;)epocs& ,edomv& ,emanf& ,\"21\" ,vgra ,cgra(sgra_nacs_br \n} \n;--cgra\t\n;]1 - cgra[vgra = snoitpo\t\n{ )HSAH_T == )]1 - cgra[vgra(EPYT && 1 > cgra( fi \n;linQ = snoitpo \n\n;suomynona tni \n;tesffo t_ffo \n;0 = ezis t_ezis \n;edom* ,htap* rahc \n;mm_i* cpi_mm \n;snoitpo ,epocs ,edomv ,vdf ,emanf EULAV \n;rdda EPYTTER_PAMM \n;tini ,mrep ,epocsv ,0 = edomp ,0 = edoms ,df tni \n;ts tats tcurts \n{\n;cgra tni \n;vgra* ,jbo EULAV \n)jbo ,vgra ,cgra(tini_mm\nEULAV citats\n\n}\n;ser nruter \n;EZIS_RCNI_PXE = rcni>-t>-mm_i \n;)1 ,pamm_mm ,t>-mm_i(OREZMEM \n;)1 ,pamm_mm(N_COLLA = t>-mm_i \n;)mm_i ,eerf_mm ,0 ,cpi_mm ,jbo(tcurtS_ekaM_ataD = ser \n\n;mm_i* cpi_mm \n;ser EULAV \n{\n;jbo EULAV \n)jbo(colla_s_mm\nEULAV citats\n\n}\n;ser nruter \n;)vgra ,cgra ,ser(tini_llac_jbo_br \n;)0 ,0 ,)\"etacolla\"(nretni_br ,jbo(2llacnuf_br = ser EULAV \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(wen_s_mm\nEULAV citats\n\nfidne#\n\n}\n;linQ nruter \n} \n;)snoitpo ,\"'s%` noitpo nwonknU\"(gninraw_br\t\n{ esle \n} \n;)eulav(TNI2MUN = dimes>-t>-mm_i\t\n{ )0 == )\"edom\" ,snoitpo(pmcrts( fi esle \n} \n}\t\n;PMT_MM~ =& galf>-t>-mm_i \t\n{ ))eulav(TSETR( fi\t\n{ )0 == )\"tnenamrep\" ,snoitpo(pmcrts( fi esle \n} \n;)0 ,0 ,)\"tni_ot\"(nretni_br ,eulav(2llacnuf_br = yek>-t>-mm_i\t\n{ )0 == )\"yek\" ,snoitpo(pmcrts( fi \n;)yek(rtPeulaVgnirtS = snoitpo \n;)yek(gnirts_sa_jbo_br = yek \n;)1 ,gra(yrtne_yra_br = eulav \n;)0 ,gra(yrtne_yra_br = yek \n;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n\n;eulav ,yek EULAV \n;snoitpo* rahc \n;mm_i* cpi_mm \n{\n;jbo ,gra EULAV \n)jbo ,gra(cpi_i_mm\nEULAV citats\n\nLTCMHS_EVAH && LTCMES_EVAH fi#\n\n}\n;linQ nruter \n} \n;)snoitpo ,\"'s%` noitpo nwonknU\"(gninraw_br\t\n{ esle \nfidne#\n} \n;)PMT_MM | CPI_MM( =| galf>-t>-mm_i\t\n;eulav = dimhs>-t>-mm_i\t\n}\t\n;)\"cpi: rof hsaH na detcepxE\" ,rorrEgrAe_br(esiar_br \t\n{ )HSAH_T =! )eulav(EPYT && eurtQ =! eulav( fi\t\n{ )0 == )\"cpi\" ,snoitpo(pmcrts( fi esle \nLTCMHS_EVAH && LTCMES_EVAH fi#\n} \n{ )0 == )\"ezilaitini\" ,snoitpo(pmcrts( fi esle \n} \n;rcni = rcni>-t>-mm_i\t\n}\t\n;)rcni ,\"d% tnemercni rof eulav dilavnI\" ,rorrEgrAe_br(esiar_br \t\n{ )0 < rcni( fi\t\n;)eulav(TNI2MUN = rcni tni\t\n{ )0 == )\"tnemercni\" ,snoitpo(pmcrts( fi esle \n} \n;)eulav(TNI2MUN = ecivda>-t>-mm_i\t\n{ )0 == )\"ecivda\" ,snoitpo(pmcrts( fi esle \n} \n;DEXIF_MM =| galf>-t>-mm_i\t\n}\t\n;)tesffo>-t>-mm_i ,\"d% tesffo rof eulav dilavnI\" ,rorrEgrAe_br(esiar_br \t\n{ )0 < tesffo>-t>-mm_i( fi\t\n;)eulav(TNI2MUN = tesffo>-t>-mm_i\t\n{ )0 == )\"tesffo\" ,snoitpo(pmcrts( fi esle \n} \n;DEXIF_MM =| galf>-t>-mm_i\t\n}\t\n;)nel>-t>-mm_i ,\"d% htgnel rof eulav dilavnI\" ,rorrEgrAe_br(esiar_br \t\n{ )0 =< nel>-t>-mm_i( fi\t\n;)eulav(TNIU2MUN = nel>-t>-mm_i\t\n{ )0 == )\"htgnel\" ,snoitpo(pmcrts( fi \n;)yek(rtPeulaVgnirtS = snoitpo \n;)yek(gnirts_sa_jbo_br = yek \n;)1 ,gra(yrtne_yra_br = eulav \n;)0 ,gra(yrtne_yra_br = yek \n;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n\n;eulav ,yek EULAV \n;snoitpo* rahc \n;mm_i* cpi_mm \n{\n;jbo ,gra EULAV \n)jbo ,gra(snoitpo_i_mm\nEULAV citats\n\n}\n;)nel>-t>-mm_i(MUN2TNIU nruter \n} \n;)nel + nel>-t>-mm_i ,mm_i(fdnapxe_mm\t\n{ )0 > nel( fi \n;)a(GNOL2MUN = nel \n;)YFIDOM_MM ,mm_i ,jbo(pamMteG \n\n;nel gnol \n;mm_i* cpi_mm \n{\n;a ,jbo EULAV \n)a ,jbo(dnetxe_mm\nEULAV citats\n\n}\n} \n;)nel ,mm_i(fdnapxe_mm\t\n}\t\n;rcni>-t>-mm_i + nel>-t>-mm_i = nel \t\n{ )rcni>-t>-mm_i < )nel>-t>-mm_i - nel(( fi\t\n{ )nel>-t>-mm_i > nel( fi \n;)\"pamm\"(nezorf_rorre_br )NEZORF_MM & galf>-t>-mm_i( fi \n{\n;nel t_ezis \n;mm_i* cpi_mm \n)nel ,mm_i(collaer_mm\ndiov citats\n\n}\n} \n;)mm_ts&(dnapxe_i_mm\t\n{ esle \n} \n}\t\n;)sutats(gat_pmuj_br \t\n{ )sutats( fi\t\n;)mm_i(kcolnu_mm\t\n;)sutats& ,mm_ts&)EULAV( ,dnapxe_i_mm(tcetorp_br\t\n;)eurtQ ,mm_i(kcol_mm\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n;nel = nel.mm_ts \n;mm_i = mm_i.mm_ts \n} \n;)\"pam suomynona na rof dnapxe\" ,rorrEepyTe_br(esiar_br\t\n{ )1-)* rahc( == htap>-t>-mm_i || htap>-t>-mm_i!( fi \n} \n;)\"pam dexif a rof dnapxe\" ,rorrEepyTe_br(esiar_br\t\n{ )DEXIF_MM & galf>-t>-mm_i( fi \n} \n;)\"pam etavirp a rof dnapxe\" ,rorrEepyTe_br(esiar_br\t\n{ )ETAVIRP_PAM == epocsv>-t>-mm_i( fi \n\n;mm_ts ts_mm \n;sutats tni \n{\n;nel t_ezis \n;mm_i* cpi_mm \n)nel ,mm_i(fdnapxe_mm\ndiov citats\n\n}\n;linQ nruter \n;nel = nel>-t>-mm_i \n} \n;)onrre ,\")d%(kcolm\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )nel ,rdda>-t>-mm_i(kcolm && )KCOL_MM & galf>-t>-mm_i(( fi \nfidne#\n} \n;)onrre ,\")d%(esivdam\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == )ecivda>-t>-mm_i ,nel ,rdda>-t>-mm_i(esivdam && ecivda>-t>-mm_i( fi \nLAMRON_VDAM fedfi#\n} \n;)\"deliaf pamm\" ,rorrEgrAe_br(esiar_br\t\n{ )DELIAF_PAM == rdda>-t>-mm_i( fi \n;)df(esolc \n;)tesffo>-t>-mm_i ,df ,epocsv>-t>-mm_i ,edomp>-t>-mm_i ,nel ,0(pamm = rdda>-t>-mm_i \n} \n;)htap>-t>-mm_i ,\"s% etacnurt t'naC\" ,rorrEOIe_br(esiar_br\t\n{ )1- == )nel ,htap>-t>-mm_i(etacnurt && nel>-t>-mm_i < nel( fi esle \n} \n}\t\n;)htap>-t>-mm_i ,\"s% dnetxe t'naC\" ,rorrEOIe_br(esiar_br \t\n{ )1 =! )1 ,\"000\\\" ,df(etirw( fi\t\n}\t\n;)1 - nel>-t>-mm_i - nel ,\"d% keesl t'naC\" ,rorrEOIe_br(esiar_br \t\n{ )1- == )DNE_KEES ,1 - nel>-t>-mm_i - nel ,df(keesl( fi\t\n{ )nel>-t>-mm_i > nel( fi \n} \n;)htap>-t>-mm_i ,\"s% nepo t'naC\" ,rorrEgrAe_br(esiar_br\t\n{ )1- == ))edoms>-t>-mm_i ,htap>-t>-mm_i(nepo = df(( fi \n} \n;)\"deliaf pamnum\" ,rorrEgrAe_br(esiar_br\t\n{ ))nel>-t>-mm_i ,rdda>-t>-mm_i(pamnum( fi \n\n;nel>-mm_ts = nel t_ezis \n;mm_i>-mm_ts = mm_i* cpi_mm \n;df tni \n{\n;mm_ts* ts_mm \n)mm_ts(dnapxe_i_mm\nEULAV citats\n\n;ts_mm }\n;nel t_ezis \n;mm_i* cpi_mm \n{ tcurts fedepyt\n\n;)(pudrts_ybur* rahc nretxe\n \n}\n;)NIGIRO_MM ,jbo(rts_mm nruter \n{\n;jbo EULAV \n)jbo(rts_ot_mm\nEULAV citats\n\n}\n;ter nruter \n} \n;)ter(ezeerf_jbo_br = ter\t\n{ )NEZORF_MM & galf>-t>-mm_i( fi \n} \nfidne#\n;ter = giro>-)ter(GNIRTSR\t\nesle#\n;)DERAHS_STLE ,ter(TES_LF\t\n;ter = derahs.xua>-)ter(GNIRTSR\t\nCNUF_COLLA_ENIFED_BR_EVAH fi#\n{ )NIGIRO_MM & yfidom( fi \n;laer>-t>-mm_i = nel>-)ter(GNIRTSR \n;rdda>-t>-mm_i = rtp>-)ter(GNIRTSR \nfidne#\n;)rtp>-)ter(GNIRTSR(eerf \n} \n;)\"\"(2wen_rts_br = ter\t\n{ esle \n} \n;)\"\"(2wen_rts_detniat_br = ter\t\n{ ))jbo(detniat_jbo_br( fi \nesle#\n} \n;)ter(TNIAT_JBO\t\n{ ))jbo(detniat_jbo_br( fi \n;)gnirtSc_br(colla_jbo_br = ter \nCNUF_COLLA_ENIFED_BR_EVAH fi#\n} \n;)\"pamm yfidom t'nac :erucesnI\" ,rorrEytiruceSe_br(esiar_br \t\n)4 => )(level_efas_br && )ter(DETNIAT_JBO!( fi\t\n;)\"pamm\"(nezorf_rorre_br )NEZORF_MM & galf>-t>-mm_i( fi\t\n{ )YFIDOM_MM & yfidom( fi \n;)NIGIRO_MM~ & yfidom ,mm_i ,jbo(pamMteG \n\n;linQ = ter EULAV \n;mm_i* cpi_mm \n{\n;yfidom tni \n;jbo EULAV \n)yfidom ,jbo(rts_mm\nEULAV citats\n\n}\n;jbo nruter \n;NEZORF_MM =| galf>-t>-mm_i \n;)0 ,mm_i ,jbo(pamMteG \n;)jbo(ezeerf_jbo_br \n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(ezeerf_mm\nEULAV citats\n\n}\n;linQ nruter \n} \n;)mm_i(kcolnu_mm\t\n;'0\\' = htap>-t>-mm_i\t\n}\t\n;)htap>-t>-mm_i(eerf \t\n} \t\n;)\"etacnurt\" ,rorrEepyTe_br(esiar_br\t\t\n{ )1- == )laer>-t>-mm_i ,htap>-t>-mm_i(etacnurt\t\t\n&& ETAVIRP_PAM =! epocsv>-t>-mm_i && nel>-t>-mm_i < laer>-t>-mm_i( fi \t\n{ )1-)* rahc( =! htap>-t>-mm_i( fi\t\n;)nel>-t>-mm_i ,rdda>-t>-mm_i(pamnum\t\n;)eurtQ ,mm_i(kcol_mm\t\n{ )htap>-t>-mm_i( fi \n;)0 ,mm_i ,jbo(pamMteG \n\n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(pamnu_mm\nEULAV citats\n\n}\n;)1-(MUN2TNI nruter \n} \n;)yek>-t>-mm_i(MUN2TNI nruter\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n;)0 ,mm_i ,jbo(pamMteG \n\n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(yek_cpi_mm\nEULAV citats\n\n}\n;linQ nruter \n} \nfidne#\n;)jbo ,kcolnuv_mm ,jbo ,dleiy_br(erusne_br\t\n;)kcol_tiaw ,mm_i(kcol_mm\t\n}\t\n;)a(TSETR = kcol_tiaw \t\n{ ))a& ,\"10\" ,vgra ,cgra(sgra_nacs_br( fi\t\n\n;eurtQ = kcol_tiaw tni\t\n;a EULAV\t\nLTCMHS_EVAH && LTCMES_EVAH fi#\n{ esle \n} \n;)jbo(dleiy_br\t\n;)\"kcolmes# fo esu sselesu\"(gninraw_br\t\n{ ))CPI_MM & galf>-t>-mm_i(!( fi \n;)0 ,mm_i ,jbo(pamMteG \n\n;mm_i* cpi_mm \n{\n;jbo ,vgra* EULAV \n;cgra tni \n)jbo ,vgra ,cgra(kcolmes_mm\nEULAV citats\n\n}\n;linQ nruter \n;)mm_i(kcolnu_mm \n;)0 ,mm_i ,jbo(pamMteG \n\n;mm_i* cpi_mm \n{\n;jbo EULAV \n)jbo(kcolnuv_mm\nEULAV citats\n\n} \n\\\t\t\t\t\t;)\"pamm\"(nezorf_rorre_br\t\n\\\t{ ))NEZORF_MM & galf>-t>-mm_i( && )YFIDOM_MM & yfidom_t(( fi \n\\\t\t\t\t\t\t\t\t\t} \n\\\t\t\t\t;)\"elif deppamnu\" ,rorrEOIe_br(esiar_br\t\n\\\t\t\t\t\t\t{ )htap>-t>-mm_i!( fi \n\\\t\t\t\t\t;)mm_i ,cpi_mm ,jbo(tcurtS_teG_ataD \n\\\t\t\t\t\t)yfidom_t ,mm_i ,jbo(pamMteG enifed#\n\n}\nfidne#\n} \n}\t\n} \t\n;)\")(pomes\"(liaf_sys_br\t\t\n}\t\t\n;yrter otog \t\t\n;)1(peels_daerht_br \t\t\n{ )NIAGAE == onrre( fi\t\t\n{ )1- == )1 ,po_mes& ,dimes>-t>-mm_i(pomes( fi \t\n;TIAWON_CPI = glf_mes.po_mes \t\n;1 = po_mes.po_mes \t\n;0 = mun_mes.po_mes \t\n:yrter\t\n{ )tnuoc>-mm_i!( fi\t\n;--tnuoc>-mm_i\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n\n;po_mes fubmes tcurts \nLTCMHS_EVAH && LTCMES_EVAH fi#\n{\n;mm_i* cpi_mm \n)mm_i(kcolnu_mm\ndiov citats\n\n}\nfidne#\n} \n}\t\n} \t\n;)\")(pomes\"(liaf_sys_br\t\t\n}\t\t\n;yrter otog \t\t\n;)1(peels_daerht_br \t\t\n} \t\t\n;)\"NIAGAE\" ,))\"NIAGAE\"(nretni_br ,onrrEm_br(teg_tsnoc_br(esiar_br\t\t\t\n{ )kcol_tiaw!( fi \t\t\n{ )NIAGAE == onrre( fi\t\t\n{ )1- == )1 ,po_mes& ,dimes>-t>-mm_i(pomes( fi \t\n;TIAWON_CPI = glf_mes.po_mes \t\n;1- = po_mes.po_mes \t\n;0 = mun_mes.po_mes \t\n:yrter\t\n{ )1 == tnuoc>-mm_i( fi\t\n;++tnuoc>-mm_i\t\n{ )CPI_MM & galf>-t>-mm_i( fi \n\n;po_mes fubmes tcurts \nLTCMHS_EVAH && LTCMES_EVAH fi#\n{\n;kcol_tiaw tni \n;mm_i* cpi_mm \n)kcol_tiaw ,mm_i(kcol_mm\ndiov citats\n\n}\n;)mm_i(eerf \n} \n}\t\n;)htap>-t>-mm_i(eerf \t\n} \t\n;)\"etacnurt\" ,rorrEepyTe_br(esiar_br\t\t\n;)mm_i(eerf\t\t\n;)htap>-t>-mm_i(eerf\t\t\n{ )1- == )laer>-t>-mm_i ,htap>-t>-mm_i(etacnurt\t\t\n&& ETAVIRP_PAM =! epocsv>-t>-mm_i && nel>-t>-mm_i < laer>-t>-mm_i( fi \t\n{ )1-)* rahc( =! htap>-t>-mm_i( fi\t\n;)nel>-t>-mm_i ,rdda>-t>-mm_i(pamnum\t\n{ )htap>-t>-mm_i( fi \nfidne#\n} \n;)t>-mm_i(eerf\t\n{ esle \n} \n;)t>-mm_i(tdmhs\t\n}\t\n} \t\n}\t\t\n;)etalpmet>-t>-mm_i(eerf \t\t\n;)etalpmet>-t>-mm_i(knilnu \t\t\n{ )etalpmet>-t>-mm_i( fi\t\t\n;)DIMR_CPI ,0 ,dimes>-t>-mm_i(ltcmes\t\t\n{ ))PMT_MM & galf>-t>-mm_i( && 1 == hcttan_mhs.fub( fi \t\n{ )1- =! )fub& ,TATS_CPI ,dimhs>-t>-mm_i(ltcmhs( fi\t\n\n;fub sd_dimhs tcurts\t\n{ )CPI_MM & galf>-t>-mm_i( fi \nLTCMHS_EVAH && LTCMES_EVAH fi#\n{\n;mm_i* cpi_mm \n)mm_i(eerf_mm\ndiov citats\n\nfidne#\n;}\n;fub__* ofnimes tcurts \n;yarra* tni trohs dengisnu \n;fub* sd_dimes tcurts \n;lav tni \n{\nnumes noinu\n\n;]4201[etalpmet rahc citats\nLTCMHS_EVAH && LTCMES_EVAH fi#\n\n)5<<1( PMT_MM enifed#\n)4<<1( CPI_MM enifed#\n)3<<1( KCOL_MM enifed#\n)2<<1( NONA_MM enifed#\n)1<<1( DEXIF_MM enifed#\n)0<<1( NEZORF_MM enifed#\n\n8 TCETORP_MM enifed#\n)4 | YFIDOM_MM( EGNAHC_MM enifed#\n2 NIGIRO_MM enifed#\n1 YFIDOM_MM enifed#\n\n;gnab_mm }\n;cgra ,di ,galf tni \n;vgra* ,jbo EULAV \n{ tcurts fedepyt\n\n;cpi_mm }\n;t* pamm_mm \n;tnuoc tni \n{ tcurts fedepyt\n\n;pamm_mm }\n;etalpmet* ,htap* rahc \n;tesffo t_ffo \n;rcni ,laer ,nel t_ezis \n;dimhs ,dimes tni \n;yek EULAV \n;galf ,ecivda tni \n;epocsv ,edomp ,edoms tni \n;rdda EPYTTER_PAMM \n{ tcurts fedepyt\n\n6904 EZIS_RCNI_PXE enifed#\n\n;paMc_mm EULAV citats\n\nfidne#\nfidne#\nSUOMYNONA_PAM NONA_PAM enifed#\nSUOMYNONA_PAM fedfi#\nNONA_PAM fednfi#\n\n/* DELIAF_PAM! */ fidne#\n)1-)t_rddac(( DELIAF_PAM enifed#\nDELIAF_PAM fednfi#\n\nfidne#\nt_rddac EPYTTER_PAMM enifed#\nEPYTTER_PAMM fednfi#\n\n/* EPYTTER_PAMM! */ fidne#\n/* NOISREV_XISOP_ */ fidne#\n/* 903991 => NOISREV_XISOP_ */ fidne#\n* diov EPYTTER_PAMM enifed#\n903991 => NOISREV_XISOP_ fi#\nNOISREV_XISOP_ fedfi#\n/* ECRUOS_C_XISOP_! */ fidne#\n903991 ECRUOS_C_XISOP_ enifed#\nECRUOS_C_XISOP_ fednfi#\nEPYTTER_PAMM fednfi#\n\n]on[dne>-sger )on(DNE enifed#\n]on[geb>-sger )on(GEB enifed#\n\nfidne#\nfidne#\nesivdam_xisop esivdam enifed#\nDEENTNOD_VDAM_XISOP DEENTNOD_VDAM enifed#\nDEENLLIW_VDAM_XISOP DEENLLIW_VDAM enifed#\nLAITNEUQES_VDAM_XISOP LAITNEUQES_VDAM enifed#\n MODNAR_VDAM_XISOP MODNAR_VDAM enifed#\n LAMRON_VDAM_XISOP LAMRON_VDAM enifed#\nLAMRON_VDAM_XISOP fedfi#\nLAMRON_VDAM fednfi#\n\nfidne#\n)x(rtSefaS_kcehC )x(eulaVgnirtSefaS enifed#\neulaVgnirtSefaS fednfi#\n\nfidne#\n)x(RTSC2RTS )x(rtPeulaVgnirtS enifed#\nrtPeulaVgnirtS fednfi#\n\nfidne#\n)0( elihw }\n\\\t ;)x(rts_ot_rts_br = x )GNIRTS_T =! )x(EPYT( fi \n\\\t\t\t\t { od )x(eulaVgnirtS enifed#\neulaVgnirtS fednfi#\n\n>h.er< edulcni#\n>h.nretni< edulcni#\n>h.oiybur< edulcni#\n\nfidne#\n>h.mes/sys< edulcni#\n>h.cpi/sys< edulcni#\n>h.mhs/sys< edulcni#\nLTCMHS_EVAH && LTCMES_EVAH fi#\n\n>h.namm/sys< edulcni#\n>h.dtsinu< edulcni#\n>h.tats/sys< edulcni#\n>h.sepyt/sys< edulcni#\n>h.epytc< edulcni#\n>h.ltncf< edulcni#\n>h.ybur< edulcni#">. > >15 tests, 3109 assertions, 1 failures, 0 errors >make: *** [test] Error 1 > * ERROR: dev-ruby/mmap-0.2.6-r1 failed: > * tests failed > * > * Call stack: > * ebuild.sh, line 54: Called src_test > * environment, line 2800: Called ruby-ng_src_test > * environment, line 2627: Called _ruby_each_implementation 'each_ruby_test' > * environment, line 417: Called _ruby_invoke_environment 'ruby18' 'each_ruby_test' > * environment, line 446: Called each_ruby_test > * environment, line 926: Called die > * The specific snippet of code: > * emake test || die "tests failed" > * > * If you need support, post the output of 'emerge --info =dev-ruby/mmap-0.2.6-r1', > * the complete build log and the output of 'emerge -pqv =dev-ruby/mmap-0.2.6-r1'. > * The complete build log is located at '/var/log/portage/build/dev-ruby/mmap-0.2.6-r1:20100524-162547.log'. > * The ebuild environment file is located at '/var/tmp/portage/dev-ruby/mmap-0.2.6-r1/temp/environment'. > * S: '/var/tmp/portage/dev-ruby/mmap-0.2.6-r1/work/ruby18/mmap-0.2.6' > >>>> Install mmap-0.2.6-r1 into /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/image/ category dev-ruby > * Running install phase for ruby18 ... > * Running check install phase for ruby18 ... >>>> Completed installing mmap-0.2.6-r1 into /var/tmp/portage/dev-ruby/mmap-0.2.6-r1/image/ > >strip: i686-pc-linux-gnu-strip --strip-unneeded -R .comment > usr/lib/ruby/site_ruby/1.8/mmap.so
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 321403
: 232825