diff options
147 files changed, 13464 insertions, 1315 deletions
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam Binary files differindex 0d7a4c0e87..3fa8c7d69f 100644 --- a/bootstrap/lib/compiler/ebin/cerl_inline.beam +++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam Binary files differindex 7e2960fda2..7410397300 100644 --- a/bootstrap/lib/compiler/ebin/v3_core.beam +++ b/bootstrap/lib/compiler/ebin/v3_core.beam diff --git a/bootstrap/lib/kernel/ebin/application.beam b/bootstrap/lib/kernel/ebin/application.beam Binary files differindex c0a615f5a3..e39352117f 100644 --- a/bootstrap/lib/kernel/ebin/application.beam +++ b/bootstrap/lib/kernel/ebin/application.beam diff --git a/erts/.gitignore b/erts/.gitignore index 526d5da0b9..e515dc8811 100644 --- a/erts/.gitignore +++ b/erts/.gitignore @@ -11,6 +11,7 @@ /etc/common/Install /etc/common/erl.src +/etc/unix/etp-commands /test/Emakefile /test/*.beam diff --git a/erts/configure.in b/erts/configure.in index 2f624e5853..64436e933c 100644 --- a/erts/configure.in +++ b/erts/configure.in @@ -1051,12 +1051,15 @@ if test $ERTS_BUILD_SMP_EMU = yes; then AC_DEFINE(ERTS_HAVE_SMP_EMU, 1, [Define if the smp emulator is built]) + test "X$smp_require_native_atomics" = "Xyes" && + AC_DEFINE(ETHR_SMP_REQUIRE_NATIVE_IMPLS, 1, [Define if you want to enable check for native ethread implementations]) + case "$ethr_have_native_atomics-$smp_require_native_atomics-$ethr_have_native_spinlock" in yes-*) ;; no-yes-*) - AC_MSG_ERROR([No native atomic implementation found. See INSTALL.md for more information.]) + AC_MSG_ERROR([No native atomic implementation found. See Configuring section in INSTALL.md for more information.]) ;; no-no-yes) diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml index efe0483b31..540390e1b1 100644 --- a/erts/doc/src/erl_driver.xml +++ b/erts/doc/src/erl_driver.xml @@ -666,7 +666,7 @@ typedef struct ErlDrvBinary { <item> <p>The <c>ErlDrvData</c> is a handle to driver-specific data, passed to the driver call-backs. It is a pointer, and is - most often type casted to a specific pointer in the driver.</p> + most often type cast to a specific pointer in the driver.</p> </item> <tag>SysIOVec</tag> <item> @@ -1014,7 +1014,7 @@ typedef struct ErlIOVec { <fsummary>Read a system timestamp</fsummary> <desc> <marker id="driver_get_now"></marker> - <p>This function reads a timestamp into the memory pointed to by + <p>This function reads a timestamp into the memory pointed to by the parameter <c>now</c>. See the description of <seealso marker="#ErlDrvNowData">ErlDrvNowData</seealso> for specification of its fields. </p> <p>The return value is 0 unless the <c>now</c> pointer is not @@ -1056,7 +1056,7 @@ typedef struct ErlIOVec { returned. Another thread may still be using the event object internally. To safely close an event object call <c>driver_select</c> with <c>ERL_DRV_USE</c> and <c>on==0</c>. That - will clear all events and then call + will clear all events and then call <seealso marker="driver_entry#stop_select">stop_select</seealso> when it is safe to close the event object. <c>ERL_DRV_USE</c> should be set together with the first event @@ -1068,7 +1068,7 @@ typedef struct ErlIOVec { <p>ERL_DRV_USE was added in OTP release R13. Old drivers will still work as before. But it is recommended to update them to use <c>ERL_DRV_USE</c> and <c>stop_select</c> to make sure that event objects are closed in a safe way.</p> - </note> + </note> <p>The return value is 0 (failure, -1, only if the <c>ready_input</c>/<c>ready_output</c> is <c>NULL</c>).</p> @@ -1524,7 +1524,7 @@ typedef struct ErlIOVec { <marker id="remove_driver_entry"></marker> <p>This function removes a driver entry <c>de</c> previously added with <c>add_driver_entry</c>.</p> - <p>Driver entries added by the <c>erl_ddll</c> erlang interface can + <p>Driver entries added by the <c>erl_ddll</c> erlang interface can not be removed by using this interface.</p> </desc> </func> @@ -1758,7 +1758,7 @@ typedef struct ErlIOVec { <pre> Term type Argument(s) =========================================== -ERL_DRV_NIL +ERL_DRV_NIL ERL_DRV_ATOM ErlDrvTermData atom (from driver_mk_atom(char *string)) ERL_DRV_INT ErlDrvSInt integer ERL_DRV_UINT ErlDrvUInt integer @@ -1779,11 +1779,11 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len signed integer data type <c>ErlDrvSInt</c> are 64 bits wide on a 64 bit runtime system and 32 bits wide on a 32 bit runtime system. They were introduced in erts version 5.6, - and replaced some of the <c>int</c> arguments in the list above. + and replaced some of the <c>int</c> arguments in the list above. </p> <p>The unsigned integer data type <c>ErlDrvUInt64</c> and the signed integer data type <c>ErlDrvSInt64</c> are always 64 bits - wide. They were introduced in erts version 5.7.4. + wide. They were introduced in erts version 5.7.4. </p> <p>To build the tuple <c>{tcp, Port, [100 | Binary]}</c>, the @@ -1879,7 +1879,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <fsummary>Send term data from driver to port owner</fsummary> <desc> <marker id="driver_output_term"></marker> - <warning><p><c>driver_output_term()</c> is deferred and will + <warning><p><c>driver_output_term()</c> is deprecated and will be removed in the OTP-R17 release. Use <seealso marker="#erl_drv_send_term">erl_drv_output_term()</seealso> instead.</p> @@ -1937,7 +1937,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <fsummary>Send term data to other process than port owner process</fsummary> <desc> <marker id="driver_send_term"></marker> - <warning><p><c>driver_send_term()</c> is deferred and will + <warning><p><c>driver_send_term()</c> is deprecated and will be removed in the OTP-R17 release. Use <seealso marker="#erl_drv_send_term">erl_drv_send_term()</seealso> instead.</p> @@ -1981,7 +1981,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len thread, the following call can be used:</p> <p></p> <code type="none"><![CDATA[ - unsigned int myKey = (unsigned int) myPort; + unsigned int myKey = driver_async_port_key(myPort); r = driver_async(myPort, &myKey, myData, myFunc); ]]></code> @@ -1998,7 +1998,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len The data should be freed in <c>async_free</c>, because it's called if <c>driver_async_cancel</c> is called.</p> <p>When the async operation is done, <seealso marker="driver_entry#ready_async">ready_async</seealso> driver - entry function is called. If <c>async_ready</c> is null in + entry function is called. If <c>ready_async</c> is null in the driver entry, the <c>async_free</c> function is called instead.</p> <p>The return value is a handle to the asynchronous task, which @@ -2022,6 +2022,24 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len </desc> </func> <func> + <name><ret>unsigned int</ret><nametext>driver_async_port_key (ErlDrvPort port)</nametext></name> + <fsummary>Calculate an async key from an ErlDrvPort</fsummary> + <desc> + <marker id="driver_async_port_key"></marker> + <p>This function calculates a key for later use in <seealso + marker="#driver_async">driver_async()</seealso>. The keys are + evenly distributed so that a fair mapping between port id's + and async thread id's is achieved.</p> + <note> + <p>Before OTP-R16, the actual port id could be used as a key + with proper casting, but after the rewrite of the port + subsystem, this is no longer the case. With this function, you + can achieve the same distribution based on port id's as before + OTP-R16.</p> + </note> + </desc> + </func> + <func> <name><ret>int</ret><nametext>driver_async_cancel(long id)</nametext></name> <fsummary>Cancel an asynchronous call</fsummary> <desc> @@ -2033,10 +2051,10 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len The user had to implement synchronization of cancellation anyway. It also unnecessarily complicated the implementation. Therefore, as of OTP-R15B <c>driver_async_cancel()</c> is deprecated, and - scheduled for removal in OTP-R16. It will currently always fail, + scheduled for removal in OTP-R17. It will currently always fail, and return 0.</p> - <warning><p><c>driver_async_cancel()</c> is deferred and will - be removed in the OTP-R16 release.</p> + <warning><p><c>driver_async_cancel()</c> is deprecated and will + be removed in the OTP-R17 release.</p> </warning> </desc> @@ -2048,7 +2066,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <marker id="driver_lock_driver"></marker> <p>This function locks the driver used by the port <c>port</c> in memory for the rest of the emulator process' - lifetime. After this call, the driver behaves as one of Erlang's + lifetime. After this call, the driver behaves as one of Erlang's statically linked in drivers.</p> </desc> </func> @@ -2076,7 +2094,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <seealso marker="driver_entry">driver_entry</seealso>).</item> <tag><c>drv_data</c></tag> <item>The driver defined handle that will be passed in subsequent - calls to driver call-backs. Note, that the + calls to driver call-backs. Note, that the <seealso marker="driver_entry#start">driver start call-back</seealso> will not be called for this new driver instance. The driver defined handle is normally created in the @@ -2284,7 +2302,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <item>A thread identifier.</item> </taglist> <p>This function compares two thread identifiers for equality, - and returns <c>0</c> it they aren't equal, and + and returns <c>0</c> it they aren't equal, and a value not equal to <c>0</c> if they are equal.</p> <note><p>A Thread identifier may be reused very quickly after a thread has terminated. Therefore, if a thread @@ -2469,7 +2487,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len </taglist> <p>This function broadcasts on a condition variable. That is, if other threads are waiting on the condition variable being - broadcasted on, <em>all</em> of them will be woken. + broadcast on, <em>all</em> of them will be woken. </p> <p>This function is thread-safe.</p> </desc> @@ -2498,7 +2516,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len the calling thread when calling this function. </p> <note><p><c>erl_drv_cond_wait()</c> might return even though - no-one has signaled or broadcasted on the condition + no-one has signaled or broadcast on the condition variable. Code calling <c>erl_drv_cond_wait()</c> should always be prepared for <c>erl_drv_cond_wait()</c> returning even though the condition that the thread was @@ -2822,7 +2840,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len <item>A pointer to an output buffer.</item> <tag><c>value_size</c></tag> <item>A pointer to an integer. The integer is both used for - passing input and output sizes (see below). + passing input and output sizes (see below). </item> </taglist> <p>This function retrieves the value of an environment variable. @@ -2900,4 +2918,3 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len Guide Ch. 3)</p> </section> </cref> - diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index 767edc1cc0..5ee40823bc 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -235,7 +235,7 @@ <code> 1> Bin = <<1,2,3,4,5,6,7,8,9,10>>. -2> binary_part(Bin,{byte_size(Bin), -5)). +2> binary_part(Bin,{byte_size(Bin), -5}). <<6,7,8,9,10>> </code> diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in index 58e83540e1..9751982103 100644 --- a/erts/emulator/Makefile.in +++ b/erts/emulator/Makefile.in @@ -387,6 +387,13 @@ else UNIX_ONLY_BUILDS = endif +ifeq ($(TARGET), win32) +TMPVAR := $(shell LANG=C $(PERL) utils/make_compiler_flags -o $(TTF_DIR)/erl_compile_flags.h -v CONFIG_H "N/A" -v CFLAGS "$(CFLAGS)" -v LDFLAGS "$(LDFLAGS)") +else +# We force this to be run every time this makefile is executed +TMPVAR := $(shell LANG=C $(PERL) utils/make_compiler_flags -o $(TTF_DIR)/erl_compile_flags.h -f CONFIG_H "$(ERL_TOP)/erts/$(TARGET)/config.h" -v CFLAGS "$(CFLAGS)" -v LDFLAGS "$(LDFLAGS)") +endif + .PHONY: all ifdef VOID_EMULATOR all: @@ -959,6 +966,7 @@ SED_REPL_TTF_DIR=s|$(TTF_DIR)/|$$(TTF_DIR)/|g SED_REPL_ERL_TOP=s|\([ ]\)$(ERL_TOP)/|\1$$(ERL_TOP)/|g;s|^$(ERL_TOP)/|$$(ERL_TOP)/|g SED_REPL_POLL=s|$$(OBJDIR)/erl_poll.o|$$(OBJDIR)/erl_poll.kp.o $$(OBJDIR)/erl_poll.nkp.o|g SED_REPL_CHK_IO=s|$$(OBJDIR)/erl_check_io.o|$$(OBJDIR)/erl_check_io.kp.o $$(OBJDIR)/erl_check_io.nkp.o|g +SED_REPL_TTF_COMP_FLAGS=s|\([^/]\)erl_compile_flags\.h|\1$$(TTF_DIR)/erl_compile_flags\.h|g ifeq ($(TARGET),win32) #SED_PREFIX=$(SED_REPL_WIN_DRIVE); @@ -973,7 +981,7 @@ else SED_SUFFIX= endif -SED_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_O);$(SED_REPL_TTF_DIR);$(SED_REPL_ERL_TOP)$(SED_SUFFIX)' +SED_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_O);$(SED_REPL_TTF_DIR);$(SED_REPL_ERL_TOP)$(SED_SUFFIX);$(SED_REPL_TTF_COMP_FLAGS)' SED_DEPEND_ZLIB=sed '$(SED_PREFIX)$(SED_REPL_O_ZLIB)' ifdef HIPE_ENABLED diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names index eba1d0fa23..c2f32ba089 100644 --- a/erts/emulator/beam/atom.names +++ b/erts/emulator/beam/atom.names @@ -139,6 +139,7 @@ atom caseless atom catchlevel atom cd atom cdr +atom cflags atom characters_to_binary_int atom characters_to_list_int atom clear @@ -150,6 +151,7 @@ atom compact atom compat_rel atom compile atom compressed +atom config_h atom connect atom connected atom connection_closed @@ -301,6 +303,7 @@ atom label atom large_heap atom last_calls atom latin1 +atom ldflags atom Le='=<' atom lf atom line diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c index ff237b6a78..755c5e6882 100644 --- a/erts/emulator/beam/bif.c +++ b/erts/emulator/beam/bif.c @@ -3934,7 +3934,7 @@ BIF_RETTYPE halt_2(BIF_ALIST_2) { Sint code; Eterm optlist = BIF_ARG_2; - int flush = 0; + int flush = 1; for (optlist = BIF_ARG_2; is_list(optlist); diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c index bf8a37c71b..e6d9f83aed 100644 --- a/erts/emulator/beam/erl_alloc_util.c +++ b/erts/emulator/beam/erl_alloc_util.c @@ -4369,7 +4369,7 @@ info_options(Allctr_t *allctr, #endif "option lmbcs: %beu\n" "option smbcs: %beu\n" - "option mbcgs: %beu\n", + "option mbcgs: %beu\n" "option acul: %d\n", topt, allctr->ramv ? "true" : "false", diff --git a/erts/emulator/beam/erl_async.c b/erts/emulator/beam/erl_async.c index 054d1a48f6..e6d72f569b 100644 --- a/erts/emulator/beam/erl_async.c +++ b/erts/emulator/beam/erl_async.c @@ -583,6 +583,20 @@ int erts_async_ready_clean(void *varq, void *val) #endif /* +** Generate a fair async key prom an ErlDrvPort +** The port data gives a fair distribution grom port pointer +** to unsigned integer - to be used in key for driver_async below. +*/ +unsigned int driver_async_port_key(ErlDrvPort port) +{ + ErlDrvTermData td = driver_mk_port(port); + if (td == (ErlDrvTermData) NIL) { + return 0; + } + return (unsigned int) (UWord) internal_port_data(td); +} + +/* ** Schedule async_invoke on a worker thread ** NOTE will be syncrounous when threads are unsupported ** return values: diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c index e4fbd21c0e..673dfc658c 100755 --- a/erts/emulator/beam/erl_bif_info.c +++ b/erts/emulator/beam/erl_bif_info.c @@ -30,6 +30,7 @@ #include "bif.h" #include "big.h" #include "erl_version.h" +#include "erl_compile_flags.h" #include "erl_db_util.h" #include "erl_message.h" #include "erl_binary.h" @@ -2610,6 +2611,31 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1) BIF_RET(am_true); } #endif + else if (ERTS_IS_ATOM_STR("compile_info",BIF_ARG_1)) { + Uint sz; + Eterm res = NIL, tup, text; + Eterm *hp = HAlloc(BIF_P, 3*(2 + 3) + /* three 2-tuples and three cons */ + 2*(strlen(erts_build_flags_CONFIG_H) + + strlen(erts_build_flags_CFLAGS) + + strlen(erts_build_flags_LDFLAGS))); + + sz = strlen(erts_build_flags_CONFIG_H); + text = buf_to_intlist(&hp, erts_build_flags_CONFIG_H, sz, NIL); + tup = TUPLE2(hp, am_config_h, text); hp += 3; + res = CONS(hp, tup, res); hp += 2; + + sz = strlen(erts_build_flags_CFLAGS); + text = buf_to_intlist(&hp, erts_build_flags_CFLAGS, sz, NIL); + tup = TUPLE2(hp, am_cflags, text); hp += 3; + res = CONS(hp, tup, res); hp += 2; + + sz = strlen(erts_build_flags_LDFLAGS); + text = buf_to_intlist(&hp, erts_build_flags_LDFLAGS, sz, NIL); + tup = TUPLE2(hp, am_ldflags, text); hp += 3; + res = CONS(hp, tup, res); hp += 2; + + BIF_RET(res); + } BIF_ERROR(BIF_P, BADARG); } diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c index 713ac0ba18..ef3749a2c4 100644 --- a/erts/emulator/beam/erl_db_util.c +++ b/erts/emulator/beam/erl_db_util.c @@ -2319,6 +2319,8 @@ restart: break; case matchSilent: --esp; + if (in_flags & ERTS_PAM_IGNORE_TRACE_SILENT) + break; if (*esp == am_true) { erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR); ERTS_TRACE_FLAGS(c_p) |= F_TRACE_SILENT; @@ -4971,7 +4973,8 @@ static Eterm match_spec_test(Process *p, Eterm against, Eterm spec, int trace) save_cp = p->cp; p->cp = NULL; res = erts_match_set_run(p, mps, arr, n, - ERTS_PAM_COPY_RESULT, &ret_flags); + ERTS_PAM_COPY_RESULT|ERTS_PAM_IGNORE_TRACE_SILENT, + &ret_flags); p->cp = save_cp; } else { n = 0; diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h index e280563de1..1ab6e17f56 100644 --- a/erts/emulator/beam/erl_driver.h +++ b/erts/emulator/beam/erl_driver.h @@ -133,7 +133,7 @@ typedef struct { #define ERL_DRV_EXTENDED_MARKER (0xfeeeeeed) #define ERL_DRV_EXTENDED_MAJOR_VERSION 2 -#define ERL_DRV_EXTENDED_MINOR_VERSION 1 +#define ERL_DRV_EXTENDED_MINOR_VERSION 2 /* * The emulator will refuse to load a driver with different major @@ -638,6 +638,8 @@ EXTERN int erl_drv_send_term(ErlDrvTermData port, int len); /* Async IO functions */ +EXTERN unsigned int driver_async_port_key(ErlDrvPort port); + EXTERN long driver_async(ErlDrvPort ix, unsigned int* key, void (*async_invoke)(void*), diff --git a/erts/emulator/beam/erl_ptab.c b/erts/emulator/beam/erl_ptab.c index d69619dd44..fa5482b841 100644 --- a/erts/emulator/beam/erl_ptab.c +++ b/erts/emulator/beam/erl_ptab.c @@ -433,7 +433,7 @@ erts_ptab_mem_size(ErtsPTab *ptab) { UWord size = ptab->r.o.max*sizeof(erts_smp_atomic_t); if (ptab->r.o.free_id_data) - size += ptab->r.o.max*sizeof(Uint32); + size += ptab->r.o.max*sizeof(erts_smp_atomic32_t); return size; } @@ -474,7 +474,7 @@ erts_ptab_init_table(ErtsPTab *ptab, tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic_t)); alloc_sz = tab_sz; if (!legacy) - alloc_sz += ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(Uint32)); + alloc_sz += ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic32_t)); ptab->r.o.tab = erts_alloc_permanent_cache_aligned(atype, alloc_sz); tab_end = ((char *) ptab->r.o.tab) + tab_sz; tab_entry = ptab->r.o.tab; @@ -497,6 +497,10 @@ erts_ptab_init_table(ErtsPTab *ptab, ASSERT(ptab->r.o.pix_cl_shift + ptab->r.o.pix_cli_shift == bits); + ptab->r.o.invalid_element = invalid_element; + ptab->r.o.invalid_data = erts_ptab_id2data(ptab, invalid_element->id); + ptab->r.o.release_element = release_element; + if (legacy) { ptab->r.o.free_id_data = NULL; ptab->r.o.dix_cl_mask = 0; @@ -506,11 +510,11 @@ erts_ptab_init_table(ErtsPTab *ptab, } else { - tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(Uint32)); - ptab->r.o.free_id_data = (Uint32 *) tab_end; + tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic32_t)); + ptab->r.o.free_id_data = (erts_smp_atomic32_t *) tab_end; tab_cache_lines = tab_sz/ERTS_CACHE_LINE_SIZE; - ix_per_cache_line = (ERTS_CACHE_LINE_SIZE/sizeof(Uint32)); + ix_per_cache_line = (ERTS_CACHE_LINE_SIZE/sizeof(erts_smp_atomic32_t)); ptab->r.o.dix_cl_mask = tab_cache_lines-1; ptab->r.o.dix_cl_shift = erts_fit_in_bits_int32(ix_per_cache_line-1); @@ -525,7 +529,9 @@ erts_ptab_init_table(ErtsPTab *ptab, ix = 0; for (cl = 0; cl < tab_cache_lines; cl++) { for (cli = 0; cli < ix_per_cache_line; cli++) { - ptab->r.o.free_id_data[ix] = cli*tab_cache_lines+cl; + erts_smp_atomic32_init_nob(&ptab->r.o.free_id_data[ix], + cli*tab_cache_lines+cl); + ASSERT(erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]) != ptab->r.o.invalid_data); ix++; } } @@ -534,9 +540,6 @@ erts_ptab_init_table(ErtsPTab *ptab, erts_smp_atomic32_init_nob(&ptab->vola.tile.fid_ix, -1); } - ptab->r.o.invalid_element = invalid_element; - ptab->r.o.invalid_data = erts_ptab_id2data(ptab, invalid_element->id); - ptab->r.o.release_element = release_element; erts_smp_interval_init(&ptab->list.data.interval); ptab->list.data.deleted.start = NULL; @@ -606,11 +609,13 @@ erts_ptab_new_element(ErtsPTab *ptab, = erts_smp_current_interval_nob(erts_ptab_interval(ptab)); if (ptab->r.o.free_id_data) { + do { + ix = (Uint32) erts_smp_atomic32_inc_read_acqb(&ptab->vola.tile.aid_ix); + ix = ix_to_free_id_data_ix(ptab, ix); - ix = (Uint32) erts_smp_atomic32_inc_read_acqb(&ptab->vola.tile.aid_ix); - ix = ix_to_free_id_data_ix(ptab, ix); - - data = ptab->r.o.free_id_data[ix]; + data = erts_smp_atomic32_xchg_nob(&ptab->r.o.free_id_data[ix], + (erts_aint32_t)ptab->r.o.invalid_data); + }while ((Eterm)data == ptab->r.o.invalid_data); init_ptab_el(init_arg, (Eterm) data); @@ -763,7 +768,7 @@ erts_ptab_delete_element(ErtsPTab *ptab, erts_smp_atomic_set_relb(&ptab->r.o.tab[pix], ERTS_AINT_NULL); if (ptab->r.o.free_id_data) { - + Uint32 prev_data; /* Next data for this slot... */ data = (Uint32) erts_ptab_id2data(ptab, ptab_el->id); data += ptab->r.o.max; @@ -772,14 +777,17 @@ erts_ptab_delete_element(ErtsPTab *ptab, data += ptab->r.o.max; data &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE); } - ASSERT(data != ptab->r.o.invalid_data); ASSERT(pix == erts_ptab_data2pix(ptab, data)); - ix = (Uint32) erts_smp_atomic32_inc_read_relb(&ptab->vola.tile.fid_ix); - ix = ix_to_free_id_data_ix(ptab, ix); - - ptab->r.o.free_id_data[ix] = data; + do { + ix = (Uint32) erts_smp_atomic32_inc_read_relb(&ptab->vola.tile.fid_ix); + ix = ix_to_free_id_data_ix(ptab, ix); + + prev_data = erts_smp_atomic32_cmpxchg_nob(&ptab->r.o.free_id_data[ix], + data, + ptab->r.o.invalid_data); + }while ((Eterm)prev_data != ptab->r.o.invalid_data); } ASSERT(erts_smp_atomic32_read_nob(&ptab->vola.tile.count) > 0); @@ -1392,6 +1400,31 @@ erts_ptab_init(void) * Debug stuff */ +static void assert_ptab_consistency(ErtsPTab *ptab) +{ +#ifdef DEBUG + if (ptab->r.o.free_id_data) { + Uint32 ix, pix, data; + int free_pids = 0; + int null_slots = 0; + + for (ix=0; ix < ptab->r.o.max; ix++) { + if (erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]) != ptab->r.o.invalid_data) { + ++free_pids; + data = erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]); + pix = erts_ptab_data2pix(ptab, (Eterm) data); + ASSERT(erts_ptab_pix2intptr_nob(ptab, pix) == ERTS_AINT_NULL); + } + if (erts_smp_atomic_read_nob(&ptab->r.o.tab[ix]) == ERTS_AINT_NULL) { + ++null_slots; + } + } + ASSERT(free_pids == null_slots); + ASSERT(free_pids == ptab->r.o.max - erts_smp_atomic32_read_nob(&ptab->vola.tile.count)); + } +#endif +} + Sint erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next) { @@ -1402,46 +1435,49 @@ erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next) erts_ptab_rwlock(ptab); + assert_ptab_consistency(ptab); + if (ptab->r.o.free_id_data) { - Uint32 aid_ix, dix; + Uint32 id_ix, dix; if (set) { - Uint32 max_ix, ser, num, start; + Uint32 i, max_ix, num, stop_id_ix; max_ix = ptab->r.o.max - 1; - ser = next & ~max_ix; - start = num = next & max_ix; - - aid_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1; - - do { - Uint32 pix = erts_ptab_data2pix(ptab, num); + num = next; + id_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix); + + for (i=0; i <= max_ix; ++i) { + Uint32 pix; + ++num; + num &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE); + if (num == ptab->r.o.invalid_data) { + num += ptab->r.o.max; + num &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE); + } + pix = erts_ptab_data2pix(ptab, num); if (ERTS_AINT_NULL == erts_ptab_pix2intptr_nob(ptab, pix)) { - dix = ix_to_free_id_data_ix(ptab, aid_ix); - ptab->r.o.free_id_data[dix] = ser + num; - ASSERT(pix == erts_ptab_data2pix(ptab, ser+num)); - if (aid_ix == max_ix) - aid_ix = 0; - else - aid_ix++; + ++id_ix; + dix = ix_to_free_id_data_ix(ptab, id_ix); + erts_smp_atomic32_set_nob(&ptab->r.o.free_id_data[dix], num); + ASSERT(pix == erts_ptab_data2pix(ptab, num)); } - if (num == max_ix) - num = 0; - else - num++; - } while (num != start); + } + erts_smp_atomic32_set_nob(&ptab->vola.tile.fid_ix, id_ix); -#ifdef DEBUG - if (aid_ix == 0) - aid_ix = max_ix; - else - aid_ix--; - ASSERT((aid_ix & max_ix) == (((Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.fid_ix)) & max_ix)); -#endif + /* Write invalid_data in rest of free_id_data[]: */ + stop_id_ix = (1 + erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix)) & max_ix; + while (1) { + id_ix = (id_ix+1) & max_ix; + if (id_ix == stop_id_ix) + break; + dix = ix_to_free_id_data_ix(ptab, id_ix); + erts_smp_atomic32_set_nob(&ptab->r.o.free_id_data[dix], + ptab->r.o.invalid_data); + } } - - aid_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1; - dix = ix_to_free_id_data_ix(ptab, aid_ix); - res = (Sint) ptab->r.o.free_id_data[dix]; + id_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1; + dix = ix_to_free_id_data_ix(ptab, id_ix); + res = (Sint) erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[dix]); } else { /* Deprecated legacy algorithm... */ @@ -1485,6 +1521,7 @@ erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next) } } + assert_ptab_consistency(ptab); erts_ptab_rwunlock(ptab); return res; diff --git a/erts/emulator/beam/erl_ptab.h b/erts/emulator/beam/erl_ptab.h index c2d8bd9cad..e3e05f14af 100644 --- a/erts/emulator/beam/erl_ptab.h +++ b/erts/emulator/beam/erl_ptab.h @@ -100,7 +100,7 @@ typedef struct { typedef struct { erts_smp_atomic_t *tab; - Uint32 *free_id_data; + erts_smp_atomic32_t *free_id_data; Uint32 max; Uint32 pix_mask; Uint32 pix_cl_mask; diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index 2eec15867d..bacd5a5752 100755 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -937,7 +937,7 @@ char* Sint_to_buf(Sint, struct Sint_buf*); #define ERTS_IOLIST_OVERFLOW 1 #define ERTS_IOLIST_TYPE 2 -Eterm buf_to_intlist(Eterm**, char*, size_t, Eterm); /* most callers pass plain char*'s */ +Eterm buf_to_intlist(Eterm**, const char*, size_t, Eterm); /* most callers pass plain char*'s */ #define ERTS_IOLIST_TO_BUF_OVERFLOW (~((ErlDrvSizeT) 0)) #define ERTS_IOLIST_TO_BUF_TYPE_ERROR (~((ErlDrvSizeT) 1)) @@ -1018,9 +1018,10 @@ Eterm erts_match_set_lint(Process *p, Eterm matchexpr); extern void erts_match_set_release_result(Process* p); enum erts_pam_run_flags { - ERTS_PAM_TMP_RESULT=0, - ERTS_PAM_COPY_RESULT=1, - ERTS_PAM_CONTIGUOUS_TUPLE=2 + ERTS_PAM_TMP_RESULT=1, + ERTS_PAM_COPY_RESULT=2, + ERTS_PAM_CONTIGUOUS_TUPLE=4, + ERTS_PAM_IGNORE_TRACE_SILENT=8 }; extern Eterm erts_match_set_run(Process *p, Binary *mpsp, Eterm *args, int num_args, diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c index 84deaecb87..bd2be7afca 100644 --- a/erts/emulator/beam/utils.c +++ b/erts/emulator/beam/utils.c @@ -2983,7 +2983,7 @@ char* Sint_to_buf(Sint n, struct Sint_buf *buf) */ Eterm -buf_to_intlist(Eterm** hpp, char *buf, size_t len, Eterm tail) +buf_to_intlist(Eterm** hpp, const char *buf, size_t len, Eterm tail) { Eterm* hp = *hpp; size_t i = len; diff --git a/erts/emulator/drivers/common/efile_drv.c b/erts/emulator/drivers/common/efile_drv.c index 595b0488a8..c997fe1bf9 100644 --- a/erts/emulator/drivers/common/efile_drv.c +++ b/erts/emulator/drivers/common/efile_drv.c @@ -546,53 +546,81 @@ static void *ef_safe_realloc(void *op, Uint s) (((char *)(ev)->iov[(q)].iov_base) + (p)) /* int EV_GET_CHAR(ErlIOVec *ev, char *p, int *pp, int *qp) */ -#define EV_GET_CHAR(ev, p, pp, qp) \ - (*(pp)+1 <= (ev)->iov[*(qp)].iov_len \ - ? (*(p) = *EV_CHAR_P(ev, *(pp), *(qp)), \ - *(pp) = ( *(pp)+1 < (ev)->iov[*(qp)].iov_len \ - ? *(pp)+1 \ - : ((*(qp))++, 0)), \ - !0) \ - : 0) +#define EV_GET_CHAR(ev, p, pp, qp) efile_ev_get_char(ev, p ,pp, qp) +static int +efile_ev_get_char(ErlIOVec *ev, char *p, int *pp, int *qp) { + if (*(pp)+1 <= (ev)->iov[*(qp)].iov_len) { + *(p) = *EV_CHAR_P(ev, *(pp), *(qp)); + if (*(pp)+1 < (ev)->iov[*(qp)].iov_len) + *(pp) = *(pp)+1; + else { + (*(qp))++; + *pp = 0; + } + return !0; + } + return 0; +} /* Uint32 EV_UINT32(ErlIOVec *ev, int p, int q)*/ #define EV_UINT32(ev, p, q) \ ((Uint32) *(((unsigned char *)(ev)->iov[(q)].iov_base) + (p))) /* int EV_GET_UINT32(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) */ -#define EV_GET_UINT32(ev, p, pp, qp) \ - (*(pp)+4 <= (ev)->iov[*(qp)].iov_len \ - ? (*(p) = (EV_UINT32(ev, *(pp), *(qp)) << 24) \ - | (EV_UINT32(ev, *(pp)+1, *(qp)) << 16) \ - | (EV_UINT32(ev, *(pp)+2, *(qp)) << 8) \ - | (EV_UINT32(ev, *(pp)+3, *(qp))), \ - *(pp) = ( *(pp)+4 < (ev)->iov[*(qp)].iov_len \ - ? *(pp)+4 \ - : ((*(qp))++, 0)), \ - !0) \ - : 0) +#define EV_GET_UINT32(ev, p, pp, qp) efile_ev_get_uint32(ev,p,pp,qp) +static int +efile_ev_get_uint32(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) { + if (*(pp)+4 <= (ev)->iov[*(qp)].iov_len) { + *(p) = (EV_UINT32(ev, *(pp), *(qp)) << 24) + | (EV_UINT32(ev, *(pp)+1, *(qp)) << 16) + | (EV_UINT32(ev, *(pp)+2, *(qp)) << 8) + | (EV_UINT32(ev, *(pp)+3, *(qp))); + if (*(pp)+4 < (ev)->iov[*(qp)].iov_len) + *(pp) = *(pp)+4; + else { + (*(qp))++; + *pp = 0; + } + return !0; + } + return 0; +} /* Uint64 EV_UINT64(ErlIOVec *ev, int p, int q)*/ #define EV_UINT64(ev, p, q) \ ((Uint64) *(((unsigned char *)(ev)->iov[(q)].iov_base) + (p))) -/* int EV_GET_UINT64(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) */ -#define EV_GET_UINT64(ev, p, pp, qp) \ - (*(pp)+8 <= (ev)->iov[*(qp)].iov_len \ - ? (*(p) = (EV_UINT64(ev, *(pp), *(qp)) << 56) \ - | (EV_UINT64(ev, *(pp)+1, *(qp)) << 48) \ - | (EV_UINT64(ev, *(pp)+2, *(qp)) << 40) \ - | (EV_UINT64(ev, *(pp)+3, *(qp)) << 32) \ - | (EV_UINT64(ev, *(pp)+4, *(qp)) << 24) \ - | (EV_UINT64(ev, *(pp)+5, *(qp)) << 16) \ - | (EV_UINT64(ev, *(pp)+6, *(qp)) << 8) \ - | (EV_UINT64(ev, *(pp)+7, *(qp))), \ - *(pp) = ( *(pp)+8 < (ev)->iov[*(qp)].iov_len \ - ? *(pp)+8 \ - : ((*(qp))++, 0)), \ - !0) \ - : 0) +/* int EV_GET_UINT64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) */ +#define EV_GET_UINT64(ev, p, pp, qp) efile_ev_get_uint64(ev,p,pp,qp) +static int +efile_ev_get_uint64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) { + if (*(pp)+8 <= (ev)->iov[*(qp)].iov_len) { + *(p) = (EV_UINT64(ev, *(pp), *(qp)) << 56) + | (EV_UINT64(ev, *(pp)+1, *(qp)) << 48) + | (EV_UINT64(ev, *(pp)+2, *(qp)) << 40) + | (EV_UINT64(ev, *(pp)+3, *(qp)) << 32) + | (EV_UINT64(ev, *(pp)+4, *(qp)) << 24) + | (EV_UINT64(ev, *(pp)+5, *(qp)) << 16) + | (EV_UINT64(ev, *(pp)+6, *(qp)) << 8) + | (EV_UINT64(ev, *(pp)+7, *(qp))); + if (*(pp)+8 < (ev)->iov[*(qp)].iov_len) + *(pp) = *(pp)+8; + else { + (*(qp))++; + *pp = 0; + } + return !0; + } + return 0; +} +/* int EV_GET_SINT64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) */ +#define EV_GET_SINT64(ev, p, pp, qp) efile_ev_get_sint64(ev,p,pp,qp) +static int +efile_ev_get_sint64(ErlIOVec *ev, Sint64 *p, int *pp, int *qp) { + Uint64 *tmp = (Uint64*)p; + return EV_GET_UINT64(ev,tmp,pp,qp); +} #if 0 @@ -744,6 +772,7 @@ file_init(void) return 0; } + /********************************************************************* * Driver entry point -> start */ @@ -760,7 +789,7 @@ file_start(ErlDrvPort port, char* command) } desc->fd = FILE_FD_INVALID; desc->port = port; - desc->key = (unsigned int) (UWord) port; + desc->key = driver_async_port_key(port); desc->flags = 0; desc->invoke = NULL; desc->d = NULL; @@ -3105,25 +3134,25 @@ file_flush(ErlDrvData e) { /********************************************************************* * Driver entry point -> control + * Only debug functionality... */ static ErlDrvSSizeT file_control(ErlDrvData e, unsigned int command, char* buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen) { - /* - * warning: variable ‘desc’ set but not used - * [-Wunused-but-set-variable] - * ... no kidding ... - * - * file_descriptor *desc = (file_descriptor *)e; switch (command) { + case 'K' : + if (rlen < 4) { + *rbuf = EF_ALLOC(4); + } + (*rbuf)[0] = ((desc->key) >> 24) & 0xFF; + (*rbuf)[1] = ((desc->key) >> 16) & 0xFF; + (*rbuf)[2] = ((desc->key) >> 8) & 0xFF; + (*rbuf)[3] = (desc->key) & 0xFF; + return 4; default: return 0; - } - ASSERT(0); - desc = NULL; - */ - return 0; + } } /********************************************************************* @@ -3604,7 +3633,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) { for(i = 0; i < n; i++) { Uint32 sizeH, sizeL; size_t size; - if ( !EV_GET_UINT64(ev, &d->c.pwritev.specs[i].offset, &p, &q) + if ( !EV_GET_SINT64(ev, &d->c.pwritev.specs[i].offset, &p, &q) || !EV_GET_UINT32(ev, &sizeH, &p, &q) || !EV_GET_UINT32(ev, &sizeL, &p, &q)) { /* Misalignment in buffer */ @@ -3746,7 +3775,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) { for (i = 1; i < 1+n; i++) { Uint32 sizeH, sizeL; size_t size; - if ( !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q) + if ( !EV_GET_SINT64(ev, &d->c.preadv.offsets[i-1], &p, &q) || !EV_GET_UINT32(ev, &sizeH, &p, &q) || !EV_GET_UINT32(ev, &sizeL, &p, &q)) { reply_posix_error(desc, EINVAL); @@ -3814,7 +3843,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) { Uint32 origin; /* Origin of seek. */ if (ev->size < 1+8+4 - || !EV_GET_UINT64(ev, &offset, &p, &q) + || !EV_GET_SINT64(ev, &offset, &p, &q) || !EV_GET_UINT32(ev, &origin, &p, &q)) { /* Wrong length of buffer to contain offset and origin */ reply_posix_error(desc, EINVAL); @@ -3927,7 +3956,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) { goto done; } if (ev->size < 1+1+8+4 - || !EV_GET_UINT64(ev, &hdr_offset, &p, &q) + || !EV_GET_SINT64(ev, &hdr_offset, &p, &q) || !EV_GET_UINT32(ev, &max_size, &p, &q)) { /* Buffer too short to contain * the header offset and max size spec */ diff --git a/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c index be3d86a1d2..b36a103f8e 100644 --- a/erts/emulator/drivers/win32/win_efile.c +++ b/erts/emulator/drivers/win32/win_efile.c @@ -772,6 +772,7 @@ efile_may_openfile(Efile_error* errInfo, char *name) { DWORD attr; if ((attr = GetFileAttributesW(wname)) == INVALID_FILE_ATTRIBUTES) { + errno = ENOENT; return check_error(-1, errInfo); } diff --git a/erts/emulator/sys/win32/erl_win_dyn_driver.h b/erts/emulator/sys/win32/erl_win_dyn_driver.h index a7c53c904d..b9a9838a36 100644 --- a/erts/emulator/sys/win32/erl_win_dyn_driver.h +++ b/erts/emulator/sys/win32/erl_win_dyn_driver.h @@ -80,6 +80,7 @@ WDD_TYPEDEF(int, erl_drv_output_term, (ErlDrvTermData, ErlDrvTermData*, int)); WDD_TYPEDEF(int, driver_output_term, (ErlDrvPort, ErlDrvTermData*, int)); WDD_TYPEDEF(int, erl_drv_send_term, (ErlDrvTermData, ErlDrvTermData, ErlDrvTermData*, int)); WDD_TYPEDEF(int, driver_send_term, (ErlDrvPort, ErlDrvTermData, ErlDrvTermData*, int)); +WDD_TYPEDEF(unsigned int, driver_async_port_key, (ErlDrvPort)); WDD_TYPEDEF(long, driver_async, (ErlDrvPort,unsigned int*,void (*)(void*),void*,void (*)(void*))); WDD_TYPEDEF(int, driver_async_cancel, (unsigned int)); WDD_TYPEDEF(int, driver_lock_driver, (ErlDrvPort)); @@ -197,6 +198,7 @@ typedef struct { WDD_FTYPE(driver_output_term) *driver_output_term; WDD_FTYPE(erl_drv_send_term) *erl_drv_send_term; WDD_FTYPE(driver_send_term) *driver_send_term; + WDD_FTYPE(driver_async_port_key) *driver_async_port_key; WDD_FTYPE(driver_async) *driver_async; WDD_FTYPE(driver_async_cancel) *driver_async_cancel; WDD_FTYPE(driver_lock_driver) *driver_lock_driver; @@ -308,6 +310,7 @@ extern TWinDynDriverCallbacks WinDynDriverCallbacks; #define driver_output_term (WinDynDriverCallbacks.driver_output_term) #define erl_drv_send_term (WinDynDriverCallbacks.erl_drv_send_term) #define driver_send_term (WinDynDriverCallbacks.driver_send_term) +#define driver_async_port_key (WinDynDriverCallbacks.driver_async_port_key) #define driver_async (WinDynDriverCallbacks.driver_async) #define driver_async_cancel (WinDynDriverCallbacks.driver_async_cancel) #define driver_lock_driver (WinDynDriverCallbacks.driver_lock_driver) @@ -443,6 +446,7 @@ do { \ ((W).driver_output_term) = driver_output_term; \ ((W).erl_drv_send_term) = erl_drv_send_term; \ ((W).driver_send_term) = driver_send_term; \ +((W).driver_async_port_key) = driver_async_port_key; \ ((W).driver_async) = driver_async; \ ((W).driver_async_cancel) = driver_async_cancel; \ ((W).driver_lock_driver) = driver_lock_driver; \ diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile index 9594ab48b1..f02ca3cb98 100644 --- a/erts/emulator/test/Makefile +++ b/erts/emulator/test/Makefile @@ -140,7 +140,8 @@ EMAKEFILE=Emakefile TEST_SPEC_FILES= emulator.spec \ emulator.spec.win \ - emulator_bench.spec + emulator_bench.spec \ + emulator_smoke.spec # ---------------------------------------------------- # Release directory specification diff --git a/erts/emulator/test/efile_SUITE.erl b/erts/emulator/test/efile_SUITE.erl index 65367eab98..f79bb761d1 100644 --- a/erts/emulator/test/efile_SUITE.erl +++ b/erts/emulator/test/efile_SUITE.erl @@ -19,16 +19,16 @@ -module(efile_SUITE). -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2]). --export([iter_max_files/1]). +-export([iter_max_files/1, async_dist/1]). --export([do_iter_max_files/2]). +-export([do_iter_max_files/2, do_async_dist/1]). -include_lib("test_server/include/test_server.hrl"). suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> - [iter_max_files]. + [iter_max_files, async_dist]. groups() -> []. @@ -45,6 +45,84 @@ init_per_group(_GroupName, Config) -> end_per_group(_GroupName, Config) -> Config. +do_async_dist(Dir) -> + X = 100, + AT = erlang:system_info(thread_pool_size), + Keys = file_keys(Dir,AT*X,[],[]), + Tab = ets:new(x,[ordered_set]), + [ ets:insert(Tab,{N,0}) || N <- lists:seq(0,AT-1) ], + [ ets:update_counter(Tab,(N rem AT),1) || N <- Keys ], + Res = [ V || {_,V} <- ets:tab2list(Tab) ], + ets:delete(Tab), + {Res, sdev(Res)/X}. + +sdev(List) -> + Len = length(List), + Mean = lists:sum(List)/Len, + math:sqrt(lists:sum([ (X - Mean) * (X - Mean) || X <- List ]) / Len). + +file_keys(_,0,FdList,FnList) -> + [ file:close(FD) || FD <- FdList ], + [ file:delete(FN) || FN <- FnList ], + []; +file_keys(Dir,Num,FdList,FnList) -> + Name = "dummy"++integer_to_list(Num), + FN = filename:join([Dir,Name]), + case file:open(FN,[write,raw]) of + {ok,FD} -> + {file_descriptor,prim_file,{Port,_}} = FD, + <<X:32/integer-big>> = + iolist_to_binary(erlang:port_control(Port,$K,[])), + [X | file_keys(Dir,Num-1,[FD|FdList],[FN|FnList])]; + {error,_} -> + % Try freeing up FD's if there are any + case FdList of + [] -> + exit({cannot_open_file,FN}); + _ -> + [ file:close(FD) || FD <- FdList ], + [ file:delete(F) || F <- FnList ], + file_keys(Dir,Num,[],[]) + end + end. + +async_dist(doc) -> + "Check that the distribution of files over async threads is fair"; +async_dist(Config) when is_list(Config) -> + DataDir = ?config(data_dir,Config), + TestFile = filename:join(DataDir, "existing_file"), + Dir = filename:dirname(code:which(?MODULE)), + AsyncSizes = [7,10,100,255,256,64,63,65], + Max = 0.5, + + lists:foreach(fun(Size) -> + {ok,Node} = + test_server:start_node + (test_iter_max_files,slave, + [{args, + "+A "++integer_to_list(Size)++ + " -pa " ++ Dir}]), + {Distr,SD} = rpc:call(Node,?MODULE,do_async_dist, + [DataDir]), + test_server:stop_node(Node), + if + SD > Max -> + io:format("Bad async queue distribution for " + "~p async threads:~n" + " Standard deviation is ~p~n" + " Key distribution:~n ~lp~n", + [Size,SD,Distr]), + exit({bad_async_dist,Size,SD,Distr}); + true -> + io:format("OK async queue distribution for " + "~p async threads:~n" + " Standard deviation is ~p~n" + " Key distribution:~n ~lp~n", + [Size,SD,Distr]), + ok + end + end, AsyncSizes), + ok. %% %% Open as many files as possible. Do this several times and check @@ -98,7 +176,7 @@ open_files(Name) -> ?line case file:open(Name, [read,raw]) of {ok, Fd} -> [Fd| open_files(Name)]; - {error, Reason} -> -% io:format("Error reason: ~p", [Reason]), + {error, _Reason} -> +% io:format("Error reason: ~p", [_Reason]), [] end. diff --git a/erts/emulator/test/emulator_smoke.spec b/erts/emulator/test/emulator_smoke.spec new file mode 100644 index 0000000000..3219aeb823 --- /dev/null +++ b/erts/emulator/test/emulator_smoke.spec @@ -0,0 +1,3 @@ +{suites,"../emulator_test",[smoke_test_SUITE,time_SUITE]}. +{cases,"../emulator_test",crypto_SUITE,[t_md5]}. +{cases,"../emulator_test",float_SUITE,[fpe,cmp_integer]}.
\ No newline at end of file diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl index 8dbc6b6538..b56b7ce525 100644 --- a/erts/emulator/test/match_spec_SUITE.erl +++ b/erts/emulator/test/match_spec_SUITE.erl @@ -22,7 +22,7 @@ -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, not_run/1]). -export([test_1/1, test_2/1, test_3/1, bad_match_spec_bin/1, - trace_control_word/1, silent/1, silent_no_ms/1, + trace_control_word/1, silent/1, silent_no_ms/1, silent_test/1, ms_trace2/1, ms_trace3/1, boxed_and_small/1, destructive_in_test_bif/1, guard_exceptions/1, unary_plus/1, unary_minus/1, moving_labels/1]). @@ -55,7 +55,7 @@ all() -> case test_server:is_native(match_spec_SUITE) of false -> [test_1, test_2, test_3, bad_match_spec_bin, - trace_control_word, silent, silent_no_ms, ms_trace2, + trace_control_word, silent, silent_no_ms, silent_test, ms_trace2, ms_trace3, boxed_and_small, destructive_in_test_bif, guard_exceptions, unary_plus, unary_minus, fpe, moving_labels, @@ -501,6 +501,14 @@ silent_no_ms(Config) when is_list(Config) -> {trace,Tracee,return_to,{?MODULE,f3,2}}] end). +silent_test(doc) -> + ["Test that match_spec_test does not activate silent"]; +silent_test(_Config) -> + {flags,[]} = erlang:trace_info(self(),flags), + erlang:match_spec_test([],[{'_',[],[{silent,true}]}],trace), + {flags,[]} = erlang:trace_info(self(),flags). + + ms_trace2(doc) -> ["Test the match spec functions {trace/2}"]; ms_trace2(suite) -> []; diff --git a/erts/emulator/test/receive_SUITE.erl b/erts/emulator/test/receive_SUITE.erl index b070e2b986..2e7ac1f50c 100644 --- a/erts/emulator/test/receive_SUITE.erl +++ b/erts/emulator/test/receive_SUITE.erl @@ -59,22 +59,25 @@ end_per_testcase(_Func, Config) -> ?t:timetrap_cancel(Dog). call_with_huge_message_queue(Config) when is_list(Config) -> - ?line Pid = spawn_link(fun echo_loop/0), + Pid = spawn_link(fun echo_loop/0), - ?line {Time,ok} = tc(fun() -> calls(10, Pid) end), + {Time,ok} = tc(fun() -> calls(10, Pid) end), - ?line [self() ! {msg,N} || N <- lists:seq(1, 500000)], + [self() ! {msg,N} || N <- lists:seq(1, 500000)], erlang:garbage_collect(), - ?line {NewTime,ok} = tc(fun() -> calls(10, Pid) end), + {NewTime1,ok} = tc(fun() -> calls(10, Pid) end), + {NewTime2,ok} = tc(fun() -> calls(10, Pid) end), + io:format("Time for empty message queue: ~p", [Time]), - io:format("Time for huge message queue: ~p", [NewTime]), + io:format("Time1 for huge message queue: ~p", [NewTime1]), + io:format("Time2 for huge message queue: ~p", [NewTime2]), - case (NewTime+1) / (Time+1) of + case hd(lists:sort([(NewTime1+1) / (Time+1), (NewTime2+1) / (Time+1)])) of Q when Q < 10 -> ok; Q -> - io:format("Q = ~p", [Q]), - ?line ?t:fail() + io:format("Best Q = ~p", [Q]), + ?t:fail() end, ok. @@ -95,8 +98,8 @@ call(Pid, Msg) -> end. receive_in_between(Config) when is_list(Config) -> - ?line Pid = spawn_link(fun echo_loop/0), - ?line [{ok,{a,b}} = call2(Pid, {a,b}) || _ <- lists:seq(1, 100000)], + Pid = spawn_link(fun echo_loop/0), + [{ok,{a,b}} = call2(Pid, {a,b}) || _ <- lists:seq(1, 100000)], ok. call2(Pid, Msg) -> diff --git a/erts/emulator/test/system_profile_SUITE.erl b/erts/emulator/test/system_profile_SUITE.erl index ba94a371be..a387c08ef9 100644 --- a/erts/emulator/test/system_profile_SUITE.erl +++ b/erts/emulator/test/system_profile_SUITE.erl @@ -198,7 +198,9 @@ check_multi_scheduling_block(Nodes) -> Pid = start_profiler_process(), undefined = erlang:system_profile(Pid, [scheduler]), {ok, Supervisor} = start_load(Nodes), + wait(600), erlang:system_flag(multi_scheduling, block), + wait(600), erlang:system_flag(multi_scheduling, unblock), {Pid, [scheduler]} = erlang:system_profile(undefined, []), Events = get_profiler_events(), @@ -213,7 +215,6 @@ check_block_system(Nodes) -> Pid = start_profiler_process(), undefined = erlang:system_profile(Pid, [scheduler]), {ok, Supervisor} = start_load(Nodes), - % FIXME: remove wait !! wait(300), undefined = erlang:system_monitor(Dummy, [busy_port]), {Dummy, [busy_port]} = erlang:system_monitor(undefined, []), diff --git a/erts/emulator/utils/make_compiler_flags b/erts/emulator/utils/make_compiler_flags new file mode 100755 index 0000000000..cebe8cd0c5 --- /dev/null +++ b/erts/emulator/utils/make_compiler_flags @@ -0,0 +1,87 @@ +#!/usr/bin/env perl +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 1999-2009. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# +use strict; +use File::Copy; +# This program generates global constants that contains +# config.h, CFLAGS and LDFLAGS + +my $file = ""; +my %constants = (); +my $prev_file = ""; + +while (@ARGV) { + my $d = shift; + if ( $d =~ /^-o$/ ) { + $file = shift or die("-o requires argument"); + open FILE, "<$file" or next; + $prev_file = do { local $/; <FILE> }; + close FILE; + next; + } + if ( $d =~ /^-f/ ) { + my $var = shift or die("-f requires two argument"); + my $value = shift or die("-f requires two argument"); + open FILE, "<$value"; + $value = do { local $/; <FILE> }; + close FILE; + + $value =~ s/\n/\\n\\\n/g; + + $constants{$var} = $value; + } + if ( $d =~ /^-v/ ) { + my $var = shift or die("-v requires two argument"); + my $value = shift; + $constants{$var} = $value; + } +} + +foreach(keys %constants) { + my $value = $constants{$_}; + $value =~ s/"/\\"/g; + $constants{$_} = $value +} + +# Did we want output to a file? +open(my $oldout, ">&STDOUT") or die "Can't dup STDOUT: $!"; +if ( $file ) { + open STDOUT, ">$file.tmp" or die("can't open $file for writing"); +} + +my(@prog) = split('/', $0); +my($prog) = $prog[$#prog]; +print "/* Warning: Do not edit this file.\n"; +print " Auto-generated by '$prog'.*/\n"; + +foreach(keys %constants) { + print "const char* erts_build_flags_$_ = \"$constants{$_}\";\n" +} + +open(STDOUT, ">&", $oldout) or die "Can't dup \$oldout: $!"; + +open FILE, "<$file.tmp"; +my $new_file = do { local $/; <FILE> }; +close FILE; + +if ($new_file ne $prev_file) { + move("$file.tmp","$file"); +} else { + unlink("$file.tmp"); +} diff --git a/erts/etc/Makefile b/erts/etc/Makefile index 2b32b8ae50..5b54ef9c3e 100644 --- a/erts/etc/Makefile +++ b/erts/etc/Makefile @@ -18,10 +18,11 @@ # include $(ERL_TOP)/make/target.mk - SUB_DIRECTORIES = common ifeq ($(TARGET),win32) SUB_DIRECTORIES += win32 +else +SUB_DIRECTORIES += unix endif include $(ERL_TOP)/make/otp_subdir.mk diff --git a/erts/etc/unix/Makefile b/erts/etc/unix/Makefile new file mode 100644 index 0000000000..e85d2fab0c --- /dev/null +++ b/erts/etc/unix/Makefile @@ -0,0 +1,46 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2013. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# + +include $(ERL_TOP)/make/output.mk +include $(ERL_TOP)/make/target.mk + +include $(ERL_TOP)/make/$(TARGET)/otp.mk +include ../../vsn.mk + +opt debug: etc + +.PHONY: etc +etc: etp-commands + +etp-commands: etp-commands.in + sed 's:@ERL_TOP@:${ERL_TOP}:g' etp-commands.in > etp-commands + +.PHONY: docs +docs: + +.PHONY: clean +clean: + +# ---------------------------------------------------- +# Release Target +# ---------------------------------------------------- +include $(ERL_TOP)/make/otp_release_targets.mk + +.PHONY: release_spec +release_spec: etc
\ No newline at end of file diff --git a/erts/etc/unix/etp-commands b/erts/etc/unix/etp-commands.in index f059662271..54ff7b3e3a 100644 --- a/erts/etc/unix/etp-commands +++ b/erts/etc/unix/etp-commands.in @@ -2075,6 +2075,33 @@ document etp-system-info %--------------------------------------------------------------------------- end +define etp-compile-info + printf "--------------- Compile Information ---------------\n" + printf "CFLAGS: %s\n", erts_build_flags_CFLAGS + printf "LDFLAGS: %s\n", erts_build_flags_LDFLAGS + printf "Use etp-config-h-info to dump config.h\n" +end + +document etp-compile-info +%--------------------------------------------------------------------------- +% etp-compile-info +% +% Print information about how the system was compiled +%--------------------------------------------------------------------------- +end + +define etp-config-h-info + printf "%s", erts_build_flags_CONFIG_H +end + +document etp-config-h-info +%--------------------------------------------------------------------------- +% etp-config-h-info +% +% Dump the contents of config.h when the system was compiled +%--------------------------------------------------------------------------- +end + define etp-dictdump # Args: ProcDict* # @@ -2730,6 +2757,10 @@ document etp-run %--------------------------------------------------------------------------- end +define etp-thr + source @ERL_TOP@/erts/etc/unix/etp-thr.py +end + ############################################################################ # Toolbox parameter handling # diff --git a/erts/etc/unix/etp-thr.py b/erts/etc/unix/etp-thr.py new file mode 100644 index 0000000000..64fb858d20 --- /dev/null +++ b/erts/etc/unix/etp-thr.py @@ -0,0 +1,55 @@ +# +# %CopyrightBegin% +# +# Copyright Ericsson AB 2013. All Rights Reserved. +# +# The contents of this file are subject to the Erlang Public License, +# Version 1.1, (the "License"); you may not use this file except in +# compliance with the License. You should have received a copy of the +# Erlang Public License along with this software. If not, it can be +# retrieved online at http://www.erlang.org/. +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# %CopyrightEnd% +# + +def get_thread_name(t): + f = gdb.newest_frame(); + while f: + if f.name() == "async_main": + return "async"; + elif f.name() == "erts_sys_main_thread": + return "main"; + elif f.name() == "signal_dispatcher_thread_func": + return "signal_dispatcher"; + elif f.name() == "sys_msg_dispatcher_func": + return "sys_msg_dispatcher"; + elif f.name() == "child_waiter": + return "child_waiter"; + elif f.name() == "sched_thread_func": + return "scheduler"; + elif f.name() == "aux_thread": + return "aux"; + f = f.older(); + return "unknown"; + + +curr_thread = gdb.selected_thread(); + +for i in gdb.inferiors(): + gdb.write(" Id Thread Name Frame\n"); + for t in i.threads(): + t.switch(); + if curr_thread == t: + gdb.write("*"); + else: + gdb.write(" "); + gdb.write("{0:<3} {1:20} {2}\n".format( + t.num,get_thread_name(t), + gdb.newest_frame().name())); + +curr_thread.switch(); diff --git a/erts/etc/unix/run_erl.c b/erts/etc/unix/run_erl.c index 53c779b1be..b69e31f784 100644 --- a/erts/etc/unix/run_erl.c +++ b/erts/etc/unix/run_erl.c @@ -1142,6 +1142,14 @@ static void daemon_init(void) sf_close(i); } + /* Necessary on some platforms */ + + open("/dev/null", O_RDONLY); /* Order is important! */ + open("/dev/null", O_WRONLY); + open("/dev/null", O_WRONLY); + + errno = 0; /* if set by open */ + OPEN_SYSLOG(); run_daemon = 1; } diff --git a/erts/etc/unix/to_erl.c b/erts/etc/unix/to_erl.c index 0f27b64811..b9e397cbf2 100644 --- a/erts/etc/unix/to_erl.c +++ b/erts/etc/unix/to_erl.c @@ -339,7 +339,7 @@ int main(int argc, char **argv) tty_smode.c_cc[VTIME] =0;/* Note that VTIME is the same as VEOL! */ tty_smode.c_cc[VINTR] =3; - tcsetattr(0, TCSANOW, &tty_smode); + tcsetattr(0, TCSADRAIN, &tty_smode); #ifdef DEBUG show_terminal_settings(&tty_smode); @@ -484,7 +484,7 @@ int main(int argc, char **argv) * Reset terminal characterstics * XXX */ - tcsetattr(0, TCSANOW, &tty_rmode); + tcsetattr(0, TCSADRAIN, &tty_rmode); return 0; } diff --git a/erts/include/internal/ethread.h b/erts/include/internal/ethread.h index 407097d4b1..38b8e9e9b6 100644 --- a/erts/include/internal/ethread.h +++ b/erts/include/internal/ethread.h @@ -361,6 +361,10 @@ extern ethr_runtime_t ethr_runtime__; # endif #endif /* !ETHR_DISABLE_NATIVE_IMPLS */ +#if !defined(ETHR_HAVE_NATIVE_ATOMIC32) && !defined(ETHR_HAVE_NATIVE_ATOMIC64) && !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(ETHR_SMP_REQUIRE_NATIVE_IMPLS) +#error "No native ethread implementation found. If you want to use fallbacks you have to disable native ethread support with configure." +#endif + #include "ethr_atomics.h" /* The atomics API */ #if defined(__GNUC__) diff --git a/erts/include/internal/gcc/ethread.h b/erts/include/internal/gcc/ethread.h index fcfdc39441..365a3535cf 100644 --- a/erts/include/internal/gcc/ethread.h +++ b/erts/include/internal/gcc/ethread.h @@ -25,6 +25,9 @@ #ifndef ETHREAD_GCC_H__ #define ETHREAD_GCC_H__ +#if defined(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32) \ + || defined(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64) + #ifndef ETHR_MEMBAR # include "ethr_membar.h" #endif @@ -46,3 +49,5 @@ #endif #endif + +#endif diff --git a/erts/preloaded/.gitignore b/erts/preloaded/.gitignore new file mode 100644 index 0000000000..40e4c68638 --- /dev/null +++ b/erts/preloaded/.gitignore @@ -0,0 +1,2 @@ +ebin/erts.app +src/prim_eval.abstr diff --git a/erts/preloaded/Makefile b/erts/preloaded/Makefile index 4235a7fe57..31fdeb96c5 100644 --- a/erts/preloaded/Makefile +++ b/erts/preloaded/Makefile @@ -18,7 +18,6 @@ # include $(ERL_TOP)/make/target.mk - SUB_DIRECTORIES = src include $(ERL_TOP)/make/otp_subdir.mk diff --git a/erts/preloaded/src/Makefile b/erts/preloaded/src/Makefile index 7a7b7fb644..c1580b1495 100644 --- a/erts/preloaded/src/Makefile +++ b/erts/preloaded/src/Makefile @@ -55,9 +55,15 @@ ERL_FILES= $(PRE_LOADED_ERL_MODULES:%=%.erl) BEAM_FILES= $(PRE_LOADED_BEAM_MODULES:%=%.S) STUBS_FILES= $(PRE_LOADED_BEAM_MODULES:%=%.erl) -TARGET_FILES = $(PRE_LOADED_MODULES:%=$(EBIN)/%.$(EMULATOR)) +TARGET_FILES = $(PRE_LOADED_MODULES:%=$(EBIN)/%.$(EMULATOR)) \ + $(APP_TARGET) STATIC_TARGET_FILES = $(PRE_LOADED_MODULES:%=$(STATIC_EBIN)/%.$(EMULATOR)) +APP_FILE= erts.app +APP_SRC= $(APP_FILE).src +APP_TARGET= $(STATIC_EBIN)/$(APP_FILE) + + KERNEL_SRC=$(ERL_TOP)/lib/kernel/src KERNEL_INCLUDE=$(ERL_TOP)/lib/kernel/include STDLIB_INCLUDE=$(ERL_TOP)/lib/stdlib/include @@ -72,14 +78,17 @@ clean: copy: cp *.beam $(STATIC_EBIN) +$(APP_TARGET): $(APP_SRC) $(ERL_TOP)/erts/vsn.mk + $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@ + include $(ERL_TOP)/make/otp_release_targets.mk -release_spec: +release_spec: $(APP_TARGET) $(INSTALL_DIR) "$(RELSYSDIR)/src" $(INSTALL_DATA) $(ERL_FILES) $(BEAM_FILES) $(STUBS_FILES) "$(RELSYSDIR)/src" $(INSTALL_DIR) "$(RELSYSDIR)/ebin" - $(INSTALL_DATA) $(STATIC_TARGET_FILES) "$(RELSYSDIR)/ebin" + $(INSTALL_DATA) $(STATIC_TARGET_FILES) $(APP_TARGET) "$(RELSYSDIR)/ebin" release_docs_spec: diff --git a/erts/preloaded/src/erts.app.src b/erts/preloaded/src/erts.app.src new file mode 100644 index 0000000000..fd3e8cb692 --- /dev/null +++ b/erts/preloaded/src/erts.app.src @@ -0,0 +1,41 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +{application, erts, [ + {description, "ERTS CXC 138 10"}, + {vsn, "%VSN%"}, + {modules, [ + %% preloaded + erlang, + erl_prim_loader, + erts_internal, + init, + otp_ring0, + prim_eval, + prim_file, + prim_inet, + prim_zip, + zlib + ]}, + {registered, []}, + {applications, []}, + {env, []}, + {mod, {erts, []}} + ]}. + +%% vim: ft=erlang diff --git a/erts/test/Makefile b/erts/test/Makefile index 6b409e2f1b..74a5bb1ccc 100644 --- a/erts/test/Makefile +++ b/erts/test/Makefile @@ -79,7 +79,7 @@ release_spec: release_tests_spec: opt $(INSTALL_DIR) "$(RELSYSDIR)" - $(INSTALL_DATA) system.spec system.dynspec \ + $(INSTALL_DATA) system.spec system.dynspec system_smoke.spec \ $(ERL_FILES) $(TARGET_FILES) "$(RELSYSDIR)" chmod -R u+w "$(RELSYSDIR)" tar cf - *_SUITE_data utils | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/erts/test/erlc_SUITE.erl b/erts/test/erlc_SUITE.erl index ab774dbc4f..ed7a43c7e7 100644 --- a/erts/test/erlc_SUITE.erl +++ b/erts/test/erlc_SUITE.erl @@ -23,7 +23,8 @@ -export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2, compile_erl/1, compile_yecc/1, compile_script/1, - compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1]). + compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1, + make_dep_options/1]). -include_lib("test_server/include/test_server.hrl"). @@ -31,7 +32,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [compile_erl, compile_yecc, compile_script, compile_mib, - good_citizen, deep_cwd, arg_overflow]. + good_citizen, deep_cwd, arg_overflow, make_dep_options]. groups() -> []. @@ -255,13 +256,89 @@ erlc() -> Erlc -> "\"" ++ Erlc ++ "\"" end. - + +make_dep_options(Config) -> + {SrcDir,OutDir,Cmd} = get_cmd(Config), + FileName = filename:join(SrcDir, "erl_test_ok.erl"), + + + DepRE = ["/erl_test_ok[.]beam: \\\\$", + "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$", + "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$", + "_OK_"], + + DepRETarget = + ["^target: \\\\$", + "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$", + "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$", + "_OK_"], + + DepREMP = + ["/erl_test_ok[.]beam: \\\\$", + "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$", + "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$", + [], + "/system_test/erlc_SUITE_data/include/erl_test.hrl:$", + "_OK_"], + + DepREMissing = + ["/erl_test_missing_header[.]beam: \\\\$", + "/system_test/erlc_SUITE_data/src/erl_test_missing_header[.]erl \\\\$", + "/system_test/erlc_SUITE_data/include/erl_test[.]hrl \\\\$", + "missing.hrl$", + "_OK_"], + + %% Test plain -M + run(Config, Cmd, FileName, "-M", DepRE), + + %% Test -MF File + DepFile = filename:join(OutDir, "my.deps"), + run(Config, Cmd, FileName, "-MF "++DepFile, ["_OK_"]), + {ok,MFBin} = file:read_file(DepFile), + verify_result(binary_to_list(MFBin)++["_OK_"], DepRE), + + %% Test -MD + run(Config, Cmd, FileName, "-MD", ["_OK_"]), + MDFile = filename:join(OutDir, "erl_test_ok.Pbeam"), + {ok,MFBin} = file:read_file(MDFile), + + %% Test -M -MT Target + run(Config, Cmd, FileName, "-M -MT target", DepRETarget), + + %% Test -MF File -MT Target + TargetDepFile = filename:join(OutDir, "target.deps"), + run(Config, Cmd, FileName, "-MF "++TargetDepFile++" -MT target", + ["_OK_"]), + {ok,TargetBin} = file:read_file(TargetDepFile), + verify_result(binary_to_list(TargetBin)++["_OK_"], DepRETarget), + + %% Test -MD -MT Target + run(Config, Cmd, FileName, "-MD -MT target", ["_OK_"]), + TargetMDFile = filename:join(OutDir, "erl_test_ok.Pbeam"), + {ok,TargetBin} = file:read_file(TargetMDFile), + + %% Test -M -MQ Target. (Note: Passing a $ on the command line + %% portably for Unix and Windows is tricky, so we will just test + %% that MQ works at all.) + run(Config, Cmd, FileName, "-M -MQ target", DepRETarget), + + %% Test -M -MP + run(Config, Cmd, FileName, "-M -MP", DepREMP), + + %% Test -M -MG + MissingHeader = filename:join(SrcDir, "erl_test_missing_header.erl"), + run(Config, Cmd, MissingHeader, "-M -MG", DepREMissing), + ok. + %% Runs a command. run(Config, Cmd0, Name, Options, Expect) -> Cmd = Cmd0 ++ " " ++ Options ++ " " ++ Name, io:format("~s", [Cmd]), Result = run_command(Config, Cmd), + verify_result(Result, Expect). + +verify_result(Result, Expect) -> Messages = split(Result, [], []), io:format("Result: ~p", [Messages]), io:format("Expected: ~p", [Expect]), diff --git a/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl new file mode 100644 index 0000000000..4d6c42c803 --- /dev/null +++ b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl @@ -0,0 +1,22 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +-module(erl_test_missing_header). +-include("erl_test.hrl"). +-include("missing.hrl"). diff --git a/erts/test/system_smoke.spec b/erts/test/system_smoke.spec new file mode 100644 index 0000000000..933d1ba22d --- /dev/null +++ b/erts/test/system_smoke.spec @@ -0,0 +1,3 @@ +{suites,"../system_test",[ethread_SUITE]}. +{cases,"../system_test",otp_SUITE,[undefined_functions]}. +{skip_cases,"../system_test",ethread_SUITE,[max_threads],"Skip"}. diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl index f5355bfefe..bd37b690b6 100644 --- a/lib/common_test/src/ct_logs.erl +++ b/lib/common_test/src/ct_logs.erl @@ -446,6 +446,8 @@ tc_print(Category,Importance,Format,Args) -> ct_util:get_verbosity('$unspecified'); {error,bad_invocation} -> ?MAX_VERBOSITY; + {error,_Failure} -> + ?MAX_VERBOSITY; Val -> Val end, @@ -690,14 +692,15 @@ logger_loop(State) -> false -> %% Group leader is dead, so write to the %% CtLog or unexpected_io log instead - unexpected_io(Pid,Category,List,State), + unexpected_io(Pid,Category,Importance, + List,State), logger_loop(State) end; {ct_log,_Fd,TCGLs} -> %% If category is ct_internal then write %% to ct_log, else write to unexpected_io %% log - unexpected_io(Pid,Category,List,State), + unexpected_io(Pid,Category,Importance,List,State), logger_loop(State#logger_state{ tc_groupleaders = TCGLs}) end; @@ -798,7 +801,7 @@ print_to_log(sync, FromPid, Category, TCGL, List, State) -> IoFun = create_io_fun(FromPid, State), io:format(TCGL,"~ts", [lists:foldl(IoFun, [], List)]); true -> - unexpected_io(FromPid,Category,List,State) + unexpected_io(FromPid,Category,?MAX_IMPORTANCE,List,State) end, State; @@ -814,7 +817,8 @@ print_to_log(async, FromPid, Category, TCGL, List, State) -> end; true -> fun() -> - unexpected_io(FromPid,Category,List,State) + unexpected_io(FromPid,Category,?MAX_IMPORTANCE, + List,State) end end, case State#logger_state.async_print_jobs of @@ -3066,10 +3070,20 @@ html_encoding(latin1) -> html_encoding(utf8) -> "utf-8". -unexpected_io(Pid,ct_internal,List,#logger_state{ct_log_fd=Fd}=State) -> +unexpected_io(Pid,ct_internal,_Importance,List,State) -> IoFun = create_io_fun(Pid,State), - io:format(Fd, "~ts", [lists:foldl(IoFun, [], List)]); -unexpected_io(Pid,_Category,List,State) -> + io:format(State#logger_state.ct_log_fd, "~ts", + [lists:foldl(IoFun, [], List)]); +unexpected_io(Pid,Category,Importance,List,State) -> IoFun = create_io_fun(Pid,State), Data = io_lib:format("~ts", [lists:foldl(IoFun, [], List)]), - test_server_io:print_unexpected(Data). + %% if unexpected io comes in during startup or shutdown, test_server + %% might not be running - if so (noproc exit), simply print to + %% stdout instead (will result in double printouts when pal is used) + try test_server_io:print_unexpected(Data) of + _ -> + ok + catch + _:{noproc,_} -> tc_print(Category,Importance,Data,[]); + _:Reason -> exit(Reason) + end. diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl index 68e76c2396..abda87c2cd 100644 --- a/lib/common_test/src/ct_util.erl +++ b/lib/common_test/src/ct_util.erl @@ -286,14 +286,23 @@ get_start_dir() -> %% handle verbosity outside ct_util_server (let the client read %% the verbosity table) to avoid possible deadlock situations set_verbosity(Elem = {_Category,_Level}) -> - ets:insert(?verbosity_table, Elem), - ok. + try ets:insert(?verbosity_table, Elem) of + _ -> + ok + catch + _:Reason -> + {error,Reason} + end. + get_verbosity(Category) -> - case ets:lookup(?verbosity_table, Category) of + try ets:lookup(?verbosity_table, Category) of [{Category,Level}] -> Level; _ -> undefined + catch + _:Reason -> + {error,Reason} end. loop(Mode,TestData,StartDir) -> diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl index 6bcac12326..4132995bf6 100644 --- a/lib/common_test/test/ct_test_support.erl +++ b/lib/common_test/test/ct_test_support.erl @@ -36,6 +36,8 @@ verify_events/3, verify_events/4, reformat/2, log_events/4, join_abs_dirs/2]). +-export([start_slave/3, slave_stop/1]). + -export([ct_test_halt/1]). -include_lib("kernel/include/file.hrl"). @@ -66,10 +68,14 @@ init_per_suite(Config, Level) -> start_slave(Config, Level). -start_slave(Config,Level) -> +start_slave(Config, Level) -> + start_slave(ct, Config, Level). + +start_slave(NodeName, Config, Level) -> [_,Host] = string:tokens(atom_to_list(node()), "@"), - test_server:format(0, "Trying to start ~s~n", ["ct@"++Host]), - case slave:start(Host, ct, []) of + test_server:format(0, "Trying to start ~s~n", + [atom_to_list(NodeName)++"@"++Host]), + case slave:start(Host, NodeName, []) of {error,Reason} -> test_server:fail(Reason); {ok,CTNode} -> @@ -77,7 +83,7 @@ start_slave(Config,Level) -> IsCover = test_server:is_cover(), if IsCover -> cover:start(CTNode); - true-> + true -> ok end, diff --git a/lib/common_test/test/ct_verbosity_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE.erl index 32488b1db9..1aa71953ec 100644 --- a/lib/common_test/test/ct_verbosity_SUITE.erl +++ b/lib/common_test/test/ct_verbosity_SUITE.erl @@ -53,9 +53,19 @@ init_per_suite(Config) -> end_per_suite(Config) -> ct_test_support:end_per_suite(Config). +init_per_testcase(no_crashing, Config) -> + Opts = ct_test_support:start_slave(ctX, Config, 50), + XNode = proplists:get_value(ct_node, Opts), + ct:pal("Node ~p started!", [XNode]), + [{xnode,XNode} | Config]; init_per_testcase(TestCase, Config) -> ct_test_support:init_per_testcase(TestCase, Config). +end_per_testcase(no_crashing, Config) -> + XNode = proplists:get_value(xnode, Config), + ct_test_support:slave_stop(XNode), + ct:pal("Node ~p stopped!", [XNode]), + ok; end_per_testcase(TestCase, Config) -> ct_test_support:end_per_testcase(TestCase, Config). @@ -72,7 +82,8 @@ all() -> combine_categories, testspec_only, merge_with_testspec, - possible_deadlock + possible_deadlock, + no_crashing ]. %%-------------------------------------------------------------------- @@ -189,6 +200,19 @@ possible_deadlock(Config) -> %%%----------------------------------------------------------------- +%%% +no_crashing(Config) -> + XNode = proplists:get_value(xnode, Config), + ok = rpc:call(XNode, ct, print, ["hello",[]]), + ok = rpc:call(XNode, ct, pal, ["hello",[]]), + ok = rpc:call(XNode, ct, log, ["hello",[]]), + Data = io_lib:format("hello", []), + {badrpc,{'EXIT',{noproc,_}}} = + (catch rpc:call(XNode, test_server_io, print_unexpected, [Data])), + ok. + + +%%%----------------------------------------------------------------- %%% HELP FUNCTIONS %%%----------------------------------------------------------------- diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl index cf5455dfde..124abd13c1 100644 --- a/lib/compiler/src/beam_bool.erl +++ b/lib/compiler/src/beam_bool.erl @@ -425,6 +425,9 @@ bopt_tree([], Forest, Pre) -> safe_bool_op(N, Ar) -> erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar). +bopt_bool_args([V0,V0], Forest0) -> + {V,Forest} = bopt_bool_arg(V0, Forest0), + {[V,V],Forest}; bopt_bool_args(As, Forest) -> mapfoldl(fun bopt_bool_arg/2, Forest, As). diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl index 2e7554c1ff..c6de63c69f 100644 --- a/lib/compiler/src/cerl_inline.erl +++ b/lib/compiler/src/cerl_inline.erl @@ -52,7 +52,7 @@ clause_pats/1, clause_vars/1, concrete/1, cons_hd/1, cons_tl/1, data_arity/1, data_es/1, data_type/1, fun_body/1, fun_vars/1, get_ann/1, int_val/1, - is_c_atom/1, is_c_cons/1, is_c_fun/1, is_c_int/1, + is_c_atom/1, is_c_cons/1, is_c_fname/1, is_c_int/1, is_c_list/1, is_c_seq/1, is_c_tuple/1, is_c_var/1, is_data/1, is_literal/1, is_literal_term/1, let_arg/1, let_body/1, let_vars/1, letrec_body/1, letrec_defs/1, @@ -1578,7 +1578,7 @@ make_let_binding_1(R, E, S) -> %% completely. copy(R, Opnd, E, Ctxt, Env, S) -> - case is_c_var(E) of + case is_c_var(E) andalso not is_c_fname(E) of true -> %% The operand reduces to another variable - get its %% ref-structure and attempt to propagate further. @@ -1628,12 +1628,12 @@ copy_var(R, Ctxt, Env, S) -> end. copy_1(R, Opnd, E, Ctxt, Env, S) -> - %% Fun-expression (lambdas) are a bit special; they are copyable, - %% but should preferably not be duplicated, so they should not be - %% copy propagated except into application contexts, where they can - %% be inlined. - case is_c_fun(E) of - true -> + case type(E) of + 'fun' -> + %% Fun-expression (lambdas) are a bit special; they are copyable, + %% but should preferably not be duplicated, so they should not be + %% copy propagated except into application contexts, where they can + %% be inlined. case Ctxt of #app{} -> %% First test if the operand is "outer-pending"; if @@ -1649,7 +1649,28 @@ copy_1(R, Opnd, E, Ctxt, Env, S) -> _ -> residualize_var(R, S) end; - false -> + var -> + %% Variables at this point only refer to local functions; they are + %% copyable but can't appear in guards, so they should not be + %% copy propagated except into application contexts, where they can + %% be inlined. + case Ctxt of + #app{} -> + %% First test if the operand is "outer-pending"; if + %% so, don't inline. + case st__test_outer_pending(Opnd#opnd.loc, S) of + false -> + R1 = env__get(var_name(E), Opnd#opnd.env), + copy_var(R1, Ctxt, Env, S); + true -> + %% Cyclic reference forced inlining to stop + %% (avoiding infinite unfolding). + residualize_var(R, S) + end; + _ -> + residualize_var(R, S) + end; + _ -> %% We have no other cases to handle here residualize_var(R, S) end. diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl index d6fdcb2b21..1195937d91 100644 --- a/lib/compiler/src/v3_core.erl +++ b/lib/compiler/src/v3_core.erl @@ -956,7 +956,8 @@ lc_tq(Line, E, [Fil0|Qs0], Mc, St0) -> args=[], clauses=[#iclause{anno=LAnno,pats=[], guard=Gs,body=Lps ++ [Lc]}], - fc=#iclause{anno=LAnno,pats=[],guard=[],body=[Mc]}}, + fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]}, + pats=[],guard=[],body=[Mc]}}, [],St2}; false -> {Lc,Lps,St1} = lc_tq(Line, E, Qs0, Mc, St0), @@ -1101,7 +1102,8 @@ bc_tq1(Line, E, [Fil0|Qs0], AccVar, St0) -> clauses=[#iclause{anno=LAnno, pats=[], guard=Gs,body=Bps ++ [Bc]}], - fc=#iclause{anno=LAnno,pats=[],guard=[],body=[AccVar]}}, + fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]}, + pats=[],guard=[],body=[AccVar]}}, [],St}; false -> {Bc,Bps,St1} = bc_tq1(Line, E, Qs0, AccVar, St0), diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl index 5656d23090..a0a9bb7ddd 100644 --- a/lib/compiler/test/guard_SUITE.erl +++ b/lib/compiler/test/guard_SUITE.erl @@ -813,8 +813,16 @@ and_guard(Config) when is_list(Config) -> ?line ok = relprod({'Set',a,b}, {'Set',a,b}), + ok = and_same_var(42), + {'EXIT',{if_clause,_}} = (catch and_same_var(x)), ok. +and_same_var(V) -> + B = is_integer(V), + if + B or B -> ok + end. + relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'), (erlang:size(R2) =:= 3) and (erlang:element(1,R2) =:= 'Set') -> ok. diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl index d9b92766e4..e5c2d4f73a 100644 --- a/lib/compiler/test/inline_SUITE.erl +++ b/lib/compiler/test/inline_SUITE.erl @@ -36,7 +36,7 @@ all() -> groups() -> [{p,test_lib:parallel(), - [attribute,bsdecode,bsdes,barnes2,decode1,smith, + [attribute,bsdecode,bsdes,barnes2,decode1,smith,fname, itracer,pseudoknot,comma_splitter,lists,really_inlined,otp_7223, coverage]}]. @@ -84,6 +84,7 @@ attribute(Config) when is_list(Config) -> ?comp(itracer). ?comp(pseudoknot). ?comp(comma_splitter). +?comp(fname). try_inline(Mod, Config) -> Node = ?config(testing_node, Config), diff --git a/lib/compiler/test/inline_SUITE_data/fname.erl b/lib/compiler/test/inline_SUITE_data/fname.erl new file mode 100644 index 0000000000..7ad4446bf3 --- /dev/null +++ b/lib/compiler/test/inline_SUITE_data/fname.erl @@ -0,0 +1,29 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +-module(fname). +-export([?MODULE/0]). + +?MODULE() -> + F = fun bar/1, + G = lists:last([(fun (X) when F =:= X -> X end)]), + F = G(F), + ok. + +bar(X) -> + X. diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl index f00bfe663b..810b2b48c9 100644 --- a/lib/compiler/test/warnings_SUITE.erl +++ b/lib/compiler/test/warnings_SUITE.erl @@ -37,7 +37,7 @@ -export([pattern/1,pattern2/1,pattern3/1,pattern4/1, guard/1,bad_arith/1,bool_cases/1,bad_apply/1, - files/1,effect/1,bin_opt_info/1,bin_construction/1]). + files/1,effect/1,bin_opt_info/1,bin_construction/1, comprehensions/1]). % Default timetrap timeout (set in init_per_testcase). -define(default_timeout, ?t:minutes(2)). @@ -61,7 +61,7 @@ groups() -> [{p,test_lib:parallel(), [pattern,pattern2,pattern3,pattern4,guard, bad_arith,bool_cases,bad_apply,files,effect, - bin_opt_info,bin_construction]}]. + bin_opt_info,bin_construction,comprehensions]}]. init_per_suite(Config) -> Config. @@ -536,6 +536,16 @@ bin_construction(Config) when is_list(Config) -> ok. +comprehensions(Config) when is_list(Config) -> + Ts = [{tautologic_guards, + <<" + f() -> [ true || true ]. + g() -> << <<1>> || true >>. + ">>, + [], []}], + run(Config, Ts), + ok. + %%% %%% End of test cases. %%% diff --git a/lib/diameter/doc/src/diameter_dict.xml b/lib/diameter/doc/src/diameter_dict.xml index 4fcde495b3..8bf4a14240 100644 --- a/lib/diameter/doc/src/diameter_dict.xml +++ b/lib/diameter/doc/src/diameter_dict.xml @@ -609,7 +609,9 @@ UTF8String() = [integer()] <p> List elements are the UTF-8 encodings of the individual characters in the string. -Invalid codepoints will result in encode/decode failure.</p> +Invalid codepoints will result in encode/decode failure. +On encode, a UTF8String() can be specified as a binary, or as a nested +list of binaries and codepoints.</p> <marker id="DiameterIdentity"/> <pre> diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl index 4e55864168..2b99ecc59c 100644 --- a/lib/diameter/src/base/diameter_peer_fsm.erl +++ b/lib/diameter/src/base/diameter_peer_fsm.erl @@ -28,7 +28,8 @@ -behaviour(gen_server). %% Interface towards diameter_watchdog. --export([start/3]). +-export([start/3, + result_code/2]). %% gen_server callbacks -export([init/1, @@ -62,7 +63,6 @@ %% Keys in process dictionary. -define(CB_KEY, cb). %% capabilities callback -define(DPR_KEY, dpr). %% disconnect callback --define(DWA_KEY, dwa). %% outgoing DWA -define(REF_KEY, ref). %% transport_ref() -define(Q_KEY, q). %% transport start queue -define(START_KEY, start). %% start of connected transport @@ -177,14 +177,9 @@ init(T) -> proc_lib:init_ack({ok, self()}), gen_server:enter_loop(?MODULE, [], i(T)). -i({Ack, WPid, {M, Ref} = T, Opts, {Mask, - Nodes, - Dict0, - #diameter_service{capabilities = LCaps} - = Svc}}) -> +i({Ack, WPid, {M, Ref} = T, Opts, {Mask, Nodes, Dict0, Svc}}) -> erlang:monitor(process, WPid), wait(Ack, WPid), - putr(?DWA_KEY, dwa(LCaps)), diameter_stats:reg(Ref), {[Cs,Ds], Rest} = proplists:split(Opts, [capabilities_cb, disconnect_cb]), putr(?CB_KEY, {Ref, [F || {_,F} <- Cs]}), @@ -612,9 +607,7 @@ rcv(Name, _, #state{state = PS}) Name == 'CEA' -> {stop, {Name, PS}}; -rcv(N, Pkt, S) - when N == 'DWR'; - N == 'DPR' -> +rcv('DPR' = N, Pkt, S) -> handle_request(N, Pkt, S); %% DPA in response to DPR and with the expected identifiers. @@ -717,8 +710,8 @@ build_answer(Type, errors = Es} = Pkt, S) -> - RC = rc(H, Es), - {answer(Type, RC, Es, S), post(Type, RC, Pkt, S)}. + {RC, FailedAVP} = result_code(H, Es), + {answer(Type, RC, FailedAVP, S), post(Type, RC, Pkt, S)}. inband_security([]) -> ?NO_INBAND_SECURITY; @@ -734,7 +727,7 @@ cea(CEA, RC, Dict0) -> post('CER' = T, RC, Pkt, S) -> {T, caps(S), {RC, Pkt}}; -post(_, _, _, _) -> +post('DPR', _, _, _) -> ok. rejected({capabilities_cb, _F, Reason}, T, S) -> @@ -743,13 +736,10 @@ rejected({capabilities_cb, _F, Reason}, T, S) -> rejected(discard, T, _) -> close(T); rejected({N, Es}, T, S) -> - {answer('CER', N, Es, S), T}; + {answer('CER', N, failed_avp(N, Es), S), T}; rejected(N, T, S) -> rejected({N, []}, T, S). -answer(Type, RC, Es, S) -> - set(answer(Type, RC, S), failed_avp(RC, Es)). - failed_avp(RC, [{RC, Avp} | _]) -> [{'Failed-AVP', [{'AVP', [Avp]}]}]; failed_avp(RC, [_ | Es]) -> @@ -757,6 +747,9 @@ failed_avp(RC, [_ | Es]) -> failed_avp(_, [] = No) -> No. +answer(Type, RC, FailedAVP, S) -> + set(answer(Type, RC, S), FailedAVP). + answer(Type, RC, S) -> answer_message(answer(Type, S), RC). @@ -784,29 +777,29 @@ set(['answer-message' | _] = Ans, FailedAvp) -> set([_|_] = Ans, FailedAvp) -> Ans ++ FailedAvp. -%% rc/2 +%% result_code/2 -rc(#diameter_header{is_error = true}, _) -> - 3008; %% DIAMETER_INVALID_HDR_BITS +result_code(#diameter_header{is_error = true}, _) -> + {3008, []}; %% DIAMETER_INVALID_HDR_BITS -rc(_, [Bs|_]) +result_code(_, [Bs|_]) when is_bitstring(Bs) -> %% from old code - 3009; %% DIAMETER_INVALID_HDR_BITS + {3009, []}; %% DIAMETER_INVALID_HDR_BITS -rc(#diameter_header{version = ?DIAMETER_VERSION}, Es) -> +result_code(#diameter_header{version = ?DIAMETER_VERSION}, Es) -> rc(Es); -rc(_, _) -> - 5011. %% DIAMETER_UNSUPPORTED_VERSION +result_code(_, _) -> + {5011, []}. %% DIAMETER_UNSUPPORTED_VERSION %% rc/1 rc([]) -> - 2001; %% DIAMETER_SUCCESS -rc([{RC,_}|_]) -> - RC; + {2001, []}; %% DIAMETER_SUCCESS +rc([{RC, _} | _] = Es) -> + {RC, failed_avp(RC, Es)}; rc([RC|_]) -> - RC. + {RC, []}. %% DIAMETER_INVALID_HDR_BITS 3008 %% A request was received whose bits in the Diameter header were @@ -832,9 +825,6 @@ rc([RC|_]) -> %% answer/2 -answer('DWR', _) -> - getr(?DWA_KEY); - answer(Name, #state{service = #diameter_service{capabilities = Caps}}) -> a(Name, Caps). @@ -1019,15 +1009,6 @@ report({M, _, _, _, _} = T) report(_) -> ok. -%% dwa/1 - -dwa(#diameter_caps{origin_host = OH, - origin_realm = OR, - origin_state_id = OSI}) -> - ['DWA', {'Origin-Host', OH}, - {'Origin-Realm', OR}, - {'Origin-State-Id', OSI}]. - %% dpr/2 %% %% The RFC isn't clear on whether DPR should be send in a non-Open diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl index 9ae289034c..8c07e84777 100644 --- a/lib/diameter/src/base/diameter_types.erl +++ b/lib/diameter/src/base/diameter_types.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2010-2011. All Rights Reserved. +%% Copyright Ericsson AB 2010-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -250,13 +250,10 @@ 'Address'(encode, zero) -> <<0:48>>; -'Address'(decode, <<1:16, B/binary>>) - when size(B) == 4 -> - list_to_tuple(binary_to_list(B)); - -'Address'(decode, <<2:16, B/binary>>) - when size(B) == 16 -> - list_to_tuple(v6dec(B, [])); +'Address'(decode, <<A:16, B/binary>>) + when 1 == A, 4 == size(B); + 2 == A, 16 == size(B) -> + list_to_tuple([N || <<N:A/unit:8>> <= B]); 'Address'(decode, <<A:16, _/binary>> = B) when 1 == A; @@ -264,30 +261,10 @@ ?INVALID_LENGTH(B); 'Address'(encode, T) -> - ipenc(diameter_lib:ipaddr(T)). - -ipenc(T) - when is_tuple(T), size(T) == 4 -> - B = list_to_binary(tuple_to_list(T)), - <<1:16, B/binary>>; - -ipenc(T) - when is_tuple(T), size(T) == 8 -> - B = v6enc(lists:reverse(tuple_to_list(T)), <<>>), - <<2:16, B/binary>>. - -v6dec(<<N:16, B/binary>>, Acc) -> - v6dec(B, [N | Acc]); - -v6dec(<<>>, Acc) -> - lists:reverse(Acc). - -v6enc([N | Rest], B) - when ?UINT(16,N) -> - v6enc(Rest, <<N:16, B/binary>>); - -v6enc([], B) -> - B. + Ns = tuple_to_list(diameter_lib:ipaddr(T)), %% length 4 or 8 + A = length(Ns) div 4, %% 1 or 2 + B = << <<N:A/unit:8>> || N <- Ns >>, + <<A:16, B/binary>>. %% -------------------- @@ -354,36 +331,13 @@ v6enc([], B) -> %% -------------------- 'UTF8String'(decode, Bin) -> - udec(Bin, []); + tl([0|_] = unicode:characters_to_list([0, Bin])); %% assert list return 'UTF8String'(encode = M, zero) -> 'UTF8String'(M, []); 'UTF8String'(encode, S) -> - uenc(S, []). - -udec(<<>>, Acc) -> - lists:reverse(Acc); - -udec(<<C/utf8, Rest/binary>>, Acc) -> - udec(Rest, [C | Acc]). - -uenc(E, Acc) - when E == []; - E == <<>> -> - list_to_binary(lists:reverse(Acc)); - -uenc(<<C/utf8, Rest/binary>>, Acc) -> - uenc(Rest, [<<C/utf8>> | Acc]); - -uenc([[] | Rest], Acc) -> - uenc(Rest, Acc); - -uenc([[H|T] | Rest], Acc) -> - uenc([H, T | Rest], Acc); - -uenc([C | Rest], Acc) -> - uenc(Rest, [<<C/utf8>> | Acc]). + <<_/binary>> = unicode:characters_to_binary(S). %% assert binary return %% -------------------- diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl index 88ccf630e2..7e75801718 100644 --- a/lib/diameter/src/base/diameter_watchdog.erl +++ b/lib/diameter/src/base/diameter_watchdog.erl @@ -201,7 +201,7 @@ common_dictionary(Apps) -> %% means a user won't be able either send of receive %% messages in the common dictionary: incoming request %% will be answered with 3007 and outgoing requests cannot - %% be sent. The dictionary returned here is oly used for + %% be sent. The dictionary returned here is only used for %% messages diameter sends and receives: CER/CEA, DPR/DPA %% and DWR/DWA. ?BASE @@ -545,10 +545,15 @@ recv(Name, Pkt, S) -> %% rcv/3 +rcv('DWR', Pkt, #watchdog{transport = TPid, + dictionary = Dict0, + sequence = Mask}) -> + send(TPid, {send, encode(dwa(Pkt), Mask, Dict0)}), + ?LOG(send, 'DWA'); + rcv(N, _, _) when N == 'CER'; N == 'CEA'; - N == 'DWR'; N == 'DWA'; N == 'DPR'; N == 'DPA' -> @@ -642,6 +647,9 @@ rcv('DWA', #watchdog{status = reopen, %% REOPEN Receive non-DWA Throwaway() REOPEN +rcv('DWR', #watchdog{status = reopen} = S) -> + S; %% ensure DWA: the RFC isn't explicit about answering + rcv(_, #watchdog{status = reopen} = S) -> throwaway(S). @@ -782,6 +790,13 @@ dwr(#diameter_caps{origin_host = OH, {'Origin-Realm', OR}, {'Origin-State-Id', OSI}]. +%% dwa/1 + +dwa(#diameter_packet{header = H, errors = Es}) -> + {RC, FailedAVP} = diameter_peer_fsm:result_code(H, Es), + ['DWA', {'Result-Code', RC} + | tl(getr(dwr)) ++ FailedAVP]. + %% restrict_nodes/1 restrict_nodes(false) -> diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl index 24d4c7665e..295d23912b 100644 --- a/lib/diameter/test/diameter_codec_test.erl +++ b/lib/diameter/test/diameter_codec_test.erl @@ -1,3 +1,4 @@ +%% coding: utf-8 %% %% %CopyrightBegin% %% @@ -19,7 +20,9 @@ -module(diameter_codec_test). --compile(export_all). +-export([base/0, + gen/1, + lib/0]). %% %% Test encode/decode of dictionary-related modules. @@ -38,37 +41,34 @@ %% Interface. base() -> - [] = run([{?MODULE, [base, T]} || T <- [zero, decode]]). + [] = run([[fun base/1, T] || T <- [zero, decode]]). gen(Mod) -> Fs = [{Mod, F, []} || F <- [name, id, vendor_id, vendor_name]], - [] = run(Fs ++ [{?MODULE, [gen, Mod, T]} || T <- [messages, - command_codes, - avp_types, - grouped, - enum, - import_avps, - import_groups, - import_enums]]). + [] = run(Fs ++ [[fun gen/2, Mod, T] || T <- [messages, + command_codes, + avp_types, + grouped, + enum, + import_avps, + import_groups, + import_enums]]). lib() -> - Vs = {_,_} = values('Address'), - [] = run([[fun lib/2, N, Vs] || N <- [1,2]]). + Vs = {_,_,_} = values('Address'), + [] = run([[fun lib/2, N, Vs] || N <- [{1, true}, {3, false}]]). %% =========================================================================== %% Internal functions. -lib(N, {_,_} = T) -> - B = 1 == N rem 2, - [] = run([[fun lib/2, A, B] || A <- element(N,T)]); +lib({N,B}, {_,_,_} = T) -> + [] = run([[fun lib/2, A, B] || A <- element(N,T), is_tuple(A)]); lib(IP, B) -> - LA = tuple_to_list(IP), - {SA,Fun} = ip(LA), - [] = run([[fun lib/4, IP, B, Fun, A] || A <- [IP, SA]]). + [] = run([[fun lib/3, IP, B, A] || A <- [IP, ntoa(tuple_to_list(IP))]]). -lib(IP, B, Fun, A) -> - try Fun(A) of +lib(IP, B, A) -> + try diameter_lib:ipaddr(A) of IP when B -> ok catch @@ -76,12 +76,12 @@ lib(IP, B, Fun, A) -> ok end. -ip([_,_,_,_] = A) -> +ntoa([_,_,_,_] = A) -> [$.|S] = lists:append(["." ++ integer_to_list(N) || N <- A]), - {S, fun diameter_lib:ipaddr/1}; -ip([_,_,_,_,_,_,_,_] = A) -> + S; +ntoa([_,_,_,_,_,_,_,_] = A) -> [$:|S] = lists:flatten([":" ++ io_lib:format("~.16B", [N]) || N <- A]), - {S, fun diameter_lib:ipaddr/1}. + S. %% ------------------------------------------------------------------------ %% base/1 @@ -90,7 +90,7 @@ ip([_,_,_,_,_,_,_,_] = A) -> %% ------------------------------------------------------------------------ base(T) -> - [] = run([{?MODULE, [base, T, F]} || F <- types()]). + [] = run([[fun base/2, T, F] || F <- types()]). %% Ensure that 'zero' values encode only zeros. base(zero = T, F) -> @@ -100,32 +100,23 @@ base(zero = T, F) -> %% Ensure that we can decode what we encode and vice-versa, and that %% we can't decode invalid values. base(decode, F) -> - {Eq, Vs, Ns} = b(values(F)), - [] = run([{?MODULE, [base_decode, F, Eq, V]} || V <- Vs]), - [] = run([{?MODULE, [base_invalid, F, Eq, V]} || V <- Ns]). + {Ts, Fs, Is} = values(F), + [] = run([[fun base_decode/3, F, true, V] || V <- Ts]), + [] = run([[fun base_decode/3, F, false, V] || V <- Fs]), + [] = run([[fun base_invalid/2, F, V] || V <- Is]). base_decode(F, Eq, Value) -> d(fun(X,V) -> diameter_types:F(X,V) end, Eq, Value). -base_invalid(F, Eq, Value) -> +base_invalid(F, Value) -> try - base_decode(F, Eq, Value), + base_decode(F, false, Value), exit(nok) catch error: _ -> ok end. -b({_,_,_} = T) -> - T; -b({B,Vs}) - when is_atom(B) -> - {B,Vs,[]}; -b({Vs,Ns}) -> - {true, Vs, Ns}; -b(Vs) -> - {true, Vs, []}. - types() -> [F || {F,2} <- diameter_types:module_info(exports)]. @@ -136,7 +127,7 @@ types() -> %% ------------------------------------------------------------------------ gen(M, T) -> - [] = run(lists:map(fun(X) -> {?MODULE, [gen, M, T, X]} end, + [] = run(lists:map(fun(X) -> [fun gen/3, M, T, X] end, fetch(T, dict(M)))). fetch(T, Spec) -> @@ -197,18 +188,20 @@ gen(M, enum = T, {Name, ED}) gen(M, T, {?A(Name), lists:map(fun({E,D}) -> {?A(E), D} end, ED)}); gen(M, enum, {Name, ED}) -> - [] = run([{?MODULE, [enum, M, Name, T]} || T <- ED]); + [] = run([[fun enum/3, M, Name, T] || T <- ED]); gen(M, Tag, {_Mod, L}) -> T = retag(Tag), - [] = run([{?MODULE, [gen, M, T, I]} || I <- L]). + [] = run([[fun gen/3, M, T, I] || I <- L]). %% avp_decode/3 avp_decode(Mod, Type, Name) -> - {Eq, Vs, _} = b(values(Type, Name, Mod)), - [] = run([{?MODULE, [avp_decode, Mod, Name, Type, Eq, V]} - || V <- v(Vs)]). + {Ts, Fs, _} = values(Type, Name, Mod), + [] = run([[fun avp_decode/5, Mod, Name, Type, true, V] + || V <- v(Ts)]), + [] = run([[fun avp_decode/5, Mod, Name, Type, false, V] + || V <- v(Fs)]). avp_decode(Mod, Name, Type, Eq, Value) -> d(fun(X,V) -> avp(Mod, X, V, Name, Type) end, Eq, Value). @@ -250,7 +243,7 @@ v(N, Ord, E, Acc) -> arity(M, Name, Rname) -> Rec = M:'#new-'(Rname), - [] = run([{?MODULE, [arity, M, Name, F, Rec]} + [] = run([[fun arity/4, M, Name, F, Rec] || F <- M:'#info-'(Rname, fields)]). arity(M, Name, AvpName, Rec) -> @@ -299,68 +292,93 @@ z(B) -> %% tested.) values('OctetString' = T) -> - {["", atom_to_list(T)], [-1, 256]}; + {["", atom_to_list(T)], + [], + [-1, 256]}; values('Integer32') -> Mx = (1 bsl 31) - 1, Mn = -1*Mx, - {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]}; + {[Mn, 0, random(Mn,Mx), Mx], + [], + [Mn - 1, Mx + 1]}; values('Integer64') -> Mx = (1 bsl 63) - 1, Mn = -1*Mx, - {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]}; + {[Mn, 0, random(Mn,Mx), Mx], + [], + [Mn - 1, Mx + 1]}; values('Unsigned32') -> M = (1 bsl 32) - 1, - {[0, random(M), M], [-1, M + 1]}; + {[0, random(M), M], + [], + [-1, M + 1]}; values('Unsigned64') -> M = (1 bsl 64) - 1, - {[0, random(M), M], [-1, M + 1]}; + {[0, random(M), M], + [], + [-1, M + 1]}; values('Float32') -> E = (1 bsl 8) - 2, F = (1 bsl 23) - 1, <<Mx:32/float>> = <<0:1, E:8, F:23>>, <<Mn:32/float>> = <<1:1, E:8, F:23>>, - {[0.0, infinity, '-infinity', Mx, Mn], [0]}; + {[0.0, infinity, '-infinity', Mx, Mn], + [], + [0]}; values('Float64') -> E = (1 bsl 11) - 2, F = (1 bsl 52) - 1, <<Mx:64/float>> = <<0:1, E:11, F:52>>, <<Mn:64/float>> = <<1:1, E:11, F:52>>, - {[0.0, infinity, '-infinity', Mx, Mn], [0]}; + {[0.0, infinity, '-infinity', Mx, Mn], + [], + [0]}; values('Address') -> {[{255,0,random(16#FF),1}, {65535,0,0,random(16#FFFF),0,0,0,1}], - [{256,0,0,1}, {65536,0,0,0,0,0,0,1}]}; + ["127.0.0.1", "FFFF:FF::1.2.3.4"], + [{256,0,0,1}, {65536,0,0,0,0,0,0,1}, "256.0.0.1", "10000::1"]}; values('DiameterIdentity') -> - {["x", "diameter.com"], [""]}; + {["x", "diameter.com"], + [], + [""]}; values('DiameterURI') -> - {false, ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr - || S <- ["", "s"], - P <- ["", ":1234"], - Tr <- ["" | [";transport=" ++ X - || X <- ["tcp", "sctp", "udp"]]], - Pr <- ["" | [";protocol=" ++ X - || X <- ["diameter","radius","tacacs+"]]]]}; + {[], + ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr + || S <- ["", "s"], + P <- ["", ":1234"], + Tr <- ["" | [";transport=" ++ X + || X <- ["tcp", "sctp", "udp"]]], + Pr <- ["" | [";protocol=" ++ X + || X <- ["diameter","radius","tacacs+"]]]], + []}; values(T) when T == 'IPFilterRule'; T == 'QoSFilterRule' -> - ["deny in 0 from 127.0.0.1 to 10.0.0.1"]; + {["deny in 0 from 127.0.0.1 to 10.0.0.1"], + [], + []}; %% RFC 3629 defines the UTF-8 encoding of U+0000 through U+10FFFF with the %% exception of U+D800 through U+DFFF. values('UTF8String') -> + S = "ᚠᚢᚦᚨᚱᚲ", + B = unicode:characters_to_binary(S), {[[], + S, lists:seq(0,16#1FF), [0,16#D7FF,16#E000,16#10FFFF], [random(16#D7FF), random(16#E000,16#10FFFF)]], + [B, [B, S, hd(S)], [S, B]], [[-1], [16#D800], [16#DFFF], @@ -372,6 +390,7 @@ values('Time') -> {{2036,2,7},{6,28,15}}, {{2036,2,7},{6,28,16}}, %% 19000101T000000 + 2 bsl 31 {{2104,2,26},{9,42,23}}], + [], [{{1968,1,20},{3,14,7}}, {{2104,2,26},{9,42,24}}]}. %% 19000101T000000 + 3 bsl 31 @@ -382,18 +401,24 @@ values('Time') -> values('Enumerated', Name, Mod) -> {_Name, Vals} = lists:keyfind(?S(Name), 1, types(enum, Mod)), - lists:map(fun({_,N}) -> N end, Vals); + {lists:map(fun({_,N}) -> N end, Vals), + [], + []}; values('Grouped', Name, Mod) -> Rname = Mod:name2rec(Name), Rec = Mod:'#new-'(Rname), Avps = Mod:'#info-'(Rname, fields), - Enum = diameter_enum:combine(lists:map(fun({_,Vs,_}) -> to_enum(Vs) end, + Enum = diameter_enum:combine(lists:map(fun({Vs,_,_}) -> to_enum(Vs) end, [values(F, Mod) || F <- Avps])), - {false, diameter_enum:append(group(Mod, Name, Rec, Avps, Enum))}; + {[], + diameter_enum:append(group(Mod, Name, Rec, Avps, Enum)), + []}; values(_, 'Framed-IP-Address', _) -> - [{127,0,0,1}]; + {[{127,0,0,1}], + [], + []}; values(Type, _, _) -> values(Type). @@ -407,12 +432,14 @@ to_enum(E) -> %% values/2 values('AVP', _) -> - {true, [#diameter_avp{code = 0, data = <<0>>}], []}; + {[#diameter_avp{code = 0, data = <<0>>}], + [], + []}; values(Name, Mod) -> Avps = types(avp_types, Mod), {_Name, _Code, Type, _Flags} = lists:keyfind(?S(Name), 1, Avps), - b(values(?A(Type), Name, Mod)). + values(?A(Type), Name, Mod). %% group/5 %% diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl index 97f4cec11f..9408fae62c 100644 --- a/lib/diameter/test/diameter_transport_SUITE.erl +++ b/lib/diameter/test/diameter_transport_SUITE.erl @@ -180,12 +180,13 @@ reconnect({listen, Ref}) -> [_] = diameter_reg:wait({diameter_tcp, listener, {LRef, '_'}}), true = diameter_reg:add_new({?MODULE, Ref, LRef}), - %% Wait for partner to request transport death: kill to force the - %% peer to reconnect. + %% Wait for partner to request transport death. TPid = abort(SvcName, LRef, Ref), + %% Kill transport to force the peer to reconnect. exit(TPid, kill), + %% Wait for the partner again. abort(SvcName, LRef, Ref); reconnect({connect, Ref}) -> @@ -200,7 +201,7 @@ reconnect({connect, Ref}) -> %% reconnection attempts. abort(SvcName, Pid, Ref), - %% Transport does down and is reestablished. + %% Transport goes down and is reestablished. ?RECV(#diameter_event{service = SvcName, info = {down, CRef, _, _}}), ?RECV(#diameter_event{service = SvcName, info = {reconnect, CRef, _}}), ?RECV(#diameter_event{service = SvcName, info = {up, CRef, _, _, _}}), diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile index 2b85dfc571..1ed34c74a0 100644 --- a/lib/erl_interface/test/Makefile +++ b/lib/erl_interface/test/Makefile @@ -42,7 +42,7 @@ MODULES= \ runner SPEC_FILES = \ - erl_interface.spec + erl_interface.spec erl_interface_smoke.spec COVER_FILE = erl_interface.cover diff --git a/lib/erl_interface/test/erl_interface_smoke.spec b/lib/erl_interface/test/erl_interface_smoke.spec new file mode 100644 index 0000000000..bfaea2b279 --- /dev/null +++ b/lib/erl_interface/test/erl_interface_smoke.spec @@ -0,0 +1 @@ +{suites,"../erl_interface_test",[ei_decode_encode_SUITE]}. diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl index 8ebdb6ba16..84242a09aa 100644 --- a/lib/eunit/include/eunit.hrl +++ b/lib/eunit/include/eunit.hrl @@ -102,7 +102,7 @@ %% X gets a new, local binding. %% (Note that lowercase 'let' is a reserved word.) -ifndef(LET). --define(LET(X,Y,Z), ((fun(X)->(Z)end)(Y))). +-define(LET(X,Y,Z), begin ((fun(X)->(Z)end)(Y)) end). -endif. %% It is important that testing code is short and readable. @@ -110,13 +110,13 @@ %% Compare: case f(X) of true->g(X); false->h(X) end %% and: ?IF(f(X), g(Y), h(Z)) -ifndef(IF). --define(IF(B,T,F), (case (B) of true->(T); false->(F) end)). +-define(IF(B,T,F), begin (case (B) of true->(T); false->(F) end) end). -endif. %% This macro yields 'true' if the value of E matches the guarded %% pattern G, otherwise 'false'. -ifndef(MATCHES). --define(MATCHES(G,E), (case (E) of G -> true; _ -> false end)). +-define(MATCHES(G,E), begin (case (E) of G -> true; _ -> false end) end). -endif. %% This macro can be used at any time to check whether or not the code @@ -140,6 +140,7 @@ %% for clauses that cannot match, even if the expression is a constant. -undef(assert). -define(assert(BoolExpr), + begin ((fun () -> case (BoolExpr) of true -> ok; @@ -152,7 +153,8 @@ _ -> {not_a_boolean,__V} end}]}) end - end)())). + end)()) + end). -endif. -define(assertNot(BoolExpr), ?assert(not (BoolExpr))). @@ -168,6 +170,7 @@ -define(assertMatch(Guard, Expr), ok). -else. -define(assertMatch(Guard, Expr), + begin ((fun () -> case (Expr) of Guard -> ok; @@ -178,7 +181,8 @@ {pattern, (??Guard)}, {value, __V}]}) end - end)())). + end)()) + end). -endif. -define(_assertMatch(Guard, Expr), ?_test(?assertMatch(Guard, Expr))). @@ -187,6 +191,7 @@ -define(assertNotMatch(Guard, Expr), ok). -else. -define(assertNotMatch(Guard, Expr), + begin ((fun () -> __V = (Expr), case __V of @@ -198,7 +203,8 @@ {value, __V}]}); _ -> ok end - end)())). + end)()) + end). -endif. -define(_assertNotMatch(Guard, Expr), ?_test(?assertNotMatch(Guard, Expr))). @@ -208,6 +214,7 @@ -define(assertEqual(Expect, Expr), ok). -else. -define(assertEqual(Expect, Expr), + begin ((fun (__X) -> case (Expr) of __X -> ok; @@ -218,7 +225,8 @@ {expected, __X}, {value, __V}]}) end - end)(Expect))). + end)(Expect)) + end). -endif. -define(_assertEqual(Expect, Expr), ?_test(?assertEqual(Expect, Expr))). @@ -227,6 +235,7 @@ -define(assertNotEqual(Unexpected, Expr), ok). -else. -define(assertNotEqual(Unexpected, Expr), + begin ((fun (__X) -> case (Expr) of __X -> erlang:error({assertNotEqual_failed, @@ -236,7 +245,8 @@ {value, __X}]}); _ -> ok end - end)(Unexpected))). + end)(Unexpected)) + end). -endif. -define(_assertNotEqual(Unexpected, Expr), ?_test(?assertNotEqual(Unexpected, Expr))). @@ -247,6 +257,7 @@ -define(assertException(Class, Term, Expr), ok). -else. -define(assertException(Class, Term, Expr), + begin ((fun () -> try (Expr) of __V -> erlang:error({assertException_failed, @@ -271,7 +282,8 @@ {__C, __T, erlang:get_stacktrace()}}]}) end - end)())). + end)()) + end). -endif. -define(assertError(Term, Expr), ?assertException(error, Term, Expr)). @@ -291,6 +303,7 @@ -define(assertNotException(Class, Term, Expr), ok). -else. -define(assertNotException(Class, Term, Expr), + begin ((fun () -> try (Expr) of _ -> ok @@ -316,7 +329,8 @@ _ -> ok end end - end)())). + end)()) + end). -endif. -define(_assertNotException(Class, Term, Expr), ?_test(?assertNotException(Class, Term, Expr))). @@ -327,6 +341,7 @@ %% these can be used for simply running commands in a controlled way -define(_cmd_(Cmd), (eunit_lib:command(Cmd))). -define(cmdStatus(N, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {(N), __Out} -> __Out; @@ -337,7 +352,8 @@ {expected_status,(N)}, {status,__N}]}) end - end)())). + end)()) + end). -define(_cmdStatus(N, Cmd), ?_test(?cmdStatus(N, Cmd))). -define(cmd(Cmd), ?cmdStatus(0, Cmd)). -define(_cmd(Cmd), ?_test(?cmd(Cmd))). @@ -348,6 +364,7 @@ -define(assertCmdStatus(N, Cmd), ok). -else. -define(assertCmdStatus(N, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {(N), _} -> ok; @@ -358,7 +375,8 @@ {expected_status,(N)}, {status,__N}]}) end - end)())). + end)()) + end). -endif. -define(assertCmd(Cmd), ?assertCmdStatus(0, Cmd)). @@ -366,6 +384,7 @@ -define(assertCmdOutput(T, Cmd), ok). -else. -define(assertCmdOutput(T, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {_, (T)} -> ok; @@ -376,7 +395,8 @@ {expected_output,(T)}, {output,__T}]}) end - end)())). + end)()) + end). -endif. -define(_assertCmdStatus(N, Cmd), ?_test(?assertCmdStatus(N, Cmd))). @@ -394,26 +414,30 @@ -define(debugTime(S, E), (E)). -else. -define(debugMsg(S), - (begin - io:fwrite(user, <<"~s:~w:~w: ~s\n">>, - [?FILE, ?LINE, self(), S]), - ok - end)). + begin + io:fwrite(user, <<"~s:~w:~w: ~s\n">>, + [?FILE, ?LINE, self(), S]), + ok + end). -define(debugHere, (?debugMsg("<-"))). -define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))). -define(debugVal(E), + begin ((fun (__V) -> ?debugFmt(<<"~s = ~P">>, [(??E), __V, 15]), __V - end)(E))). + end)(E)) + end). -define(debugTime(S, E), + begin ((fun () -> {__T0, _} = statistics(wall_clock), __V = (E), {__T1, _} = statistics(wall_clock), ?debugFmt(<<"~s: ~.3f s">>, [(S), (__T1-__T0)/1000]), __V - end)())). + end)()) + end). -endif. diff --git a/lib/ic/test/Makefile b/lib/ic/test/Makefile index 54ac186c16..63af6ed9f1 100644 --- a/lib/ic/test/Makefile +++ b/lib/ic/test/Makefile @@ -33,7 +33,7 @@ RELSYSDIR = $(RELEASE_PATH)/ic_test # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -TEST_SPEC_FILE = ic.spec +TEST_SPEC_FILE = ic.spec ic_smoke.spec IDL_FILES = diff --git a/lib/ic/test/ic_smoke.spec b/lib/ic/test/ic_smoke.spec new file mode 100644 index 0000000000..ec3b5758b1 --- /dev/null +++ b/lib/ic/test/ic_smoke.spec @@ -0,0 +1 @@ +{suites,"../ic_test",[ic_SUITE]}. diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml index 741f2abaef..d9a27e7d1e 100644 --- a/lib/inets/doc/src/httpc.xml +++ b/lib/inets/doc/src/httpc.xml @@ -300,11 +300,11 @@ filename() = string() process or to a file. When streaming to the calling process using the option <c>self</c> the following stream messages will be sent to that process: <c>{http, {RequestId, - stream_start, Headers}, {http, {RequestId, stream, - BinBodyPart}, {http, {RequestId, stream_end, Headers}</c>. When + stream_start, Headers}}, {http, {RequestId, stream, + BinBodyPart}}, {http, {RequestId, stream_end, Headers}}</c>. When streaming to to the calling processes using the option <c>{self, once}</c> the first message will have an additional - element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}</c>, + element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}}</c>, this is the process id that should be used as an argument to <c>http:stream_next/1</c> to trigger the next message to be sent to the calling process. </p> diff --git a/lib/inets/doc/src/httpd.xml b/lib/inets/doc/src/httpd.xml index 8438961511..4210aea3ec 100644 --- a/lib/inets/doc/src/httpd.xml +++ b/lib/inets/doc/src/httpd.xml @@ -251,14 +251,14 @@ </item> <marker id="prop_max_uri"></marker> - <tag>{max_uri, integer()}</tag> + <tag>{max_uri_size, integer()}</tag> <item> <p>Limits the size of the HTTP request URI. By default there is no limit. </p> </item> <marker id="prop_max_keep_alive_req"></marker> - <tag>{max_keep_alive_requests, integer()}</tag> + <tag>{max_keep_alive_request, integer()}</tag> <item> <p>The number of request that a client can do on one connection. When the server has responded to the number of @@ -406,7 +406,7 @@ bytes begins with url-path is mapped to local files that begins with directory-filename, for example: - <code>{alias, {"/image", "/ftp/pub/image"}</code> + <code>{alias, {"/image", "/ftp/pub/image"}}</code> and an access to http://your.server.org/image/foo.gif would refer to the file /ftp/pub/image/foo.gif. </p> @@ -421,7 +421,7 @@ bytes by re:replace/3 to produce a path in the local filesystem. For example: - <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}</code> + <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}}</code> and an access to http://your.server.org/~bob/foo.gif would refer to the file /home/bob/public/foo.gif. @@ -468,7 +468,7 @@ bytes scripts. URLs with a path beginning with url-path are mapped to scripts beginning with directory-filename, for example: - <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}</code> + <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}}</code> and an access to http://your.server.org/cgi-bin/foo would cause the server to run the script /web/cgi-bin/foo. </p> @@ -483,7 +483,7 @@ bytes scripts. URLs with a path beginning with url-path are mapped to scripts beginning with directory-filename, for example: - <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}</code> + <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}}</code> and an access to http://your.server.org/cgi-bin/17/foo would cause the server to run the script /web/17/cgi-bin/foo. </p> @@ -517,7 +517,7 @@ bytes the standard CGI PATH_INFO and PATH_TRANSLATED environment variables. - <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}</code> + <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}}</code> </p> </item> @@ -532,7 +532,7 @@ bytes the standard CGI PATH_INFO and PATH_TRANSLATED environment variables. - <code>{script, {"PUT", "/cgi-bin/put"}</code> + <code>{script, {"PUT", "/cgi-bin/put"}}</code> </p> </item> @@ -549,7 +549,7 @@ bytes scheme scripts. A matching URL is mapped into a specific module and function. For example: - <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]} + <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}} </code> and a request to @@ -632,7 +632,7 @@ bytes </item> <marker id="prop_edlog"></marker> - <tag>{error_disk_log, internal | external}</tag> + <tag>{error_disk_log, path()}</tag> <item> <p>Defines the filename of the (disk_log(3)) error log file to be used to log server errors. If the filename does not begin @@ -706,7 +706,7 @@ bytes For example: - <code>{allow_from, ["123.34.56.11", "150.100.23"] </code> + <code>{allow_from, ["123.34.56.11", "150.100.23"]}</code> The host 123.34.56.11 and all machines on the 150.100.23 subnet are allowed access. </p> @@ -719,7 +719,7 @@ bytes which should be denied access to a given directory. For example: - <code>{deny_from, ["123.34.56.11", "150.100.23"] </code> + <code>{deny_from, ["123.34.56.11", "150.100.23"]}</code> The host 123.34.56.11 and all machines on the 150.100.23 subnet are not allowed access. </p> @@ -835,7 +835,7 @@ bytes <p><em>Security properties - requires mod_security </em></p> <marker id="prop_sec_dir"></marker> - <p><em>{security_directory, {path(), [{property(), term()}]}</em></p> + <p><em>{security_directory, {path(), [{property(), term()}]}}</em></p> <marker id="props_sdir"></marker> <p>Here follows the valid properties for security directories</p> @@ -1067,7 +1067,7 @@ bytes <fsummary>Called for each request to the Web server.</fsummary> <type> <v>OldData = list()</v> - <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}] </v> + <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}}] </v> <v>StausCode = integer()</v> <v>Body = io_list() | nobody | {Fun, Arg}</v> <v>Head = [HeaderOption]</v> diff --git a/lib/inets/doc/src/httpd_util.xml b/lib/inets/doc/src/httpd_util.xml index 9f290084d2..9218ee91e2 100644 --- a/lib/inets/doc/src/httpd_util.xml +++ b/lib/inets/doc/src/httpd_util.xml @@ -337,10 +337,10 @@ <func> <name>rfc1123_date() -> RFC1123Date</name> - <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}}) -> RFC1123Date</name> + <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}) -> RFC1123Date</name> <fsummary>Return the current date in RFC 1123 format.</fsummary> <type> - <v>YYYY = MM = DD = Hour = Min =Sec = integer()</v> + <v>YYYY = MM = DD = Hour = Min = Sec = integer()</v> <v>RFC1123Date = string()</v> </type> <desc> diff --git a/lib/inets/doc/src/mod_alias.xml b/lib/inets/doc/src/mod_alias.xml index 265a1b8e76..b38be5db28 100644 --- a/lib/inets/doc/src/mod_alias.xml +++ b/lib/inets/doc/src/mod_alias.xml @@ -118,7 +118,7 @@ </func> <func> - <name>real_script_name(ConfigDB,RequestURI,ScriptAliases) -> Ret</name> + <name>real_script_name(ConfigDB, RequestURI, ScriptAliases) -> Ret</name> <fsummary>Expand a request uri using ScriptAlias config directives.</fsummary> <type> <v>ConfigDB = config_db()</v> @@ -129,7 +129,7 @@ </type> <desc> <marker id="real_script_name"></marker> - <p><c>real_name/3</c> traverses <c>ScriptAliases</c>, + <p><c>real_script_name/3</c> traverses <c>ScriptAliases</c>, typically extracted from <c>ConfigDB</c>, and matches each <c>FakeName</c> with <c>RequestURI</c>. If a match is found <c>FakeName</c> is replaced with <c>RealName</c> in the diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml index d2e7ade5d6..f6bb2cca49 100644 --- a/lib/inets/doc/src/notes.xml +++ b/lib/inets/doc/src/notes.xml @@ -45,8 +45,6 @@ </item> </list> </section> - - <section><title>Improvements and New Features</title> <list> <item> @@ -158,7 +156,20 @@ </section> </section> +<section><title>Inets 5.9.2.2</title> + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Make log_alert configurable as option in ssl, SSLLogLevel + added as option to inets conf file</p> + <p> + Own Id: OTP-11259</p> + </item> + </list> + </section> +</section> <section><title>Inets 5.9.2.1</title> <section><title>Improvements and New Features</title> <list> diff --git a/lib/inets/doc/src/notes_history.xml b/lib/inets/doc/src/notes_history.xml index bd59c1ba47..4162ab97bb 100644 --- a/lib/inets/doc/src/notes_history.xml +++ b/lib/inets/doc/src/notes_history.xml @@ -834,7 +834,7 @@ <list type="bulleted"> <item> <p>[ftp, client] - A new option {progress, {CBmodule, - CBFunction, InitProgressTerm} has been added to allow + CBFunction, InitProgressTerm}} has been added to allow users to create things such as progress bars in there GUI's. The option affects ftp:send/[3,4] and ftp:recv/[3,4].</p> diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl index df58fa1b81..7e679531cf 100644 --- a/lib/inets/src/http_lib/http_transport.erl +++ b/lib/inets/src/http_lib/http_transport.erl @@ -159,7 +159,7 @@ listen(ip_comm = _SocketType, Addr, Port, Fd, IpFamily) -> listen_ip_comm(Addr, Port, Fd, IpFamily); listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) -> - listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily). + listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []). listen(ip_comm = _SocketType, Addr, Port, IpFamily) -> listen_ip_comm(Addr, Port, undefined, IpFamily); @@ -178,7 +178,13 @@ listen({essl, SSLConfig}, Addr, Port, IpFamily) -> [{addr, Addr}, {port, Port}, {ssl_config, SSLConfig}]), - listen_ssl(Addr, Port, undefined, SSLConfig, IpFamily). + {SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of + undefined -> + {SSLConfig, []}; + LogAlert -> + {proplists:delete(log_alert, SSLConfig), [{log_alert, LogAlert}]} + end, + listen_ssl(Addr, Port, undefined, SSLConfig2, IpFamily, ExtraOpts). listen_ip_comm(Addr, Port, Fd, IpFamily) -> case (catch do_listen_ip_comm(Addr, Port, Fd, IpFamily)) of @@ -221,24 +227,23 @@ do_listen_ip_comm(Addr, Port, Fd, IpFamily) -> gen_tcp:listen(NewPort, Opts2) end. - -listen_ssl(Addr, Port, Fd, Opts0, IpFamily) -> +listen_ssl(Addr, Port, Fd, Opts0, IpFamily, ExtraOpts) -> {NewPort, SockOpt} = get_socket_info(Addr, Port, Fd), Opts = SockOpt ++ Opts0, case IpFamily of inet6fb4 -> - Opts2 = [inet6 | Opts], + Opts2 = [inet6 | Opts] ++ ExtraOpts, ?hlrt("try ipv6 listen", [{opts, Opts2}]), case (catch ssl:listen(Port, Opts2)) of {error, Reason} when ((Reason =:= nxdomain) orelse (Reason =:= eafnosupport)) -> - Opts3 = [inet | Opts], + Opts3 = [inet | Opts] ++ ExtraOpts, ?hlrt("ipv6 listen failed - try ipv4 instead", [{reason, Reason}, {opts, Opts3}]), ssl:listen(NewPort, Opts3); {'EXIT', Reason} -> - Opts3 = [inet | Opts], + Opts3 = [inet | Opts] ++ ExtraOpts, ?hlrt("ipv6 listen exit - try ipv4 instead", [{reason, Reason}, {opts, Opts3}]), ssl:listen(NewPort, Opts3); @@ -251,7 +256,7 @@ listen_ssl(Addr, Port, Fd, Opts0, IpFamily) -> _ -> Opts2 = [IpFamily | Opts], ?hlrt("listen", [{opts, Opts2}]), - ssl:listen(NewPort, Opts2) + ssl:listen(NewPort, Opts2 ++ ExtraOpts) end. diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl index d45f3c0048..b3ca13e2fe 100644 --- a/lib/inets/src/http_server/httpd_conf.erl +++ b/lib/inets/src/http_server/httpd_conf.erl @@ -390,6 +390,13 @@ load("SSLCertificateFile " ++ SSLCertificateFile, []) -> {error, ?NICE(clean(SSLCertificateFile)++ " is an invalid SSLCertificateFile")} end; +load("SSLLogLevel " ++ SSLLogAlert, []) -> + case SSLLogAlert of + "none" -> + {ok, [], {ssl_log_alert, false}}; + _ -> + {ok, [], {ssl_log_alert, true}} + end; load("SSLCertificateKeyFile " ++ SSLCertificateKeyFile, []) -> case is_file(clean(SSLCertificateKeyFile)) of {ok, File} -> @@ -948,7 +955,8 @@ ssl_config(ConfigDB) -> ssl_ciphers(ConfigDB) ++ ssl_password(ConfigDB) ++ ssl_verify_depth(ConfigDB) ++ - ssl_ca_certificate_file(ConfigDB). + ssl_ca_certificate_file(ConfigDB) ++ + ssl_log_level(ConfigDB). @@ -1214,6 +1222,14 @@ ssl_certificate_key_file(ConfigDB) -> [{keyfile,SSLCertificateKeyFile}] end. +ssl_log_level(ConfigDB) -> + case httpd_util:lookup(ConfigDB,ssl_log_alert) of + undefined -> + []; + SSLLogLevel -> + [{log_alert,SSLLogLevel}] + end. + ssl_verify_client(ConfigDB) -> case httpd_util:lookup(ConfigDB,ssl_verify_client) of undefined -> diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl index 0f47d785ef..cb20159794 100644 --- a/lib/inets/src/http_server/httpd_request_handler.erl +++ b/lib/inets/src/http_server/httpd_request_handler.erl @@ -106,7 +106,7 @@ init([Manager, ConfigDB, AcceptTimeout]) -> case http_transport:negotiate(SocketType, Socket, TimeOut) of {error, Error} -> ?hdrd("negotiation failed", [{error, Error}]), - exit(Error); %% Can be 'normal'. + exit(shutdown); %% Can be 'normal'. ok -> ?hdrt("negotiation successfull", []), NewTimeout = TimeOut - timer:now_diff(now(),Then) div 1000, diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl index 6b6532266b..a45b04f275 100644 --- a/lib/inets/src/http_server/httpd_response.erl +++ b/lib/inets/src/http_server/httpd_response.erl @@ -20,7 +20,7 @@ -module(httpd_response). -export([generate_and_send_response/1, send_status/3, send_header/3, send_body/3, send_chunk/3, send_final_chunk/2, split_header/2, - is_disable_chunked_send/1, cache_headers/1]). + is_disable_chunked_send/1, cache_headers/2]). -export([map_status_code/2]). -include("httpd.hrl"). @@ -266,8 +266,8 @@ get_connection(false,"HTTP/1.1") -> get_connection(_,_) -> "". -cache_headers(#mod{config_db = Db}) -> - case httpd_util:lookup(Db, script_nocache, false) of +cache_headers(#mod{config_db = Db}, NoCacheType) -> + case httpd_util:lookup(Db, NoCacheType, false) of true -> Date = httpd_util:rfc1123_date(), [{"cache-control", "no-cache"}, diff --git a/lib/inets/src/http_server/mod_cgi.erl b/lib/inets/src/http_server/mod_cgi.erl index c854166c29..f1b73810e6 100644 --- a/lib/inets/src/http_server/mod_cgi.erl +++ b/lib/inets/src/http_server/mod_cgi.erl @@ -295,7 +295,7 @@ receive_headers(Port, Module, Function, Args, Timeout) -> end. send_headers(ModData, {StatusCode, _}, HTTPHeaders) -> - ExtraHeaders = httpd_response:cache_headers(ModData), + ExtraHeaders = httpd_response:cache_headers(ModData, script_nocache), httpd_response:send_header(ModData, StatusCode, ExtraHeaders ++ HTTPHeaders). diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl index e36c33b282..b11df34f9e 100644 --- a/lib/inets/src/http_server/mod_esi.erl +++ b/lib/inets/src/http_server/mod_esi.erl @@ -440,7 +440,7 @@ receive_headers(Timeout) -> end. send_headers(ModData, StatusCode, HTTPHeaders) -> - ExtraHeaders = httpd_response:cache_headers(ModData), + ExtraHeaders = httpd_response:cache_headers(ModData, erl_script_nocache), httpd_response:send_header(ModData, StatusCode, ExtraHeaders ++ HTTPHeaders). diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl index 523cf9d38c..fef0a1f0f4 100644 --- a/lib/inets/test/httpd_basic_SUITE.erl +++ b/lib/inets/test/httpd_basic_SUITE.erl @@ -33,7 +33,8 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [ uri_too_long_414, - header_too_long_413, + header_too_long_413, + erl_script_nocache_opt, escaped_url_in_error_body, slowdose ]. @@ -178,6 +179,28 @@ header_too_long_413(Config) when is_list(Config) -> {version, "HTTP/1.1"}]), inets:stop(httpd, Pid). +%%------------------------------------------------------------------------- +%%------------------------------------------------------------------------- + +erl_script_nocache_opt(doc) -> + ["Test that too long headers's get 413 HTTP code"]; +erl_script_nocache_opt(suite) -> + []; +erl_script_nocache_opt(Config) when is_list(Config) -> + HttpdConf = ?config(httpd_conf, Config), + {ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]), + Info = httpd:info(Pid), + Port = proplists:get_value(port, Info), + _Address = proplists:get_value(bind_address, Info), + URL1 = ?URL_START ++ integer_to_list(Port), + case httpc:request(get, {URL1 ++ "/dummy.html", []}, + [{url_encode, false}, + {version, "HTTP/1.0"}], + [{full_result, false}]) of + {ok, {200, _}} -> + ok + end, + inets:stop(httpd, Pid). %%------------------------------------------------------------------------- %%------------------------------------------------------------------------- diff --git a/lib/jinterface/test/Makefile b/lib/jinterface/test/Makefile index d9ff406994..90d4e01035 100644 --- a/lib/jinterface/test/Makefile +++ b/lib/jinterface/test/Makefile @@ -32,7 +32,7 @@ RELSYSDIR = $(RELEASE_PATH)/jinterface_test # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -TEST_SPEC_FILE = jinterface.spec +TEST_SPEC_FILE = jinterface.spec jinterface_smoke.spec COVER_FILE = jinterface.cover MODULES = nc_SUITE \ diff --git a/lib/jinterface/test/jinterface_smoke.spec b/lib/jinterface/test/jinterface_smoke.spec new file mode 100644 index 0000000000..4a76cce4cd --- /dev/null +++ b/lib/jinterface/test/jinterface_smoke.spec @@ -0,0 +1 @@ +{cases,"../jinterface_test",jinterface_SUITE,[java_erlang_send_receive]}. diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml index 362c373c6c..3909b11e59 100644 --- a/lib/kernel/doc/src/application.xml +++ b/lib/kernel/doc/src/application.xml @@ -253,15 +253,30 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code> </warning> </desc> </func> - <func> + <func> <name name="ensure_started" arity="1"/> <name name="ensure_started" arity="2"/> <fsummary>Load and start an application</fsummary> - <desc> - <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except - it returns <c>ok</c> for already started applications.</p> - </desc> - </func> + <desc> + <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except + it returns <c>ok</c> for already started applications.</p> + </desc> + </func> + <func> + <name name="ensure_all_started" arity="1"/> + <name name="ensure_all_started" arity="2"/> + <fsummary>Load and start an application and its dependencies, recursively</fsummary> + <desc> + <p>Equivalent to calling <seealso marker="#start/2"><c>application:start/1,2</c></seealso> + repeatedly on all dependencies that have not yet been started for an application. + The function returns <c>{ok, AppNames}</c> for a successful start or for an already started + application (which are however omitted from the <c>AppNames</c> list), and reports + <c>{error, {AppName,Reason}}</c> for errors, where <c>Reason</c> is any possible reason + returned by <seealso marker="#start/2"><c>application:start/1,2</c></seealso> when starting a + specific dependency. In case of an error, the applications that were started by the + function are stopped to bring the set of running applications back to its initial state.</p> + </desc> + </func> <func> <name name="start" arity="1"/> <name name="start" arity="2"/> diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index 7cd98914d1..254dfbf034 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -76,11 +76,11 @@ FFFF::192.168.42.2 {16#3ffe,16#b80,16#1f8d,16#2,16#204,16#acff,16#fe17,16#bf38} fe80::204:acff:fe17:bf38 {16#fe80,0,0,0,0,16#204,16#acff,16#fe17,16#bf38}</code> - <p>A function that may be useful is <c>inet_parse:address/1</c>:</p> + <p>A function that may be useful is <seealso marker="#parse_address/1">parse_address/1</seealso>:</p> <pre> -1> <input>inet_parse:address("192.168.42.2").</input> +1> <input>inet:parse_address("192.168.42.2").</input> {ok,{192,168,42,2}} -2> <input>inet_parse:address("FFFF::192.168.42.2").</input> +2> <input>inet:parse_address("FFFF::192.168.42.2").</input> {ok,{65535,0,0,0,0,0,49320,10754}}</pre> </description> @@ -375,6 +375,13 @@ fe80::204:acff:fe17:bf38 </desc> </func> <func> + <name name="ntoa" arity="1" /> + <fsummary>Convert IPv6 / IPV4 adress to ascii</fsummary> + <desc> + <p>Parses an <a href="#type-ip_address">ip_address()</a> and returns an IPv4 or IPv6 address string.</p> + </desc> + </func> + <func> <name name="parse_ipv4_address" arity="1" /> <fsummary>Parse an IPv4 address</fsummary> <desc> diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl index 5dd6b73857..4e8ba1b78a 100644 --- a/lib/kernel/src/application.erl +++ b/lib/kernel/src/application.erl @@ -18,7 +18,8 @@ %% -module(application). --export([start/1, start/2, start_boot/1, start_boot/2, stop/1, +-export([ensure_all_started/1, ensure_all_started/2, start/1, start/2, + start_boot/1, start_boot/2, stop/1, load/1, load/2, unload/1, takeover/2, which_applications/0, which_applications/1, loaded_applications/0, permit/2]). @@ -113,6 +114,46 @@ load1(Application, DistNodes) -> unload(Application) -> application_controller:unload_application(Application). + +-spec ensure_all_started(Application) -> {'ok', Started} | {'error', Reason} when + Application :: atom(), + Started :: [atom()], + Reason :: term(). +ensure_all_started(Application) -> + ensure_all_started(Application, temporary). + +-spec ensure_all_started(Application, Type) -> {'ok', Started} | {'error', Reason} when + Application :: atom(), + Type :: restart_type(), + Started :: [atom()], + Reason :: term(). +ensure_all_started(Application, Type) -> + case ensure_all_started(Application, Type, []) of + {ok, Started} -> + {ok, lists:reverse(Started)}; + {error, Reason, Started} -> + [stop(App) || App <- Started], + {error, Reason} + end. + +ensure_all_started(Application, Type, Started) -> + case start(Application, Type) of + ok -> + {ok, [Application | Started]}; + {error, {already_started, Application}} -> + {ok, Started}; + {error, {not_started, Dependency}} -> + case ensure_all_started(Dependency, Type, Started) of + {ok, NewStarted} -> + ensure_all_started(Application, Type, NewStarted); + Error -> + Error + end; + {error, Reason} -> + {error, {Application, Reason}, Started} + end. + + -spec start(Application) -> 'ok' | {'error', Reason} when Application :: atom(), Reason :: term(). diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index 3ea530a366..5749027acd 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -32,7 +32,7 @@ ip/1, stats/0, options/0, pushf/3, popf/1, close/1, gethostname/0, gethostname/1, parse_ipv4_address/1, parse_ipv6_address/1, parse_ipv4strict_address/1, - parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1]). + parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]). -export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]). @@ -529,6 +529,13 @@ getservbyname(Name, Protocol) when is_atom(Name) -> Error -> Error end. +-spec ntoa(IpAddress) -> + {ok, Address} | {error, einval} when + Address :: string(), + IpAddress :: ip_address(). +ntoa(Addr) -> + inet_parse:ntoa(Addr). + -spec parse_ipv4_address(Address) -> {ok, IPv4Address} | {error, einval} when Address :: string(), diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl index 619c78a6ca..98bd8d386c 100644 --- a/lib/kernel/src/inet_parse.erl +++ b/lib/kernel/src/inet_parse.erl @@ -722,7 +722,9 @@ ntoa({0,0,0,0,0,16#ffff,A,B}) -> "::FFFF:" ++ dig_to_dec(A) ++ "." ++ dig_to_dec(B); ntoa({_,_,_,_,_,_,_,_}=T) -> %% Find longest sequence of zeros, at least 2, to replace with "::" - ntoa(tuple_to_list(T), []). + ntoa(tuple_to_list(T), []); +ntoa(_) -> + {error, einval}. %% Find first double zero ntoa([], R) -> diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl index ced6f47bfe..0e7e7d2031 100644 --- a/lib/kernel/src/rpc.erl +++ b/lib/kernel/src/rpc.erl @@ -407,7 +407,7 @@ cast(Node, Mod, Fun, Args) -> true. -%% Asynchronous broadcast, returns nothing, it's just send'n prey +%% Asynchronous broadcast, returns nothing, it's just send 'n' pray -spec abcast(Name, Msg) -> abcast when Name :: atom(), Msg :: term(). diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl index bb654495d3..7b4ffb09ca 100644 --- a/lib/kernel/src/user_drv.erl +++ b/lib/kernel/src/user_drv.erl @@ -418,7 +418,7 @@ list_commands(Iport, Oport) -> true -> []; false -> - [{put_chars,unicode," q - quit erlang\n"}] + [{put_chars, unicode," q - quit erlang\n"}] end, io_requests([{put_chars, unicode," c [nn] - connect to job\n"}, {put_chars, unicode," i [nn] - interrupt job\n"}, diff --git a/lib/kernel/test/Makefile b/lib/kernel/test/Makefile index cb11d4e899..f1b8a105ed 100644 --- a/lib/kernel/test/Makefile +++ b/lib/kernel/test/Makefile @@ -145,7 +145,7 @@ release_tests_spec: make_emakefile $(INSTALL_DIR) "$(RELSYSDIR)" $(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)" $(INSTALL_DATA) $(APP_FILES) "$(RELSYSDIR)" - $(INSTALL_DATA) kernel.spec $(EMAKEFILE)\ + $(INSTALL_DATA) kernel.spec kernel_smoke.spec $(EMAKEFILE)\ $(COVERFILE) "$(RELSYSDIR)" chmod -R u+w "$(RELSYSDIR)" @tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl index 1ff291be54..9ec8a15861 100644 --- a/lib/kernel/test/application_SUITE.erl +++ b/lib/kernel/test/application_SUITE.erl @@ -35,7 +35,7 @@ -export([config_change/1, distr_changed_tc1/1, distr_changed_tc2/1, - ensure_started/1, + ensure_started/1, ensure_all_started/1, shutdown_func/1, do_shutdown/1, shutdown_timeout/1]). -define(TESTCASE, testcase_name). @@ -52,7 +52,7 @@ all() -> [failover, failover_comp, permissions, load, load_use_cache, ensure_started, {group, reported_bugs}, start_phases, script_start, nodedown_start, permit_false_start_local, - permit_false_start_dist, get_key, get_env, + permit_false_start_dist, get_key, get_env, ensure_all_started, {group, distr_changed}, config_change, shutdown_func, shutdown_timeout]. groups() -> @@ -978,6 +978,85 @@ ensure_started(Conf) -> ok = application:unload(app1), ok. +ensure_all_started(suite) -> []; +ensure_all_started(doc) -> ["Test application:ensure_all_started/1-2."]; +ensure_all_started(Conf) -> + + {ok, Fd1} = file:open("app1.app", [write]), + w_app1(Fd1), + file:close(Fd1), + {ok, Fd9} = file:open("app9.app", [write]), + w_app9(Fd9), + file:close(Fd9), + {ok, Fd10} = file:open("app10.app", [write]), + w_app10_dep9(Fd10), + file:close(Fd10), + {ok, FdErr} = file:open("app_chain_error.app", [write]), + w_app(FdErr, app_chain_error()), + file:close(FdErr), + {ok, FdErr2} = file:open("app_chain_error2.app", [write]), + w_app(FdErr2, app_chain_error2()), + file:close(FdErr2), + + %% Single app start/stop + false = lists:keyfind(app1, 1, application:which_applications()), + {ok, [app1]} = application:ensure_all_started(app1), % app1 started + {app1, _, _} = lists:keyfind(app1, 1, application:which_applications()), + {ok, []} = application:ensure_all_started(app1), % no start needed + ok = application:stop(app1), + false = lists:keyfind(app1, 1, application:which_applications()), + ok = application:unload(app1), + + %% App or dependency not found. + Name = hopefully_not_an_existing_app_file, + {error,{Name, {"no such file or directory", _ }}} = + application:ensure_all_started(Name), + + %% Start dependencies. + {error, {not_started, app9}} = application:start(app10), + {ok, [app9,app10]} = application:ensure_all_started(app10, temporary), + {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()), + {app10, _, _} = lists:keyfind(app10, 1, application:which_applications()), + %% Only report apps/dependencies that actually needed to start + ok = application:stop(app10), + ok = application:unload(app10), + {ok, [app10]} = application:ensure_all_started(app10, temporary), + ok = application:stop(app9), + ok = application:unload(app9), + ok = application:stop(app10), + ok = application:unload(app10), + + %% Deeper failure chain. We have the following dependencies: + %% app_chain_error -> app_chain_error2 + %% app_chain_error2 -> app10 + %% app_chain_error2 -> hopefully_not_an_existing_app + %% app10 -> app 9 + %% First we have none running and we expect to have neither app9 + %% nor app10 running after failing to start + %% hopefully_not_an_existing_app + {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}= + application:ensure_all_started(app_chain_error), + false = lists:keyfind(app9, 1, application:which_applications()), + false = lists:keyfind(app10, 1, application:which_applications()), + false = lists:keyfind(app_chain_error2,1,application:which_applications()), + false = lists:keyfind(app_chain_error, 1, application:which_applications()), + %% Here we will have app9 already running, and app10 should be + %% able to boot fine. + %% In this dependency failing, we expect app9 to still be running, but + %% not app10 after failing to start hopefully_not_an_existing_app + {ok, [app9]} = application:ensure_all_started(app9, temporary), + {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}= + application:ensure_all_started(app_chain_error), + {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()), + false = lists:keyfind(app10, 1, application:which_applications()), + false = lists:keyfind(app_chain_error2,1,application:which_applications()), + false = lists:keyfind(app_chain_error, 1, application:which_applications()), + ok = application:stop(app9), + ok = application:unload(app9), + ok = application:unload(app10), + ok = application:unload(app_chain_error2), + ok = application:unload(app_chain_error), + ok. %%%----------------------------------------------------------------- %%% Testing of reported bugs and other tickets. @@ -2125,6 +2204,24 @@ app_start_error() -> {applications, [kernel]}, {mod, {app_start_error, []}}]}. +app_chain_error() -> + {application, app_chain_error, + [{description, "ERTS CXC 138 ce"}, + {vsn, "2.0"}, + {modules, []}, + {registered, []}, + {applications, [kernel, app_chain_error2]}, + {mod, {ch_sup, {app_chain_error, 20,20}}}]}. + +app_chain_error2() -> + {application, app_chain_error2, + [{description, "ERTS CXC 138 ce2"}, + {vsn, "2.0"}, + {modules, []}, + {registered, []}, + {applications, [kernel, app10, hopefully_not_an_existing_app]}, + {mod, {ch_sup, {app_chain_error2, 21,21}}}]}. + app_group_leader() -> {application, group_leader, [{description, "GROUP_LEADER CXC 138 11"}, @@ -2374,6 +2471,12 @@ w_app7(Fd) -> w_app8(Fd) -> io:format(Fd, "~p.\n", [app8()]). +w_app9(Fd) -> + io:format(Fd, "~p.\n", [app9()]). + +w_app10_dep9(Fd) -> + io:format(Fd, "~p.\n", [app10_dep9()]). + w_app_start_error(Fd) -> io:format(Fd, "~p.\n", [app_start_error()]). diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index fc17db2745..cd9359f2aa 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -35,7 +35,7 @@ on_load_embedded/1, on_load_errors/1, big_boot_embedded/1, native_early_modules/1, get_mode/1]). --export([init_per_testcase/2, end_per_testcase/2, +-export([init_per_testcase/2, end_per_testcase/2, init_per_suite/1, end_per_suite/1, sticky_compiler/1]). @@ -48,7 +48,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. -all() -> +all() -> [set_path, get_path, add_path, add_paths, del_path, replace_path, load_file, load_abs, ensure_loaded, delete, purge, soft_purge, is_loaded, all_loaded, @@ -62,7 +62,7 @@ all() -> on_load_binary, on_load_embedded, on_load_errors, big_boot_embedded, native_early_modules, get_mode]. -groups() -> +groups() -> []. init_per_group(_GroupName, Config) -> @@ -76,10 +76,10 @@ init_per_suite(Config) -> %% the module name does not match the filename, so %% we must compile to a binary and write the Beam file %% ourselves. - ?line Dir = filename:dirname(code:which(?MODULE)), - ?line File = filename:join(Dir, "code_a_test"), - ?line {ok,code_b_test,Code} = compile:file(File, [binary]), - ?line ok = file:write_file(File++".beam", Code), + Dir = filename:dirname(code:which(?MODULE)), + File = filename:join(Dir, "code_a_test"), + {ok,code_b_test,Code} = compile:file(File, [binary]), + ok = file:write_file(File++".beam", Code), Config. end_per_suite(Config) -> @@ -98,7 +98,7 @@ init_per_testcase(_Func, Config) -> P=code:get_path(), [{watchdog, Dog}, {code_path, P}|Config]. -end_per_testcase(TC, Config) when TC == mult_lib_roots; +end_per_testcase(TC, Config) when TC == mult_lib_roots; TC == big_boot_embedded -> {ok, HostName} = inet:gethostname(), NodeName = list_to_atom(atom_to_list(TC)++"@"++HostName), @@ -121,51 +121,49 @@ set_path(doc) -> []; set_path(Config) when is_list(Config) -> P = code:get_path(), NonExDir = filename:join(?config(priv_dir, Config), ?t:temp_name("hej")), - ?line {'EXIT',_} = (catch code:set_path({a})), - ?line {error, bad_directory} = (catch code:set_path([{a}])), - ?line {error, bad_directory} = code:set_path(NonExDir), - ?line P = code:get_path(), % still the same path. - ?line true = code:set_path(P), % set the same path again. - ?line P = code:get_path(), % still the same path. + {'EXIT',_} = (catch code:set_path({a})), + {error, bad_directory} = (catch code:set_path([{a}])), + {error, bad_directory} = code:set_path(NonExDir), + P = code:get_path(), % still the same path. + true = code:set_path(P), % set the same path again. + P = code:get_path(), % still the same path. LibDir = code:lib_dir(), - ?line true = code:set_path([LibDir | P]), - ?line [LibDir | P] = code:get_path(), - ?line true = code:set_path([LibDir]), - ?line [LibDir] = code:get_path(), + true = code:set_path([LibDir | P]), + [LibDir | P] = code:get_path(), + true = code:set_path([LibDir]), + [LibDir] = code:get_path(), ok. get_path(suite) -> []; get_path(doc) -> []; get_path(Config) when is_list(Config) -> - ?line P = code:get_path(), + P = code:get_path(), % test that all directories are strings (lists). - ?line [] = lists:filter(fun(Dir) when is_list(Dir) -> - false; - (_) -> - true - end, - P), + [] = lists:filter(fun + (Dir) when is_list(Dir) -> false; + (_) -> true + end, P), ok. add_path(suite) -> []; add_path(doc) -> []; add_path(Config) when is_list(Config) -> P = code:get_path(), - ?line {'EXIT',_} = (catch code:add_path({})), - ?line {'EXIT',_} = (catch code:add_patha({})), - ?line {'EXIT',_} = (catch code:add_pathz({})), - ?line {error, bad_directory} = code:add_path("xyz"), - ?line {error, bad_directory} = code:add_patha("xyz"), - ?line {error, bad_directory} = code:add_pathz("xyz"), + {'EXIT',_} = (catch code:add_path({})), + {'EXIT',_} = (catch code:add_patha({})), + {'EXIT',_} = (catch code:add_pathz({})), + {error, bad_directory} = code:add_path("xyz"), + {error, bad_directory} = code:add_patha("xyz"), + {error, bad_directory} = code:add_pathz("xyz"), LibDir = code:lib_dir(), - ?line true = code:add_path(LibDir), - ?line LibDir = lists:last(code:get_path()), + true = code:add_path(LibDir), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line true = code:add_pathz(LibDir), - ?line LibDir = lists:last(code:get_path()), + true = code:add_pathz(LibDir), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line true = code:add_patha(LibDir), - ?line [LibDir|_] = code:get_path(), + true = code:add_patha(LibDir), + [LibDir|_] = code:get_path(), code:set_path(P), ok. @@ -173,134 +171,134 @@ add_paths(suite) -> []; add_paths(doc) -> []; add_paths(Config) when is_list(Config) -> P = code:get_path(), - ?line ok = code:add_paths([{}]), - ?line ok = code:add_pathsa([{}]), - ?line ok = code:add_pathsz([{}]), - ?line ok = code:add_paths(["xyz"]), - ?line ok = code:add_pathsa(["xyz"]), - ?line ok = code:add_pathsz(["xyz"]), + ok = code:add_paths([{}]), + ok = code:add_pathsa([{}]), + ok = code:add_pathsz([{}]), + ok = code:add_paths(["xyz"]), + ok = code:add_pathsa(["xyz"]), + ok = code:add_pathsz(["xyz"]), P = code:get_path(), % check that no directory is added. LibDir = code:lib_dir(), - ?line ok = code:add_paths([LibDir]), - ?line LibDir = lists:last(code:get_path()), + ok = code:add_paths([LibDir]), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line ok = code:add_pathsz([LibDir]), - ?line LibDir = lists:last(code:get_path()), + ok = code:add_pathsz([LibDir]), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line ok = code:add_pathsa([LibDir]), - ?line [LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir]), + [LibDir|P] = code:get_path(), code:set_path(P), RootDir = code:root_dir(), Res = P ++ [LibDir, RootDir], - ?line ok = code:add_paths([LibDir, RootDir]), - ?line Res = code:get_path(), + ok = code:add_paths([LibDir, RootDir]), + Res = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsz([LibDir, RootDir]), - ?line Res = code:get_path(), + ok = code:add_pathsz([LibDir, RootDir]), + Res = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsa([LibDir, RootDir]), - ?line [RootDir, LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir, RootDir]), + [RootDir, LibDir|P] = code:get_path(), code:set_path(P), - ?line ok = code:add_paths([LibDir, "xyz"]), + ok = code:add_paths([LibDir, "xyz"]), Res1 = P ++ [LibDir], - ?line Res1 = code:get_path(), + Res1 = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsz([LibDir, "xyz"]), - ?line Res1 = code:get_path(), + ok = code:add_pathsz([LibDir, "xyz"]), + Res1 = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsa([LibDir, "xyz"]), - ?line [LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir, "xyz"]), + [LibDir|P] = code:get_path(), code:set_path(P), ok. del_path(suite) -> []; del_path(doc) -> []; del_path(Config) when is_list(Config) -> - ?line P = code:get_path(), + P = code:get_path(), test_server:format("Initial code:get_path()=~p~n",[P]), - ?line {'EXIT',_} = (catch code:del_path(3)), - ?line false = code:del_path(my_dummy_name), - ?line false = code:del_path("/kdlk/my_dummy_dir"), + {'EXIT',_} = (catch code:del_path(3)), + false = code:del_path(my_dummy_name), + false = code:del_path("/kdlk/my_dummy_dir"), Dir = filename:join([code:lib_dir(kernel),"ebin"]), test_server:format("kernel dir: ~p~n",[Dir]), - ?line true = code:del_path(kernel), + true = code:del_path(kernel), NewP = code:get_path(), test_server:format("Path after removing 'kernel':~p~n",[NewP]), ReferenceP = lists:delete(Dir,P), test_server:format("Reference path:~p~n",[ReferenceP]), - ?line NewP = ReferenceP, % check that dir is deleted + NewP = ReferenceP, % check that dir is deleted code:set_path(P), - ?line true = code:del_path(Dir), + true = code:del_path(Dir), NewP1 = code:get_path(), - ?line NewP1 = lists:delete(Dir,P), % check that dir is deleted + NewP1 = lists:delete(Dir,P), % check that dir is deleted code:set_path(P), ok. replace_path(suite) -> []; replace_path(doc) -> []; replace_path(Config) when is_list(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line P = code:get_path(), - ?line {'EXIT',_} = (catch code:replace_path(3,"")), - ?line {error, bad_name} = code:replace_path(dummy_name,""), - ?line {error, bad_name} = code:replace_path(kernel, + PrivDir = ?config(priv_dir, Config), + P = code:get_path(), + {'EXIT',_} = (catch code:replace_path(3,"")), + {error, bad_name} = code:replace_path(dummy_name,""), + {error, bad_name} = code:replace_path(kernel, "/kdlk/my_dummy_dir"), - ?line {error, bad_directory} = code:replace_path(kernel, + {error, bad_directory} = code:replace_path(kernel, "/kdlk/kernel-1.2"), - ?line P = code:get_path(), % Check that path is not changed. + P = code:get_path(), % Check that path is not changed. - ?line ok = file:set_cwd(PrivDir), + ok = file:set_cwd(PrivDir), %% Replace an existing application. file:make_dir("./kernel-2.11"), {ok, Cwd} = file:get_cwd(), NewDir = Cwd ++ "/kernel-2.11", - ?line true = code:replace_path(kernel, NewDir), - ?line NewDir = code:lib_dir(kernel), - ?line true = code:set_path(P), %Reset path - ?line ok = file:del_dir("./kernel-2.11"), + true = code:replace_path(kernel, NewDir), + NewDir = code:lib_dir(kernel), + true = code:set_path(P), %Reset path + ok = file:del_dir("./kernel-2.11"), %% Add a completly new application. NewAppName = 'blurf_blarfer', - ?line NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"), - ?line ok = file:make_dir(NewAppDir), - ?line true = code:replace_path(NewAppName, NewAppDir), - ?line NewAppDir = code:lib_dir(NewAppName), - ?line NewAppDir = lists:last(code:get_path()), - ?line true = code:set_path(P), %Reset path - ?line ok = file:del_dir(NewAppDir), + NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"), + ok = file:make_dir(NewAppDir), + true = code:replace_path(NewAppName, NewAppDir), + NewAppDir = code:lib_dir(NewAppName), + NewAppDir = lists:last(code:get_path()), + true = code:set_path(P), %Reset path + ok = file:del_dir(NewAppDir), ok. dir_disappeared(suite) -> []; dir_disappeared(doc) -> ["OTP-3977"]; dir_disappeared(Config) when is_list(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Dir = filename:join(PrivDir, "temp"), - ?line ok = file:make_dir(Dir), - ?line true = code:add_path(Dir), - ?line ok = file:del_dir(Dir), - ?line non_existing = code:which(bubbelskrammel), + PrivDir = ?config(priv_dir, Config), + Dir = filename:join(PrivDir, "temp"), + ok = file:make_dir(Dir), + true = code:add_path(Dir), + ok = file:del_dir(Dir), + non_existing = code:which(bubbelskrammel), ok. load_file(suite) -> []; load_file(doc) -> []; load_file(Config) when is_list(Config) -> - ?line {error, nofile} = code:load_file(duuuumy_mod), - ?line {error, badfile} = code:load_file(code_a_test), - ?line {'EXIT', _} = (catch code:load_file(123)), - ?line {module, code_b_test} = code:load_file(code_b_test), + {error, nofile} = code:load_file(duuuumy_mod), + {error, badfile} = code:load_file(code_a_test), + {'EXIT', _} = (catch code:load_file(123)), + {module, code_b_test} = code:load_file(code_b_test), TestDir = test_dir(), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_file(code_b_test), + {error, sticky_directory} = code:load_file(code_b_test), code:unstick_dir(TestDir), ok. @@ -311,30 +309,30 @@ load_abs(suite) -> []; load_abs(doc) -> []; load_abs(Config) when is_list(Config) -> TestDir = test_dir(), - ?line {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"), - ?line {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"), - ?line {'EXIT', _} = (catch code:load_abs({})), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"), + {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"), + {'EXIT', _} = (catch code:load_abs({})), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"), + {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"), code:unstick_dir(TestDir), ok. ensure_loaded(suite) -> []; ensure_loaded(doc) -> []; ensure_loaded(Config) when is_list(Config) -> - ?line {module, lists} = code:ensure_loaded(lists), + {module, lists} = code:ensure_loaded(lists), case init:get_argument(mode) of {ok, [["embedded"]]} -> - ?line {error, embedded} = code:ensure_loaded(code_b_test), - ?line {error, badarg} = code:ensure_loaded(34), + {error, embedded} = code:ensure_loaded(code_b_test), + {error, badarg} = code:ensure_loaded(34), ok; _ -> - ?line {error, nofile} = code:ensure_loaded(duuuumy_mod), - ?line {error, badfile} = code:ensure_loaded(code_a_test), - ?line {'EXIT', _} = (catch code:ensure_loaded(34)), - ?line {module, code_b_test} = code:ensure_loaded(code_b_test), - ?line {module, code_b_test} = code:ensure_loaded(code_b_test), + {error, nofile} = code:ensure_loaded(duuuumy_mod), + {error, badfile} = code:ensure_loaded(code_a_test), + {'EXIT', _} = (catch code:ensure_loaded(34)), + {module, code_b_test} = code:ensure_loaded(code_b_test), + {module, code_b_test} = code:ensure_loaded(code_b_test), ok end. @@ -343,15 +341,15 @@ delete(doc) -> []; delete(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line {'EXIT',_} = (catch code:delete(122)), - ?line false = code_b_test:check_exit(Pid), - ?line false = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + {'EXIT',_} = (catch code:delete(122)), + false = code_b_test:check_exit(Pid), + false = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), exit(Pid,kill), - ?line true = code_b_test:check_exit(Pid), - ?line false = code:delete(code_b_test), + true = code_b_test:check_exit(Pid), + false = code:delete(code_b_test), code:purge(code_b_test), process_flag(trap_exit, OldFlag), ok. @@ -361,13 +359,13 @@ purge(doc) -> []; purge(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line {'EXIT',_} = (catch code:purge({})), - ?line false = code:purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), - ?line true = code:purge(code_b_test), - ?line true = code_b_test:check_exit(Pid), + {'EXIT',_} = (catch code:purge({})), + false = code:purge(code_b_test), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), + true = code:purge(code_b_test), + true = code_b_test:check_exit(Pid), process_flag(trap_exit, OldFlag), ok. @@ -376,16 +374,16 @@ soft_purge(doc) -> []; soft_purge(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line {'EXIT',_} = (catch code:soft_purge(23)), - ?line true = code:soft_purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), - ?line false = code:soft_purge(code_b_test), - ?line false = code_b_test:check_exit(Pid), + {'EXIT',_} = (catch code:soft_purge(23)), + true = code:soft_purge(code_b_test), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), + false = code:soft_purge(code_b_test), + false = code_b_test:check_exit(Pid), exit(Pid,kill), - ?line true = code_b_test:check_exit(Pid), - ?line true = code:soft_purge(code_b_test), + true = code_b_test:check_exit(Pid), + true = code:soft_purge(code_b_test), process_flag(trap_exit, OldFlag), ok. @@ -394,12 +392,12 @@ is_loaded(doc) -> []; is_loaded(Config) when is_list(Config) -> code:purge(code_b_test), code:delete(code_b_test), - ?line false = code:is_loaded(duuuuuumy_mod), - ?line {'EXIT',_} = (catch code:is_loaded(23)), - ?line {file, preloaded} = code:is_loaded(init), + false = code:is_loaded(duuuuuumy_mod), + {'EXIT',_} = (catch code:is_loaded(23)), + {file, preloaded} = code:is_loaded(init), TestDir = test_dir(), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), - ?line {file, _Loaded} = code:is_loaded(code_b_test), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {file, _Loaded} = code:is_loaded(code_b_test), code:purge(code_b_test), code:delete(code_b_test), ok. @@ -413,21 +411,19 @@ all_loaded(Config) when is_list(Config) -> end. all_loaded_1() -> - ?line Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())], + Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())], - ?line Loaded0 = lists:sort(code:all_loaded()), - ?line all_unique(Loaded0), - ?line Loaded1 = lists:keysort(2, Loaded0), - ?line Loaded2 = match_and_remove(Preloaded, Loaded1), + Loaded0 = lists:sort(code:all_loaded()), + all_unique(Loaded0), + Loaded1 = lists:keysort(2, Loaded0), + Loaded2 = match_and_remove(Preloaded, Loaded1), ObjExt = code:objfile_extension(), - ?line [] = lists:filter(fun({Mod,AbsName}) when is_atom(Mod), - is_list(AbsName) -> - Mod =/= list_to_atom(filename:basename(AbsName, - ObjExt)); - (_) -> true - end, - Loaded2), + [] = lists:filter(fun + ({Mod,AbsName}) when is_atom(Mod), is_list(AbsName) -> + Mod =/= list_to_atom(filename:basename(AbsName, ObjExt)); + (_) -> true + end, Loaded2), ok. match_and_remove([], List) -> List; @@ -442,19 +438,19 @@ load_binary(doc) -> []; load_binary(Config) when is_list(Config) -> TestDir = test_dir(), File = TestDir ++ "/code_b_test" ++ code:objfile_extension(), - ?line {ok,Bin} = file:read_file(File), - ?line {'EXIT',_} = (catch code:load_binary(12, File, Bin)), - ?line {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)), - ?line {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)), - ?line {module, code_b_test} = code:load_binary(code_b_test, File, Bin), + {ok,Bin} = file:read_file(File), + {'EXIT',_} = (catch code:load_binary(12, File, Bin)), + {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)), + {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)), + {module, code_b_test} = code:load_binary(code_b_test, File, Bin), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_binary(code_b_test, File, Bin), + {error, sticky_directory} = code:load_binary(code_b_test, File, Bin), code:unstick_dir(TestDir), code:purge(code_b_test), code:delete(code_b_test), ok. -upgrade(Config) -> +upgrade(Config) -> DataDir = ?config(data_dir, Config), %%T = [beam, hipe], @@ -462,28 +458,28 @@ upgrade(Config) -> [upgrade_do(DataDir, Client, U1, U2, O1, O2) || Client<-T, U1<-T, U2<-T, O1<-T, O2<-T], - + ok. upgrade_do(DataDir, Client, U1, U2, O1, O2) -> - compile_load(upgrade_client, DataDir, undefined, Client), + compile_load(upgrade_client, DataDir, undefined, Client), upgrade_client:run(DataDir, U1, U2, O1, O2), ok. compile_load(Mod, Dir, Ver, CodeType) -> Version = case Ver of - undefined -> - io:format("Compiling '~p' as ~p\n", [Mod, CodeType]), - []; - _ -> - io:format("Compiling version ~p of '~p' as ~p\n", - [Ver, Mod, CodeType]), - [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}] - end, + undefined -> + io:format("Compiling '~p' as ~p\n", [Mod, CodeType]), + []; + _ -> + io:format("Compiling version ~p of '~p' as ~p\n", + [Ver, Mod, CodeType]), + [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}] + end, Target = case CodeType of - beam -> []; - hipe -> [native] - end, + beam -> []; + hipe -> [native] + end, CompOpts = [binary, report] ++ Target ++ Version, Src = filename:join(Dir, atom_to_list(Mod) ++ ".erl"), @@ -497,17 +493,17 @@ compile_load(Mod, Dir, Ver, CodeType) -> dir_req(suite) -> []; dir_req(doc) -> []; dir_req(Config) when is_list(Config) -> - ?line {ok,[[Root0]]} = init:get_argument(root), - ?line Root = filename:join([Root0]), % Normalised form. - ?line Root = code:root_dir(), + {ok,[[Root0]]} = init:get_argument(root), + Root = filename:join([Root0]), % Normalised form. + Root = code:root_dir(), LibDir = Root ++ "/lib", - ?line LibDir = code:lib_dir(), - ?line code:compiler_dir(), - ?line {error, bad_name} = code:lib_dir(duuumy), - ?line KernLib = code:lib_dir(kernel), - ?line Priv = KernLib ++ "/priv", - ?line Priv = code:priv_dir(kernel), - ?line {error, bad_name} = code:priv_dir(duuumy), + LibDir = code:lib_dir(), + code:compiler_dir(), + {error, bad_name} = code:lib_dir(duuumy), + KernLib = code:lib_dir(kernel), + Priv = KernLib ++ "/priv", + Priv = code:priv_dir(kernel), + {error, bad_name} = code:priv_dir(duuumy), ok. object_code(suite) -> []; @@ -517,19 +513,19 @@ object_code(Config) when is_list(Config) -> P = code:get_path(), P = code:get_path(), code:add_path(TestDir), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), LoadedFile = filename:absname(TestDir ++ "/code_b_test" ++ code:objfile_extension()), - ?line case code:get_object_code(code_b_test) of + case code:get_object_code(code_b_test) of {code_b_test,Bin,LoadedFile} when is_binary(Bin) -> ok end, code:purge(code_b_test), code:delete(code_b_test), - ?line error = code:get_object_code(dddddddduuuuuuumy), - ?line {'EXIT',_} = (catch code:get_object_code(23)), - ?line code:set_path(P), - ?line P=code:get_path(), + error = code:get_object_code(dddddddduuuuuuumy), + {'EXIT',_} = (catch code:get_object_code(23)), + code:set_path(P), + P=code:get_path(), ok. set_path_file(suite) -> []; @@ -537,17 +533,17 @@ set_path_file(doc) -> ["Test that set_path does not accept ", "files as pathnames (known previous bug)"]; set_path_file(Config) when is_list(Config) -> File=filename:join(?config(priv_dir, Config), "testfil"), - ?line ok=file:write_file(File, list_to_binary("lite data")), - ?line {error, bad_directory}=code:set_path([File]). + ok=file:write_file(File, list_to_binary("lite data")), + {error, bad_directory}=code:set_path([File]). sticky_dir(suite) -> []; sticky_dir(doc) -> ["Test that a module with the same name as a module in ", "a sticky directory cannot be loaded."]; sticky_dir(Config) when is_list(Config) -> MyDir=filename:dirname(code:which(?MODULE)), - ?line {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]), + {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]), File=filename:join([?config(data_dir, Config), "calendar"]), - ?line Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]), + Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]), case Ret of fail -> ?t:fail("c:c allowed a sticky module to be compiled and loaded."); @@ -607,70 +603,70 @@ add_del_path(Config) when is_list(Config) -> Dir1 = filename:join(DDir,"dummy_app-1.0/ebin"), Dir2 = filename:join(DDir,"dummy_app-2.0/ebin"), code:add_patha(Dir1), - ?line PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"), - ?line PrivDir1 = code:priv_dir(dummy_app), - ?line code:add_path(Dir2), % put last in path - ?line PrivDir1 = code:priv_dir(dummy_app), - ?line code:del_path(Dir2), - ?line PrivDir1 = code:priv_dir(dummy_app), + PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"), + PrivDir1 = code:priv_dir(dummy_app), + code:add_path(Dir2), % put last in path + PrivDir1 = code:priv_dir(dummy_app), + code:del_path(Dir2), + PrivDir1 = code:priv_dir(dummy_app), ok. clash(Config) when is_list(Config) -> DDir = ?config(data_dir,Config)++"clash/", P = code:get_path(), - [TestServerPath|_] = [Path || Path <- code:get_path(), + [TestServerPath|_] = [Path || Path <- code:get_path(), re:run(Path,"test_server/?$",[]) /= nomatch], %% test non-clashing entries %% remove TestServerPath to prevent clash with test-server path - ?line true = code:del_path(TestServerPath), - ?line true = code:add_path(DDir++"foobar-0.1/ebin"), - ?line true = code:add_path(DDir++"zork-0.8/ebin"), + true = code:del_path(TestServerPath), + true = code:add_path(DDir++"foobar-0.1/ebin"), + true = code:add_path(DDir++"zork-0.8/ebin"), test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [OKMsg|_] = test_server:capture_get(), - ?line true = lists:prefix("** Found 0 name clashes", OKMsg), - ?line true = code:set_path(P), + [OKMsg|_] = test_server:capture_get(), + true = lists:prefix("** Found 0 name clashes", OKMsg), + true = code:set_path(P), %% test clashing entries %% remove TestServerPath to prevent clash with test-server path - ?line true = code:del_path(TestServerPath), - ?line true = code:add_path(DDir++"foobar-0.1/ebin"), - ?line true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"), + true = code:del_path(TestServerPath), + true = code:add_path(DDir++"foobar-0.1/ebin"), + true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"), test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [ClashMsg|_] = test_server:capture_get(), - ?line {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*", + [ClashMsg|_] = test_server:capture_get(), + {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*", [{capture,all_but_first,list}]), - ?line true = code:set_path(P), + true = code:set_path(P), %% test "Bad path can't read" %% remove TestServerPath to prevent clash with test-server path Priv = ?config(priv_dir, Config), - ?line true = code:del_path(TestServerPath), + true = code:del_path(TestServerPath), TmpEzFile = Priv++"foobar-0.tmp.ez", - ?line {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile), - ?line true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"), + {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile), + true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"), case os:type() of {win32,_} -> - %% The file wont be deleted on windows until it's closed, why we + %% The file wont be deleted on windows until it's closed, why we %% need to rename instead. - ?line ok = file:rename(TmpEzFile,TmpEzFile++".moved"); + ok = file:rename(TmpEzFile,TmpEzFile++".moved"); _ -> - ?line ok = file:delete(TmpEzFile) + ok = file:delete(TmpEzFile) end, test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [BadPathMsg|_] = test_server:capture_get(), - ?line true = lists:prefix("** Bad path can't read", BadPathMsg), - ?line true = code:set_path(P), + [BadPathMsg|_] = test_server:capture_get(), + true = lists:prefix("** Bad path can't read", BadPathMsg), + true = code:set_path(P), file:delete(TmpEzFile++".moved"), %% Only effect on windows ok. @@ -687,7 +683,7 @@ ext_mod_dep(Config) when is_list(Config) -> xref:add_directory(s, filename:join(code:lib_dir(kernel),"ebin")), xref:add_directory(s, filename:join(code:lib_dir(stdlib),"ebin")), case catch ext_mod_dep2() of - {'EXIT', Reason} -> + {'EXIT', Reason} -> xref:stop(s), exit(Reason); Else -> @@ -699,7 +695,7 @@ ext_mod_dep(Config) when is_list(Config) -> end. ext_mod_dep2() -> - Exports0 = code_server:module_info(exports) -- + Exports0 = code_server:module_info(exports) -- [{module_info,0},{module_info,1}], Exports = [{code_server,M,A} || {M,A} <- Exports0], case analyse(Exports, [], [], 0) of @@ -709,17 +705,17 @@ ext_mod_dep2() -> {not_verified,ErrCnt} end. -analyse([], [], Visited, ErrCnt) -> +analyse([], [], Visited, ErrCnt) -> {Visited,ErrCnt}; analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) -> %% The code_server has been granted to use the following modules, - %% These modules should be loaded by code.erl before + %% These modules should be loaded by code.erl before %% the code_server is started. OK = [erlang, os, prim_file, erl_prim_loader, init, ets, code_server, lists, lists_sort, unicode, binary, filename, gb_sets, gb_trees, hipe_unified_loader, hipe_bifs, prim_zip, zlib], - ErrCnt1 = + ErrCnt1 = case lists:member(M, OK) or erlang:is_builtin(M,F,A) of true -> 0; @@ -729,7 +725,7 @@ analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) -> {Visited, ErrCnt1+ErrCnt0}; analyse([MFA|R], Path, Visited0, ErrCnt0) -> case lists:member(MFA,Visited0) of - false -> + false -> {Visited,ErrCnt1} = analyse2(MFA, Path, Visited0), analyse(R, Path, Visited, ErrCnt1+ErrCnt0); true -> @@ -814,7 +810,7 @@ check_funs({'$M_EXPR','$F_EXPR',_}, {code_server,start_link,1}]) -> 0; check_funs({'$M_EXPR','$F_EXPR',_}, [{erlang,spawn_link,1},{code_server,start_link,1}]) -> 0; -check_funs({'$M_EXPR',module_info,1}, +check_funs({'$M_EXPR',module_info,1}, [{hipe_unified_loader,patch_to_emu_step1,1} | _]) -> 0; check_funs({'$M_EXPR','$F_EXPR',2}, [{lists,foldl,3}, @@ -829,7 +825,7 @@ check_funs({'$M_EXPR','$F_EXPR',1}, check_funs({'$M_EXPR',warning_msg,2}, [{code_server,finish_on_load_report,2} | _]) -> 0; %% This is cheating! /raimo -%% +%% %% check_funs(This = {M,_,_}, Path) -> %% case catch atom_to_list(M) of %% [$h,$i,$p,$e | _] -> @@ -861,9 +857,9 @@ load_cached(suite) -> load_cached(doc) -> []; load_cached(Config) when is_list(Config) -> - ?line Priv = ?config(priv_dir, Config), - ?line WD = filename:dirname(code:which(?MODULE)), - ?line {ok,Node} = + Priv = ?config(priv_dir, Config), + WD = filename:dirname(code:which(?MODULE)), + {ok,Node} = ?t:start_node(code_cache_node, peer, [{args, "-pa \"" ++ WD ++ "\""}, {erl, [this]}]), @@ -873,7 +869,7 @@ load_cached(Config) when is_list(Config) -> _ -> false end end, - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), case rpc:call(Node, lists, any, [CCTabCreated,Tabs]) of true -> ?t:stop_node(Node), @@ -881,25 +877,25 @@ load_cached(Config) when is_list(Config) -> false -> ok end, - ?line rpc:call(Node, code, del_path, [Priv]), - ?line rpc:call(Node, code, add_pathz, [Priv]), + rpc:call(Node, code, del_path, [Priv]), + rpc:call(Node, code, add_pathz, [Priv]), FullModName = Priv ++ "/code_cache_test", - ?line {ok,Dev} = file:open(FullModName ++ ".erl", [write]), - ?line io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []), - ?line ok = file:close(Dev), - ?line {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]), + {ok,Dev} = file:open(FullModName ++ ".erl", [write]), + io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []), + ok = file:close(Dev), + {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]), F = fun load_loop/2, N = 1000, - ?line {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), + {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), TNoCache = now_diff(T1, T0), - ?line rpc:call(Node, code, rehash, []), - ?line {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), - ?line TCache = now_diff(T3, T2), + rpc:call(Node, code, rehash, []), + {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), + TCache = now_diff(T3, T2), AvgNoCache = TNoCache/N, AvgCache = TCache/N, - ?line io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]), + io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]), ?t:stop_node(Node), if AvgNoCache =< AvgCache -> ?t:fail("Cache not working properly."); @@ -916,7 +912,7 @@ load_loop(N, M, T0) -> code:delete(M), code:purge(M), load_loop(N-1, M, T0). - + now_diff({A2, B2, C2}, {A1, B1, C1}) -> ((A2-A1)*1000000 + B2-B1)*1000000 + C2-C1. @@ -925,30 +921,30 @@ start_node_with_cache(suite) -> start_node_with_cache(doc) -> []; start_node_with_cache(Config) when is_list(Config) -> - ?line {ok,Node} = - ?t:start_node(code_cache_node, peer, [{args, + {ok,Node} = + ?t:start_node(code_cache_node, peer, [{args, "-code_path_cache"}, {erl, [this]}]), - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), io:format("Tabs: ~w~n", [Tabs]), CCTabCreated = fun(Tab) -> case rpc:call(Node, ets, info, [Tab,name]) of code_cache -> true; _ -> false end - end, - ?line true = lists:any(CCTabCreated, Tabs), + end, + true = lists:any(CCTabCreated, Tabs), ?t:stop_node(Node), ok. - + add_and_rehash(suite) -> []; add_and_rehash(doc) -> []; add_and_rehash(Config) when is_list(Config) -> - ?line Priv = ?config(priv_dir, Config), - ?line WD = filename:dirname(code:which(?MODULE)), - ?line {ok,Node} = + Priv = ?config(priv_dir, Config), + WD = filename:dirname(code:which(?MODULE)), + {ok,Node} = ?t:start_node(code_cache_node, peer, [{args, "-pa \"" ++ WD ++ "\""}, {erl, [this]}]), @@ -958,7 +954,7 @@ add_and_rehash(Config) when is_list(Config) -> _ -> false end end, - ?line Tabs0 = rpc:call(Node, ets, all, []), + Tabs0 = rpc:call(Node, ets, all, []), case rpc:call(Node, lists, any, [CCTabCreated,Tabs0]) of true -> ?t:stop_node(Node), @@ -966,36 +962,36 @@ add_and_rehash(Config) when is_list(Config) -> false -> ok end, - ?line ok = rpc:call(Node, code, rehash, []), % create cache - ?line Tabs1 = rpc:call(Node, ets, all, []), - ?line true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created - ?line ok = rpc:call(Node, code, rehash, []), + ok = rpc:call(Node, code, rehash, []), % create cache + Tabs1 = rpc:call(Node, ets, all, []), + true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created + ok = rpc:call(Node, code, rehash, []), OkDir = filename:join(Priv, ""), BadDir = filename:join(Priv, "guggemuffsussiputt"), - ?line CP = [OkDir | rpc:call(Node, code, get_path, [])], - ?line true = rpc:call(Node, code, set_path, [CP]), + CP = [OkDir | rpc:call(Node, code, get_path, [])], + true = rpc:call(Node, code, set_path, [CP]), CP1 = [BadDir | CP], - ?line {error,_} = rpc:call(Node, code, set_path, [CP1]), - ?line true = rpc:call(Node, code, del_path, [OkDir]), - ?line true = rpc:call(Node, code, add_path, [OkDir]), - ?line true = rpc:call(Node, code, add_path, [OkDir]), - ?line {error,_} = rpc:call(Node, code, add_path, [BadDir]), - ?line ok = rpc:call(Node, code, rehash, []), + {error,_} = rpc:call(Node, code, set_path, [CP1]), + true = rpc:call(Node, code, del_path, [OkDir]), + true = rpc:call(Node, code, add_path, [OkDir]), + true = rpc:call(Node, code, add_path, [OkDir]), + {error,_} = rpc:call(Node, code, add_path, [BadDir]), + ok = rpc:call(Node, code, rehash, []), ?t:stop_node(Node), ok. - + where_is_file_no_cache(suite) -> []; where_is_file_no_cache(doc) -> []; where_is_file_no_cache(Config) when is_list(Config) -> - ?line {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]), + {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]), io:format("Load time: ~w ms~n", [T]), - ?line KernelEbinDir = filename:dirname(KernelBeamFile), - ?line AppFile = filename:join(KernelEbinDir, "kernel.app"), - ?line AppFile = code:where_is_file("kernel.app"), - ?line non_existing = code:where_is_file("kernel"), % no such file + KernelEbinDir = filename:dirname(KernelBeamFile), + AppFile = filename:join(KernelEbinDir, "kernel.app"), + AppFile = code:where_is_file("kernel.app"), + non_existing = code:where_is_file("kernel"), % no such file ok. where_is_file_cached(suite) -> @@ -1003,97 +999,97 @@ where_is_file_cached(suite) -> where_is_file_cached(doc) -> []; where_is_file_cached(Config) when is_list(Config) -> - ?line {ok,Node} = - ?t:start_node(code_cache_node, peer, [{args, + {ok,Node} = + ?t:start_node(code_cache_node, peer, [{args, "-code_path_cache"}, {erl, [this]}]), - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), io:format("Tabs: ~w~n", [Tabs]), CCTabCreated = fun(Tab) -> case rpc:call(Node, ets, info, [Tab,name]) of code_cache -> true; _ -> false end - end, - ?line true = lists:any(CCTabCreated, Tabs), - ?line KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]), - ?line {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]), + end, + true = lists:any(CCTabCreated, Tabs), + KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]), + {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]), io:format("Load time: ~w ms~n", [T]), - ?line KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]), - ?line AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]), - ?line AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]), - ?line non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file + KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]), + AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]), + AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]), + non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file ?t:stop_node(Node), ok. - + purge_stacktrace(suite) -> []; purge_stacktrace(doc) -> ["Test that stacktrace is deleted when purging a referred module"]; purge_stacktrace(Config) when is_list(Config) -> - ?line code:purge(code_b_test), + code:purge(code_b_test), try code_b_test:call(fun(b) -> ok end, a) catch error:function_clause -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{?MODULE,_,[a],_}, {code_b_test,call,2,_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, try code_b_test:call(nofun, 2) catch error:function_clause -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{code_b_test,call,[nofun,2],_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, Args = [erlang,error,[badarg]], try code_b_test:call(erlang, error, [badarg,Args]) catch error:badarg -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{code_b_test,call,Args,_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, ok. mult_lib_roots(Config) when is_list(Config) -> - ?line DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"), - ?line mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"), - ?line mult_lib_compile(DataDir, + DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"), + mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"), + mult_lib_compile(DataDir, "my_dummy_app-c/ebin/code_SUITE_mult_root_module"), %% Set up ERL_LIBS and start a slave node. ErlLibs = filename:join(DataDir, "first_root") ++ mult_lib_sep() ++ filename:join(DataDir, "second_root"), - ?line {ok,Node} = + {ok,Node} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS "++ErlLibs}]), - ?line TSPath = filename:dirname(code:which(test_server)), - ?line Path0 = rpc:call(Node, code, get_path, []), - ?line [TSPath,"."|Path1] = Path0, - ?line [Kernel|Path2] = Path1, - ?line [Stdlib|Path3] = Path2, - ?line mult_lib_verify_lib(Kernel, "kernel"), - ?line mult_lib_verify_lib(Stdlib, "stdlib"), - ?line [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3, + TSPath = filename:dirname(code:which(test_server)), + Path0 = rpc:call(Node, code, get_path, []), + [TSPath,"."|Path1] = Path0, + [Kernel|Path2] = Path1, + [Stdlib|Path3] = Path2, + mult_lib_verify_lib(Kernel, "kernel"), + mult_lib_verify_lib(Stdlib, "stdlib"), + [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3, + - ["first_root/my_dummy_app-a/ebin", "first_root/my_dummy_app-b/ebin", "first_root/my_dummy_app-c/ebin", @@ -1103,7 +1099,7 @@ mult_lib_roots(Config) when is_list(Config) -> E <- lists:sort([Lib1,Lib2,Lib3,Lib4,Lib5])], io:format("~p\n", [Path]), - ?line true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []), + true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []), ok. @@ -1113,7 +1109,7 @@ mult_lib_compile(Root, Last) -> Dir = filename:dirname(Name), {ok,Mod} = compile:file(Name, [report,{outdir,Dir}]), ok. - + mult_lib_sep() -> case os:type() of {win32,_} -> ";"; @@ -1123,23 +1119,23 @@ mult_lib_sep() -> mult_lib_verify_lib(Path, Expected) -> Dir = filename:basename(filename:dirname(Path)), true = lists:prefix(Expected, Dir). - + mult_lib_remove_prefix([H|T1], [H|T2]) -> mult_lib_remove_prefix(T1, T2); mult_lib_remove_prefix([$/|T], []) -> T. bad_erl_libs(Config) when is_list(Config) -> - ?line {ok,Node} = + {ok,Node} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS "}]), - ?line ?t:stop_node(Node), + ?t:stop_node(Node), - ?line {ok,Node2} = + {ok,Node2} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS /no/such/dir"}]), - ?line ?t:stop_node(Node2), + ?t:stop_node(Node2), ok. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1158,55 +1154,55 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) -> PrivDir = ?config(priv_dir, Config), App = code_archive_dict, VsnBase = atom_to_list(App) ++ "-1.0", - Base = + Base = case StripVsn of true -> atom_to_list(App); false -> VsnBase end, Ext = init:archive_extension(), RootDir = filename:join([PrivDir, Root]), - ?line ok = file:make_dir(RootDir), + ok = file:make_dir(RootDir), Archive = filename:join([RootDir, VsnBase ++ Ext]), - ?line {ok, _} = zip:create(Archive, [VsnBase], + {ok, _} = zip:create(Archive, [VsnBase], [{compress, []}, {cwd, DataDir}]), - ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]), + {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]), case StripVsn of true -> - ?line ok = file:rename(filename:join([PrivDir, VsnBase]), + ok = file:rename(filename:join([PrivDir, VsnBase]), filename:join([PrivDir, Base])); false -> ok end, - + io:format("DEBUG: ~p\n", [?LINE]), %% Compile the code - ?line ok = compile_app(PrivDir, Base), - + ok = compile_app(PrivDir, Base), + %% Create the archive - ?line ok = file:delete(Archive), - ?line {ok, _} = zip:create(Archive, [Base], + ok = file:delete(Archive), + {ok, _} = zip:create(Archive, [Base], [{compress, []}, {cwd, PrivDir}]), %% Set up ERL_LIBS and start a slave node. - ?line {ok, Node} = + {ok, Node} = ?t:start_node(code_archive, slave, [{args,"-env ERL_LIBS " ++ RootDir}]), - ?line CodePath = rpc:call(Node, code, get_path, []), + CodePath = rpc:call(Node, code, get_path, []), AppEbin = filename:join([Archive, Base, "ebin"]), io:format("AppEbin: ~p\n", [AppEbin]), io:format("CodePath: ~p\n", [CodePath]), io:format("Archive: ~p\n", [erl_prim_loader:read_file_info(Archive)]), - ?line true = lists:member(AppEbin, CodePath), + true = lists:member(AppEbin, CodePath), %% Start the app - ?line ok = rpc:call(Node, application, start, [App]), - + ok = rpc:call(Node, application, start, [App]), + %% Access the app priv dir AppPrivDir = rpc:call(Node, code, priv_dir, [App]), - ?line AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]), + AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]), io:format("AppPrivFile: ~p\n", [AppPrivFile]), - ?line {ok, _Bin, _Path} = + {ok, _Bin, _Path} = rpc:call(Node, erl_prim_loader, get_file, [AppPrivFile]), %% Use the app @@ -1221,14 +1217,14 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) -> error = rpc:call(Node, App, find, [Tab, Key]), ok = rpc:call(Node, App, erase, [Tab]), - ?line ?t:stop_node(Node), + ?t:stop_node(Node), ok. compile_app(TopDir, AppName) -> AppDir = filename:join([TopDir, AppName]), SrcDir = filename:join([AppDir, "src"]), OutDir = filename:join([AppDir, "ebin"]), - ?line {ok, Files} = file:list_dir(SrcDir), + {ok, Files} = file:list_dir(SrcDir), compile_files(Files, SrcDir, OutDir). compile_files([File | Files], SrcDir, OutDir) -> @@ -1253,27 +1249,27 @@ big_boot_embedded(doc) -> ["Test that a boot file with (almost) all of OTP can be used to start an" " embeddedd system."]; big_boot_embedded(Config) when is_list(Config) -> - ?line {BootArg,AppsInBoot} = create_big_boot(Config), - ?line {ok, Node} = + {BootArg,AppsInBoot} = create_big_boot(Config), + {ok, Node} = ?t:start_node(big_boot_embedded, slave, [{args,"-boot "++BootArg++" -mode embedded"}]), - ?line RemoteNodeApps = - [ {X,Y} || {X,_,Y} <- + RemoteNodeApps = + [ {X,Y} || {X,_,Y} <- rpc:call(Node,application,loaded_applications,[]) ], - ?line true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps), + true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps), ok. on_load(Config) when is_list(Config) -> Master = on_load_test_case_process, - ?line Data = filename:join([?config(data_dir, Config),"on_load"]), - ?line ok = file:set_cwd(Data), - ?line up_to_date = make:all([{d,'MASTER',Master}]), + Data = filename:join([?config(data_dir, Config),"on_load"]), + ok = file:set_cwd(Data), + up_to_date = make:all([{d,'MASTER',Master}]), %% Register a name for this process. - ?line register(Master, self()), - - ?line {_,Ref} = spawn_monitor(fun() -> + register(Master, self()), + + {_,Ref} = spawn_monitor(fun() -> exit(on_load_a:data()) end), receive @@ -1285,8 +1281,8 @@ on_load(Config) when is_list(Config) -> receive {on_load_c,PidC} -> ok end, - - ?line Refs = on_load_massive_spawn(lists:seq(1, 50)), + + Refs = on_load_massive_spawn(lists:seq(1, 50)), receive after 7 -> ok end, PidC ! go, @@ -1304,13 +1300,13 @@ on_load(Config) when is_list(Config) -> receive {'DOWN',Ref,process,_,Res} -> - ?line [a,b,c] = Res + [a,b,c] = Res end, on_load_wait_for_all(Refs), receive Any -> - ?line ?t:fail({unexpected,Any}) + ?t:fail({unexpected,Any}) after 10 -> ok end. @@ -1377,13 +1373,13 @@ on_load_embedded(Config) when is_list(Config) -> end. on_load_embedded_1(Config) -> - ?line DataDir = ?config(data_dir, Config), + DataDir = ?config(data_dir, Config), %% Link the on_load_app application into the lib directory. - ?line LibRoot = code:lib_dir(), - ?line LinkName = filename:join(LibRoot, "on_load_app-1.0"), - ?line OnLoadApp = filename:join(DataDir, "on_load_app-1.0"), - ?line del_link(LinkName), + LibRoot = code:lib_dir(), + LinkName = filename:join(LibRoot, "on_load_app-1.0"), + OnLoadApp = filename:join(DataDir, "on_load_app-1.0"), + del_link(LinkName), io:format("LinkName :~p, OnLoadApp: ~p~n",[LinkName,OnLoadApp]), case file:make_symlink(OnLoadApp, LinkName) of {error,enotsup} -> @@ -1392,28 +1388,28 @@ on_load_embedded_1(Config) -> end, %% Compile the code. - ?line OnLoadAppEbin = filename:join(LinkName, "ebin"), - ?line {ok,_ } = compile:file(filename:join([OnLoadApp,"src", + OnLoadAppEbin = filename:join(LinkName, "ebin"), + {ok,_ } = compile:file(filename:join([OnLoadApp,"src", "on_load_embedded"]), [{outdir,OnLoadAppEbin}]), %% Create and compile a boot file. - ?line true = code:add_pathz(OnLoadAppEbin), + true = code:add_pathz(OnLoadAppEbin), Options = case is_source_dir() of true -> [local]; false -> [] end, - ?line BootScript = create_boot(Config, Options), - ?line true = code:del_path(OnLoadAppEbin), + BootScript = create_boot(Config, Options), + true = code:del_path(OnLoadAppEbin), %% Start the node and check that the on_load function was run. - ?line {ok,Node} = start_node(on_load_embedded, + {ok,Node} = start_node(on_load_embedded, "-mode embedded -boot " ++ BootScript), ok = rpc:call(Node, on_load_embedded, status, []), %% Clean up. - ?line stop_node(Node), - ?line ok = del_link(LinkName). + stop_node(Node), + ok = del_link(LinkName). del_link(LinkName) -> case file:delete(LinkName) of @@ -1421,100 +1417,91 @@ del_link(LinkName) -> file:del_dir(LinkName); Other -> Other - end. + end. create_boot(Config, Options) -> - ?line {ok, OldDir} = file:get_cwd(), - ?line {LatestDir,LatestName} = create_script(Config), - ?line ok = file:set_cwd(LatestDir), - ?line ok = systools:make_script(LatestName, Options), - ?line ok = file:set_cwd(OldDir), + {ok, OldDir} = file:get_cwd(), + {LatestDir,LatestName} = create_script(Config), + ok = file:set_cwd(LatestDir), + ok = systools:make_script(LatestName, Options), + ok = file:set_cwd(OldDir), filename:join(LatestDir, LatestName). create_script(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Name = PrivDir ++ "on_load_test", - ?line Apps = application_controller:which_applications(), - ?line {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps), - ?line {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps), - ?line {ok,Fd} = file:open(Name ++ ".rel", [write]), - ?line io:format(Fd, + PrivDir = ?config(priv_dir, Config), + Name = PrivDir ++ "on_load_test", + Apps = application_controller:which_applications(), + {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps), + {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps), + {ok,Fd} = file:open(Name ++ ".rel", [write]), + io:format(Fd, "{release, {\"Test release 3\", \"P2A\"}, \n" " {erts, \"9.42\"}, \n" " [{kernel, \"~s\"}, {stdlib, \"~s\"}," " {on_load_app, \"1.0\"}]}.\n", [KernelVer,StdlibVer]), - ?line file:close(Fd), + file:close(Fd), {filename:dirname(Name),filename:basename(Name)}. create_big_boot(Config) -> - ?line {ok, OldDir} = file:get_cwd(), - ?line {Options,Local} = case is_source_dir() of - true -> {[no_module_tests,local],true}; - _ -> {[no_module_tests],false} + {ok, OldDir} = file:get_cwd(), + {Options,Local} = case is_source_dir() of + true -> {[no_module_tests,local],true}; + _ -> {[no_module_tests],false} end, - ?line {LatestDir,LatestName,Apps} = create_big_script(Config,Local), - ?line ok = file:set_cwd(LatestDir), - ?line ok = systools:make_script(LatestName, Options), - ?line ok = file:set_cwd(OldDir), + {LatestDir,LatestName,Apps} = create_big_script(Config,Local), + ok = file:set_cwd(LatestDir), + ok = systools:make_script(LatestName, Options), + ok = file:set_cwd(OldDir), {filename:join(LatestDir, LatestName),Apps}. -% The following apps cannot be loaded +% The following apps cannot be loaded % hipe .app references (or can reference) files that have no % corresponding beam file (if hipe is not enabled) -filter_app("hipe",_) -> - false; +filter_app("hipe",_) -> false; % Dialyzer and typer depends on hipe -filter_app("dialyzer",_) -> - false; -filter_app("typer",_) -> - false; +filter_app("dialyzer",_) -> false; +filter_app("typer",_) -> false; % Orber requires explicit configuration -filter_app("orber",_) -> - false; +filter_app("orber",_) -> false; % cos* depends on orber -filter_app("cos"++_,_) -> - false; +filter_app("cos"++_,_) -> false; % ic has a mod instruction in the app file but no corresponding start function -filter_app("ic",_) -> - false; +filter_app("ic",_) -> false; % Netconf has some dependency that I really do not understand (maybe like orber) -filter_app("netconf",_) -> - false; +filter_app("netconf",_) -> false; % Safe has the same kind of error in the .app file as ic -filter_app("safe",_) -> - false; +filter_app("safe",_) -> false; % Comte cannot be started in the "usual" way -filter_app("comte",_) -> - false; +filter_app("comte",_) -> false; % OS_mon does not find it's port program when running cerl -filter_app("os_mon",true) -> - false; +filter_app("os_mon",true) -> false; +% erts is not a "real" app either =/ +filter_app("erts",_) -> false; % Other apps should be OK. -filter_app(_,_) -> - true. +filter_app(_,_) -> true. create_big_script(Config,Local) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Name = filename:join(PrivDir,"full_script_test"), - ?line InitialApplications=application:loaded_applications(), + PrivDir = ?config(priv_dir, Config), + Name = filename:join(PrivDir,"full_script_test"), + InitialApplications=application:loaded_applications(), %% Applications left loaded by the application suite, unload them! - ?line UnloadFix=[app0,app1,app2,group_leader,app_start_error], - ?line [application:unload(Leftover) || + UnloadFix=[app0,app1,app2,group_leader,app_start_error], + [application:unload(Leftover) || Leftover <- UnloadFix, lists:keymember(Leftover,1,InitialApplications) ], %% Now we should have only "real" applications... - ?line [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], - ?line Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], - ?line {ok,Fd} = file:open(Name ++ ".rel", [write]), - ?line io:format(Fd, + [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], + Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], + {ok,Fd} = file:open(Name ++ ".rel", [write]), + io:format(Fd, "{release, {\"Test release 3\", \"P2A\"}, \n" " {erts, \"9.42\"}, \n" " ~p}.\n", [Apps]), - ?line file:close(Fd), - ?line NewlyLoaded = + file:close(Fd), + NewlyLoaded = application:loaded_applications() -- InitialApplications, - ?line [ application:unload(N) || {N,_,_} <- NewlyLoaded], + [ application:unload(N) || {N,_,_} <- NewlyLoaded], {filename:dirname(Name),filename:basename(Name),Apps}. is_source_dir() -> @@ -1523,35 +1510,35 @@ is_source_dir() -> on_load_errors(Config) when is_list(Config) -> Master = on_load_error_test_case_process, - ?line register(Master, self()), + register(Master, self()), - ?line Data = filename:join([?config(data_dir, Config),"on_load_errors"]), - ?line ok = file:set_cwd(Data), - ?line up_to_date = make:all([{d,'MASTER',Master}]), + Data = filename:join([?config(data_dir, Config),"on_load_errors"]), + ok = file:set_cwd(Data), + up_to_date = make:all([{d,'MASTER',Master}]), - ?line do_on_load_error(an_atom), + do_on_load_error(an_atom), - ?line error_logger:add_report_handler(?MODULE, self()), + error_logger:add_report_handler(?MODULE, self()), - ?line do_on_load_error({something,terrible,is,wrong}), + do_on_load_error({something,terrible,is,wrong}), receive Any1 -> - ?line {_, "The on_load function"++_, + {_, "The on_load function"++_, [on_load_error, {something,terrible,is,wrong},_]} = Any1 end, - ?line do_on_load_error(fail), %Cause exception. + do_on_load_error(fail), %Cause exception. receive Any2 -> - ?line {_, "The on_load function"++_, + {_, "The on_load function"++_, [on_load_error,{failed,[_|_]},_]} = Any2 end, %% There should be no more messages. receive Unexpected -> - ?line ?t:fail({unexpected,Unexpected}) + ?t:fail({unexpected,Unexpected}) after 10 -> ok end, @@ -1559,14 +1546,14 @@ on_load_errors(Config) when is_list(Config) -> ok. do_on_load_error(ReturnValue) -> - ?line {_,Ref} = spawn_monitor(fun() -> + {_,Ref} = spawn_monitor(fun() -> exit(on_load_error:main()) end), receive {on_load_error,ErrorPid} -> ok end, - ?line ErrorPid ! ReturnValue, + ErrorPid ! ReturnValue, receive {'DOWN',Ref,process,_,Exit} -> - ?line {undef,[{on_load_error,main,[],_}|_]} = Exit + {undef,[{on_load_error,main,[],_}|_]} = Exit end. native_early_modules(suite) -> []; @@ -1580,10 +1567,10 @@ native_early_modules(Config) when is_list(Config) -> end. native_early_modules_1(Architecture) -> - ?line {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists), - ?line ChunkName = hipe_unified_loader:chunk_name(Architecture), - ?line NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]), - ?line IsHipeCompiled = case NativeChunk of + {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists), + ChunkName = hipe_unified_loader:chunk_name(Architecture), + NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]), + IsHipeCompiled = case NativeChunk of {ok,{_,[{_,Bin}]}} when is_binary(Bin) -> true; {error, beam_lib, _} -> false end, @@ -1591,10 +1578,10 @@ native_early_modules_1(Architecture) -> false -> {skip,"OTP apparently not configured with --enable-native-libs"}; true -> - ?line true = lists:all(fun code:is_module_native/1, - [ets,file,filename,gb_sets,gb_trees, - %%hipe_unified_loader, no_native as workaround - lists,os]), + true = lists:all(fun code:is_module_native/1, + [ets,file,filename,gb_sets,gb_trees, + %%hipe_unified_loader, no_native as workaround + lists,os]), ok end. diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl index 62ba95e1a3..46c8c0b88b 100644 --- a/lib/kernel/test/inet_SUITE.erl +++ b/lib/kernel/test/inet_SUITE.erl @@ -226,7 +226,7 @@ t_gethostbyname_v6(Config) when is_list(Config) -> h_addr_list = [IP4]} = HEnt4, {ok,IP46} = inet_parse:ipv6_address( - "::ffff:" ++ inet_parse:ntoa(IP4)), + "::ffff:" ++ inet:ntoa(IP4)), check_elems( [{HEnt#hostent.h_name,[Name,FullName]}]) end, @@ -246,7 +246,7 @@ t_gethostbyname_v6(Config) when is_list(Config) -> h_addr_list = [IP4F]} = HEnt4F, {ok,IP46F} = inet_parse:ipv6_address( - "::ffff:" ++ inet_parse:ntoa(IP4F)), + "::ffff:" ++ inet:ntoa(IP4F)), check_elems( [{HEntF#hostent.h_name,[Name,FullName]}]) end; diff --git a/lib/kernel/test/kernel_smoke.spec b/lib/kernel/test/kernel_smoke.spec new file mode 100644 index 0000000000..e5d8273c56 --- /dev/null +++ b/lib/kernel/test/kernel_smoke.spec @@ -0,0 +1,9 @@ +{config, "../test_server/ts.config"}. +{config, "../test_server/ts.unix.config"}. + +{cases,"../kernel_test", inet_SUITE,[t_gethostbyaddr,t_gethostbyname, + t_gethostbyaddr_v6,t_gethostbyname_v6,t_gethostnative,getifaddrs]}. +{cases,"../kernel_test", inet_res_SUITE,[gethostbyaddr,gethostbyname, + gethostbyaddr_v6,gethostbyname_v6,basic]}. +{cases,"../kernel_test", gen_tcp_echo_SUITE,[active_echo]}. +{cases,"../kernel_test", heart_SUITE,[reboot]}. diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl index fd87be1759..3b084e7371 100644 --- a/lib/mnesia/src/mnesia_bup.erl +++ b/lib/mnesia/src/mnesia_bup.erl @@ -1052,11 +1052,7 @@ local_uninstall_fallback(Master, FA) -> Tmp = FA2#fallback_args.fallback_tmp, Bup = FA2#fallback_args.fallback_bup, file:delete(Tmp), - Res = - case fallback_exists(Bup) of - true -> file:delete(Bup); - false -> ok - end, + Res = file:delete(Bup), ?eval_debug_fun({?MODULE, uninstall_fallback2, post_delete}, []), Master ! {self(), Res}, unlink(Master), diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c index 5730e20774..8de81a30ae 100644 --- a/lib/odbc/c_src/odbcserver.c +++ b/lib/odbc/c_src/odbcserver.c @@ -277,11 +277,15 @@ int main(void) msg = receive_erlang_port_msg(); temp = strtok(msg, ";"); + if (temp == NULL) + DO_EXIT(EXIT_STDIN_BODY); length = strlen(temp); supervisor_port = safe_malloc(length + 1); strcpy(supervisor_port, temp); temp = strtok(NULL, ";"); + if (temp == NULL) + DO_EXIT(EXIT_STDIN_BODY); length = strlen(temp); odbc_port = safe_malloc(length + 1); strcpy(odbc_port, temp); @@ -1819,12 +1823,20 @@ static byte * receive_erlang_port_msg(void) len |= lengthstr[i]; } + if (len <= 0 || len > 1024) { + DO_EXIT(EXIT_STDIN_HEADER); + } + buffer = (byte *)safe_malloc(len); if (read_exact(buffer, len) <= 0) { DO_EXIT(EXIT_STDIN_BODY); } + if (buffer[len-1] != '\0') { + DO_EXIT(EXIT_STDIN_BODY); + } + return buffer; } diff --git a/lib/os_mon/c_src/ferrule.c b/lib/os_mon/c_src/ferrule.c index 744f302b2d..c55f594f34 100644 --- a/lib/os_mon/c_src/ferrule.c +++ b/lib/os_mon/c_src/ferrule.c @@ -50,7 +50,7 @@ #define FDS_STDIN 0 #define FDS_PIPE 1 -main(int argc, char *argv[]) +int main(int argc, char *argv[]) /* usage: ferrule ownpath */ { int i, pipe_fd; diff --git a/lib/os_mon/c_src/mod_syslog.c b/lib/os_mon/c_src/mod_syslog.c index 87fbfbac22..b1bbf80b2a 100644 --- a/lib/os_mon/c_src/mod_syslog.c +++ b/lib/os_mon/c_src/mod_syslog.c @@ -47,7 +47,7 @@ #define TRUE 1 #define WAIT 1 -main(int argc, char *argv[]) +int main(int argc, char *argv[]) /* usage: mod_syslog mode ownpath syslogconf */ { int syslogd_pid, n_lines_copied=0; @@ -128,6 +128,7 @@ main(int argc, char *argv[]) make_exit(PIPE_NOT_FOUND); else */ make_exit(OK); + return 0; } void make_exit(int exit_code) diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl index 8c8bbe843a..278da26a20 100644 --- a/lib/os_mon/src/disksup.erl +++ b/lib/os_mon/src/disksup.erl @@ -263,10 +263,10 @@ check_disk_space({unix, dragonfly}, Port, Threshold) -> Result = my_cmd("/bin/df -k -t ufs,hammer", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, freebsd}, Port, Threshold) -> - Result = my_cmd("/bin/df -k -t ufs", Port), + Result = my_cmd("/bin/df -k -l", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, openbsd}, Port, Threshold) -> - Result = my_cmd("/bin/df -k -t ffs", Port), + Result = my_cmd("/bin/df -k -l", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, netbsd}, Port, Threshold) -> Result = my_cmd("/bin/df -k -t ffs", Port), diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile index 461bebc102..cbb014324d 100644 --- a/lib/os_mon/test/Makefile +++ b/lib/os_mon/test/Makefile @@ -85,7 +85,8 @@ release_spec: release_tests_spec: make_emakefile $(INSTALL_DIR) "$(RELSYSDIR)" - $(INSTALL_DATA) os_mon.spec os_mon.cover $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)" + $(INSTALL_DATA) os_mon.spec os_mon.cover os_mon_smoke.spec \ + $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)" $(INSTALL_DATA) os_mon_mib_SUITE.cfg "$(RELSYSDIR)" ## tar chf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/lib/os_mon/test/disksup_SUITE.erl b/lib/os_mon/test/disksup_SUITE.erl index c1ff2c6afc..9c65d8b692 100644 --- a/lib/os_mon/test/disksup_SUITE.erl +++ b/lib/os_mon/test/disksup_SUITE.erl @@ -34,11 +34,11 @@ -define(default_timeout, ?t:minutes(1)). init_per_suite(Config) when is_list(Config) -> - ?line ok = application:start(os_mon), + ok = application:start(os_mon), Config. end_per_suite(Config) when is_list(Config) -> - ?line ok = application:stop(os_mon), + ok = application:stop(os_mon), Config. init_per_testcase(unavailable, Config) -> @@ -78,80 +78,71 @@ end_per_group(_GroupName, Config) -> Config. -api(suite) -> - []; -api(doc) -> - ["Test of API functions"]; +api(suite) -> []; +api(doc) -> ["Test of API functions"]; api(Config) when is_list(Config) -> %% get_disk_data() - ?line [{Id, KByte, Capacity}|_] = disksup:get_disk_data(), - ?line true = io_lib:printable_list(Id), - ?line true = is_integer(KByte), - ?line true = is_integer(Capacity), - ?line true = KByte>0, - ?line true = Capacity>0, + [{Id,KByte,Capacity}|_] = get_disk_data(), + true = io_lib:printable_list(Id), + true = is_integer(KByte), + true = is_integer(Capacity), + true = Capacity>0, + true = KByte>0, %% get_check_interval() - ?line 1800000 = disksup:get_check_interval(), + 1800000 = disksup:get_check_interval(), %% set_check_interval(Minutes) - ?line ok = disksup:set_check_interval(20), - ?line 1200000 = disksup:get_check_interval(), - ?line {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)), - ?line 1200000 = disksup:get_check_interval(), - ?line ok = disksup:set_check_interval(30), + ok = disksup:set_check_interval(20), + 1200000 = disksup:get_check_interval(), + {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)), + 1200000 = disksup:get_check_interval(), + ok = disksup:set_check_interval(30), %% get_almost_full_threshold() - ?line 80 = disksup:get_almost_full_threshold(), + 80 = disksup:get_almost_full_threshold(), %% set_almost_full_threshold(Float) - ?line ok = disksup:set_almost_full_threshold(0.90), - ?line 90 = disksup:get_almost_full_threshold(), - ?line {'EXIT',{badarg,_}} = + ok = disksup:set_almost_full_threshold(0.90), + 90 = disksup:get_almost_full_threshold(), + {'EXIT',{badarg,_}} = (catch disksup:set_almost_full_threshold(-0.5)), - ?line 90 = disksup:get_almost_full_threshold(), - ?line ok = disksup:set_almost_full_threshold(0.80), + 90 = disksup:get_almost_full_threshold(), + ok = disksup:set_almost_full_threshold(0.80), ok. -config(suite) -> - []; -config(doc) -> - ["Test configuration"]; +config(suite) -> []; +config(doc) -> ["Test configuration"]; config(Config) when is_list(Config) -> %% Change configuration parameters and make sure change is reflected %% when disksup is restarted - ?line ok = - application:set_env(os_mon, disk_space_check_interval, 29), - ?line ok = - application:set_env(os_mon, disk_almost_full_threshold, 0.81), + ok = application:set_env(os_mon, disk_space_check_interval, 29), + ok = application:set_env(os_mon, disk_almost_full_threshold, 0.81), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), - ?line {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup), + ok = supervisor:terminate_child(os_mon_sup, disksup), + {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup), - ?line 1740000 = disksup:get_check_interval(), - ?line 81 = disksup:get_almost_full_threshold(), + 1740000 = disksup:get_check_interval(), + 81 = disksup:get_almost_full_threshold(), %% Also try this with bad parameter values, should be ignored - ?line ok = + ok = application:set_env(os_mon, disk_space_check_interval, 0.5), - ?line ok = + ok = application:set_env(os_mon, disk_almost_full_threshold, -0.81), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), - ?line {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup), + ok = supervisor:terminate_child(os_mon_sup, disksup), + {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup), - ?line 1800000 = disksup:get_check_interval(), - ?line 80 = disksup:get_almost_full_threshold(), + 1800000 = disksup:get_check_interval(), + 80 = disksup:get_almost_full_threshold(), %% Reset configuration parameters - ?line ok = - application:set_env(os_mon, disk_space_check_interval, 30), - ?line ok = - application:set_env(os_mon, disk_almost_full_threshold, 0.80), - + ok = application:set_env(os_mon, disk_space_check_interval, 30), + ok = application:set_env(os_mon, disk_almost_full_threshold, 0.80), ok. %%---------------------------------------------------------------------- @@ -159,24 +150,22 @@ config(Config) when is_list(Config) -> %% changes too much during its course, or if there are timing problems %% with the alarm_handler receiving the alarms too late %%---------------------------------------------------------------------- -alarm(suite) -> - []; -alarm(doc) -> - ["Test that alarms are set and cleared"]; +alarm(suite) -> []; +alarm(doc) -> ["Test that alarms are set and cleared"]; alarm(Config) when is_list(Config) -> %% Find out how many disks exceed the threshold %% and make sure the corresponding number of alarms is set - ?line Threshold1 = disksup:get_almost_full_threshold(), % 80 - ?line Data1 = disksup:get_disk_data(), - ?line Over1 = over_threshold(Data1, Threshold1), - ?line Alarms1 = get_alarms(), + Threshold1 = disksup:get_almost_full_threshold(), % 80 + Data1 = disksup:get_disk_data(), + Over1 = over_threshold(Data1, Threshold1), + Alarms1 = get_alarms(), if Over1==length(Alarms1) -> - ?line true; + true; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold1, Data1, Alarms1}) + ?t:fail({bad_alarms, Threshold1, Data1, Alarms1}) end, %% Try to find a disk with space usage below Threshold1, @@ -187,24 +176,24 @@ alarm(Config) when is_list(Config) -> true -> false end end, - ?line case until(Fun1, Data1) of + case until(Fun1, Data1) of {_, _, Cap1} -> Threshold2 = Cap1-1, - ?line ok = + ok = disksup:set_almost_full_threshold(Threshold2/100), - ?line disksup ! timeout, % force a disk check - ?line Data2 = disksup:get_disk_data(), - ?line Over2 = over_threshold(Data2, Threshold2), - ?line Alarms2 = get_alarms(), + disksup ! timeout, % force a disk check + Data2 = disksup:get_disk_data(), + Over2 = over_threshold(Data2, Threshold2), + Alarms2 = get_alarms(), if Over2==length(Alarms2), Over2>Over1 -> - ?line true; + true; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold2, Data2, Alarms2}) + ?t:fail({bad_alarms, Threshold2, Data2, Alarms2}) end; false -> - ?line ignore + ignore end, %% Find out the highest space usage among all disks @@ -216,40 +205,35 @@ alarm(Config) when is_list(Config) -> true -> MaxAcc end end, - ?line case lists:foldl(Fun2, 0, Data1) of + case lists:foldl(Fun2, 0, Data1) of Max when Max<100 -> Threshold3 = Max+1, - ?line ok = - disksup:set_almost_full_threshold(Threshold3/100), - ?line disksup ! timeout, % force a disk check - ?line Data3 = disksup:get_disk_data(), - ?line Over3 = over_threshold(Data3, Threshold3), - ?line Alarms3 = get_alarms(), + ok = disksup:set_almost_full_threshold(Threshold3/100), + disksup ! timeout, % force a disk check + Data3 = disksup:get_disk_data(), + Over3 = over_threshold(Data3, Threshold3), + Alarms3 = get_alarms(), if Over3==0, length(Alarms3)==0 -> - ?line ok; + ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold3, Data3, Alarms3}) + ?t:fail({bad_alarms, Threshold3, Data3, Alarms3}) end; 100 -> - ?line ignore + ignore end, %% Reset threshold - ?line ok = disksup:set_almost_full_threshold(Threshold1/100), - + ok = disksup:set_almost_full_threshold(Threshold1/100), ok. over_threshold(Data, Threshold) -> Data2 = remove_duplicated_disks(lists:keysort(1, Data)), - lists:foldl(fun({_Id, _Kbyte, Cap}, N) when Cap>=Threshold -> - N+1; - (_DiskData, N) -> - N - end, - 0, - Data2). + lists:foldl(fun + ({_Id, _Kbyte, Cap}, N) when Cap>=Threshold -> N+1; + (_DiskData, N) -> N + end, 0, Data2). %% On some platforms (for example MontaVista) data for one disk can be %% "duplicated": @@ -278,33 +262,30 @@ remove_duplicated_disks([]) -> []. get_alarms() -> - lists:filter(fun({{disk_almost_full, _Disk},_}) -> true; - (_) -> false - end, - alarm_handler:get_alarms()). + lists:filter(fun + ({{disk_almost_full, _Disk},_}) -> true; + (_) -> false + end, alarm_handler:get_alarms()). until(Fun, [H|T]) -> case Fun(H) of true -> H; - false -> - until(Fun, T) + false -> until(Fun, T) end; -until(_Fun, []) -> - false. +until(_Fun, []) -> false. -port(suite) -> - []; +port(suite) -> []; port(doc) -> ["Test that disksup handles a terminating port program"]; port(Config) when is_list(Config) -> - ?line Str = os:cmd("ps -ef | grep '[d]isksup'"), + Str = os:cmd("ps -ef | grep '[d]isksup'"), case io_lib:fread("~s ~s", Str) of - {ok, [_Uid,Pid], _Rest} -> + {ok, [_Uid,Pid], _Rest} -> %% Monitor disksup - ?line MonRef = erlang:monitor(process, disksup), - ?line [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(), - ?line true = Kbyte1>0, + MonRef = erlang:monitor(process, disksup), + [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(), + true = Kbyte1>0, %% Kill the port program case os:cmd("kill -9 " ++ Pid) of @@ -315,17 +296,16 @@ port(Config) when is_list(Config) -> {'DOWN', MonRef, _, _, {port_died, _Reason}} -> ok; {'DOWN', MonRef, _, _, Reason} -> - ?line ?t:fail({unexpected_exit_reason, Reason}) + ?t:fail({unexpected_exit_reason, Reason}) after 3000 -> - ?line ?t:fail({still_alive, Str}) + ?t:fail({still_alive, Str}) end, %% Give os_mon_sup time to restart disksup ?t:sleep(?t:seconds(3)), - ?line [{_Disk2,Kbyte2,_Cap2}|_] = - disksup:get_disk_data(), - ?line true = Kbyte2>0, + [{_Disk2,Kbyte2,_Cap2}|_] = disksup:get_disk_data(), + true = Kbyte2>0, ok; @@ -337,68 +317,61 @@ port(Config) when is_list(Config) -> {skip, {os_pid_not_found, Str}} end. -terminate(suite) -> - []; +terminate(suite) -> []; terminate(Config) when is_list(Config) -> - ?line ok = application:set_env(os_mon, start_disksup, false), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), + ok = application:set_env(os_mon, start_disksup, false), + ok = supervisor:terminate_child(os_mon_sup, disksup), ok. -unavailable(suite) -> - []; +unavailable(suite) -> []; unavailable(doc) -> ["Test correct behaviour when service is unavailable"]; unavailable(Config) when is_list(Config) -> %% Make sure all API functions return their dummy values - ?line [{"none",0,0}] = disksup:get_disk_data(), - ?line 1800000 = disksup:get_check_interval(), - ?line ok = disksup:set_check_interval(5), - ?line 80 = disksup:get_almost_full_threshold(), - ?line ok = disksup:set_almost_full_threshold(0.9), - + [{"none",0,0}] = disksup:get_disk_data(), + 1800000 = disksup:get_check_interval(), + ok = disksup:set_check_interval(5), + 80 = disksup:get_almost_full_threshold(), + ok = disksup:set_almost_full_threshold(0.9), ok. restart(suite) -> []; restart(Config) when is_list(Config) -> - ?line ok = application:set_env(os_mon, start_disksup, true), - ?line {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup), + ok = application:set_env(os_mon, start_disksup, true), + {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup), ok. -otp_5910(suite) -> - []; +otp_5910(suite) -> []; otp_5910(doc) -> ["Test that alarms are cleared if disksup crashes or " "if OS_Mon is stopped"]; otp_5910(Config) when is_list(Config) -> %% Make sure disksup sets at least one alarm - ?line Data = disksup:get_disk_data(), - ?line Threshold0 = disksup:get_almost_full_threshold(), - ?line Threshold = case over_threshold(Data, Threshold0) of - 0 -> - [{_Id,_Kbyte,Cap}|_] = Data, - ?line ok = disksup:set_almost_full_threshold((Cap-1)/100), - Cap-1; - _N -> - Threshold0 - end, - ?line ok = application:set_env(os_mon, - disk_almost_full_threshold, - Threshold/100), - ?line disksup ! timeout, % force a disk check - ?line Data2 = disksup:get_disk_data(), - ?line Over = over_threshold(Data2, Threshold), - ?line Alarms = get_alarms(), + Data = disksup:get_disk_data(), + Threshold0 = disksup:get_almost_full_threshold(), + Threshold = case over_threshold(Data, Threshold0) of + 0 -> + [{_Id,_Kbyte,Cap}|_] = Data, + ok = disksup:set_almost_full_threshold((Cap-1)/100), + Cap-1; + _N -> Threshold0 + end, + ok = application:set_env(os_mon, disk_almost_full_threshold, Threshold/100), + disksup ! timeout, % force a disk check + Data2 = disksup:get_disk_data(), + Over = over_threshold(Data2, Threshold), + Alarms = get_alarms(), if Over==0 -> - ?line ?t:fail({threshold_too_low, Data2, Threshold}); + ?t:fail({threshold_too_low, Data2, Threshold}); Over==length(Alarms) -> ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold, Data2, Alarms}) + ?t:fail({bad_alarms, Threshold, Data2, Alarms}) end, %% Kill disksup @@ -407,34 +380,42 @@ otp_5910(Config) when is_list(Config) -> %% Wait a little to make sure disksup has been restarted, %% then make sure the alarms are set once, but not twice ?t:sleep(?t:seconds(1)), - ?line Data3 = disksup:get_disk_data(), - ?line Alarms2 = get_alarms(), + Data3 = disksup:get_disk_data(), + Alarms2 = get_alarms(), if - length(Alarms2)==length(Alarms) -> - ok; + length(Alarms2)==length(Alarms) -> ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold, Data3, Alarms,Alarms2}) + ?t:fail({bad_alarms,Threshold,Data3,Alarms,Alarms2}) end, %% Stop OS_Mon and make sure all disksup alarms are cleared - ?line ok = application:stop(os_mon), + ok = application:stop(os_mon), ?t:sleep(?t:seconds(1)), - ?line Alarms3 = get_alarms(), - if - length(Alarms3)==0 -> - ok; - true -> - ?line ?t:fail({alarms_not_cleared, Alarms3}) + Alarms3 = get_alarms(), + case get_alarms() of + [] -> ok; + _ -> ?t:fail({alarms_not_cleared, Alarms3}) end, %% Reset threshold and restart OS_Mon - ?line ok = application:set_env(os_mon, - disksup_almost_full_threshold, 0.8), - ?line ok = disksup:set_almost_full_threshold(0.8), - ?line ok = application:start(os_mon), - + ok = application:set_env(os_mon, disksup_almost_full_threshold, 0.8), + ok = disksup:set_almost_full_threshold(0.8), + ok = application:start(os_mon), ok. dump_info() -> io:format("Status: ~p~n", [sys:get_status(disksup)]). + +% filter get_disk_data and remove entriew with zero capacity +% "non-normal" filesystems report zero capacity +% - Perhaps errorneous 'df -k -l'? +% - Always list filesystems by type '-t ufs,zfs,..' instead? +% It is unclear what the intention was from the beginning. +get_disk_data() -> + get_disk_data(disksup:get_disk_data()). + +get_disk_data([{"none",0,0}=E]) -> [E]; +get_disk_data([{_,_,0}|Es]) -> get_disk_data(Es); +get_disk_data([E|Es]) -> [E|get_disk_data(Es)]; +get_disk_data([]) -> []. diff --git a/lib/os_mon/test/os_mon_smoke.spec b/lib/os_mon/test/os_mon_smoke.spec new file mode 100644 index 0000000000..6f0d02494b --- /dev/null +++ b/lib/os_mon/test/os_mon_smoke.spec @@ -0,0 +1,3 @@ +{cases,"../os_mon_test",disksup_SUITE,[api]}. +{cases,"../os_mon_test",cpu_sup_SUITE,[load_api,util_api]}. +{cases,"../os_mon_test",memsup_SUITE,[api]}.
\ No newline at end of file diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml index d8c82b2459..36b3b51a99 100644 --- a/lib/runtime_tools/doc/src/dbg.xml +++ b/lib/runtime_tools/doc/src/dbg.xml @@ -244,7 +244,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </item> <tag><c>all</c></tag> <item> - <p>Sets all flags.</p> + <p>Sets all flags except <c>silent</c>.</p> </item> <tag><c>clear</c></tag> <item> diff --git a/lib/runtime_tools/src/Makefile b/lib/runtime_tools/src/Makefile index 2347986c53..8d2bcfe3d1 100644 --- a/lib/runtime_tools/src/Makefile +++ b/lib/runtime_tools/src/Makefile @@ -42,6 +42,7 @@ MODULES= \ dbg \ dyntrace \ percept_profile \ + system_information \ observer_backend \ ttb_autostart HRL_FILES= ../include/observer_backend.hrl diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl index 6b2fb0460f..f0086e8cc7 100644 --- a/lib/runtime_tools/src/dbg.erl +++ b/lib/runtime_tools/src/dbg.erl @@ -1113,7 +1113,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]); transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]); transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]); transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]); -transform_flags([all|_],_Acc) -> all(); +transform_flags([all|_],_Acc) -> all()--[silent]; transform_flags([F|Tail]=List,Acc) when is_atom(F) -> case lists:member(F, all()) of true -> transform_flags(Tail,[F|Acc]); @@ -1124,7 +1124,7 @@ transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}. all() -> [send,'receive',call,procs,garbage_collection,running, set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link, - timestamp,arity,return_to]. + timestamp,arity,return_to,silent]. display_info([Node|Nodes]) -> io:format("~nNode ~w:~n",[Node]), diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src index 602048dc21..d46cfe1f32 100644 --- a/lib/runtime_tools/src/runtime_tools.app.src +++ b/lib/runtime_tools/src/runtime_tools.app.src @@ -21,7 +21,7 @@ {vsn, "%VSN%"}, {modules, [appmon_info, dbg,observer_backend,percept_profile, runtime_tools,runtime_tools_sup,erts_alloc_config, - ttb_autostart,dyntrace]}, + ttb_autostart,dyntrace,system_information]}, {registered, [runtime_tools_sup]}, {applications, [kernel, stdlib]}, {env, []}, diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl new file mode 100644 index 0000000000..1d4b878d79 --- /dev/null +++ b/lib/runtime_tools/src/system_information.erl @@ -0,0 +1,554 @@ +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + + +%% The main purpose of system_information is to aggregate all information +%% deemed useful for investigation, i.e. system_information:report/0. + +%% The server and all other utilities surrounding this is for inspecting +%% reported values. Functions will be added to this as time goes by. + +-module(system_information). +-behaviour(gen_server). + +%% API +-export([ + report/0, + from_file/1, + to_file/1 + ]). +-export([ + start/0, stop/0, + load_report/0, load_report/2, + applications/0, applications/1, + application/1, application/2, + environment/0, environment/1, + module/1, module/2, + modules/1 + ]). + +%% gen_server callbacks +-export([ + init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + terminate/2, + code_change/3 + ]). + +-define(SERVER, ?MODULE). + +%% change version if parsing of file changes +-define(REPORT_FILE_VSN, "1.0"). + +-record(state, { + report + }). + +%%=================================================================== +%% API +%%=================================================================== + +start() -> + gen_server:start({local, ?SERVER}, ?MODULE, [], []). + +stop() -> + gen_server:call(?SERVER, stop). + +load_report() -> load_report(data, report()). + +load_report(file, File) -> load_report(data, from_file(File)); +load_report(data, Report) -> + start(), gen_server:call(?SERVER, {load_report, Report}). + +report() -> [ + {init_arguments, init:get_arguments()}, + {code_paths, code:get_path()}, + {code, code()}, + {system_info, erlang_system_info()}, + {erts_compile_info, erlang:system_info(compile_info)}, + {beam_dynamic_libraries, get_dynamic_libraries()}, + {environment_erts, os_getenv_erts_specific()}, + {environment, [split_env(Env) || Env <- os:getenv()]} + ]. + +to_file(File) -> + file:write_file(File, iolist_to_binary([ + io_lib:format("{system_information_version, ~p}.~n", [ + ?REPORT_FILE_VSN + ]), + io_lib:format("{system_information, ~p}.~n", [ + report() + ]) + ])). + +from_file(File) -> + case file:consult(File) of + {ok, Data} -> + case get_value([system_information_version], Data) of + ?REPORT_FILE_VSN -> + get_value([system_information], Data); + Vsn -> + erlang:error({unknown_version, Vsn}) + end; + _ -> + erlang:error(bad_report_file) + end. + +applications() -> applications([]). +applications(Opts) when is_list(Opts) -> + gen_server:call(?SERVER, {applications, Opts}). + +application(App) when is_atom(App) -> application(App, []). +application(App, Opts) when is_atom(App), is_list(Opts) -> + gen_server:call(?SERVER, {application, App, Opts}). + +environment() -> environment([]). +environment(Opts) when is_list(Opts) -> + gen_server:call(?SERVER, {environment, Opts}). + +module(M) when is_atom(M) -> module(M, []). +module(M, Opts) when is_atom(M), is_list(Opts) -> + gen_server:call(?SERVER, {module, M, Opts}). + +modules(Opt) when is_atom(Opt) -> + gen_server:call(?SERVER, {modules, Opt}). + +%%=================================================================== +%% gen_server callbacks +%%=================================================================== + +init([]) -> + {ok, #state{}}. + +handle_call(stop, _From, S) -> + {stop, normal, ok, S}; + +handle_call({load_report, Report}, _From, S) -> + Version = get_value([system_info, system_version], Report), + io:format("Loaded report from system version: ~s~n", [Version]), + {reply, ok, S#state{ report = Report }}; + +handle_call(_Req, _From, #state{ report = undefined } = S) -> + {reply, {error, report_not_loaded}, S}; + +handle_call({applications, Opts}, _From, #state{ report = Report } = S) -> + ok = print_applications(get_value([code], Report), Opts), + {reply, ok, S}; + +handle_call({application, App, Opts}, _From, #state{ report = Report } = S) -> + Data = get_value([App], [AppInfo||{application, AppInfo}<-get_value([code], Report)]), + ok = print_application({App, Data}, Opts), + {reply, ok, S}; + + +handle_call({environment, Opts}, _From, #state{ report = Report } = S) -> + Choices = case proplists:get_bool(full, Opts) of + true -> [environment]; + false -> [environment_erts] + end, + ok = print_environments(get_value(Choices, Report), Opts), + {reply, ok, S}; + + +handle_call({module, M, Opts}, _From, #state{ report = Report } = S) -> + Mods = find_modules_from_code(M, get_value([code], Report)), + print_modules_from_code(M, Mods, Opts), + {reply, ok, S}; + +handle_call({modules, native}, _From, #state{ report = Report } = S) -> + Codes = get_native_modules_from_code(get_value([code],Report)), + io:format("~p~n", [Codes]), + {reply, ok, S}; + + +handle_call(_Request, _From, State) -> + {reply, ok, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%=================================================================== +%% Internal functions +%%=================================================================== + +%% handle report values + +get_value([], Data) -> Data; +get_value([K|Ks], Data) -> + get_value(Ks, proplists:get_value(K, Data, [])). + +find_modules_from_code(M, [{code, Info}|Codes]) -> + case find_modules(M, get_value([modules], Info)) of + [] -> find_modules_from_code(M, Codes); + Mods -> + Path = get_value([path], Info), + [{Path, Mods}|find_modules_from_code(M, Codes)] + end; +find_modules_from_code(M, [{application, {App, Info}}|Codes]) -> + case find_modules(M, get_value([modules], Info)) of + [] -> find_modules_from_code(M, Codes); + Mods -> + Path = get_value([path], Info), + Vsn = get_value([vsn], Info), + [{App, Vsn, Path, Mods}|find_modules_from_code(M, Codes)] + end; +find_modules_from_code(_, []) -> []. + +find_modules(M, [{M, _}=Info|Ms]) -> [Info|find_modules(M,Ms)]; +find_modules(M, [_|Ms]) -> find_modules(M, Ms); +find_modules(_, []) -> []. + +get_native_modules_from_code([{application, {App, Info}}|Cs]) -> + case get_native_modules(get_value([modules], Info)) of + [] -> get_native_modules_from_code(Cs); + Mods -> + Path = get_value([path], Info), + Vsn = get_value([vsn], Info), + [{App, Vsn, Path, Mods}|get_native_modules_from_code(Cs)] + end; +get_native_modules_from_code([{code, Info}|Cs]) -> + case get_native_modules(get_value([modules], Info)) of + [] -> get_native_modules_from_code(Cs); + Mods -> + Path = get_value([path], Info), + [{Path, Mods}|get_native_modules_from_code(Cs)] + end; +get_native_modules_from_code([]) -> []. + +get_native_modules([]) -> []; +get_native_modules([{Mod, Info}|Ms]) -> + case proplists:get_value(native, Info) of + false -> get_native_modules(Ms); + _ -> [Mod|get_native_modules(Ms)] + end. + + +%% print information + +print_applications([{application, App}|Apps], Opts) -> + print_application(App, Opts), + print_applications(Apps, Opts); +print_applications([{code,_}|Apps], Opts) -> + print_applications(Apps, Opts); +print_applications([], _) -> + ok. + +print_application({App, Info}, Opts) -> + Vsn = get_value([vsn], Info), + io:format(" * ~w-~s~n", [App, Vsn]), + case proplists:get_bool(full, Opts) of + true -> + _ = [ begin + print_module(Minfo) + end || Minfo <- get_value([modules], Info) ], + ok; + false -> + ok + end. + +print_environments([Env|Envs],Opts) -> + print_environment(Env,Opts), + print_environments(Envs,Opts); +print_environments([],_) -> + ok. + +print_environment({_Key, false},_) -> ok; +print_environment({Key, Value},_) -> + io:format(" - ~s = ~s~n", [Key, Value]). + +print_modules_from_code(M, [Info|Ms], Opts) -> + print_module_from_code(M, Info), + case proplists:get_bool(full, Opts) of + true -> print_modules_from_code(M, Ms, Opts); + false -> ok + end; +print_modules_from_code(_, [], _) -> + ok. + +print_module_from_code(M, {Path, [{M,ModInfo}]}) -> + io:format(" from path \"~s\" (no application):~n", [Path]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok; +print_module_from_code(M, {App,Vsn,Path,[{M,ModInfo}]}) -> + io:format(" from path \"~s\" (~w-~s):~n", [Path,App,Vsn]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok. + +print_module({Mod, ModInfo}) -> + io:format(" - ~w:~n", [Mod]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok. + + + +%% get useful information from erlang:system_info/1 + +erlang_system_info() -> + erlang_system_info([ + allocator, + check_io, + otp_release, + port_limit, + process_limit, + % procs, % not needed + smp_support, + system_version, + system_architecture, + threads, + thread_pool_size, + {wordsize,internal}, + {wordsize,external}, + {cpu_topology, defined}, + {cpu_topology, detected}, + scheduler_bind_type, + scheduler_bindings, + compat_rel, + schedulers_state, + build_type, + logical_processors, + logical_processors_online, + logical_processors_available, + driver_version, + emu_args, + ethread_info, + beam_jump_table, + taints + ]). + +erlang_system_info([]) -> []; +erlang_system_info([Type|Types]) -> + [{Type, erlang:system_info(Type)}|erlang_system_info(Types)]. + + +%% get known useful erts environment + +os_getenv_erts_specific() -> + os_getenv_erts_specific([ + "BINDIR", + "DIALYZER_EMULATOR", + "CERL_DETACHED_PROG", + "EMU", + "ERL_CONSOLE_MODE", + "ERL_CRASH_DUMP", + "ERL_CRASH_DUMP_NICE", + "ERL_CRASH_DUMP_SECONDS", + "ERL_EPMD_PORT", + "ERL_EMULATOR_DLL", + "ERL_FULLSWEEP_AFTER", + "ERL_LIBS", + "ERL_MALLOC_LIB", + "ERL_MAX_PORTS", + "ERL_MAX_ETS_TABLES", + "ERL_NO_VFORK", + "ERL_NO_KERNEL_POLL", + "ERL_THREAD_POOL_SIZE", + "ERLC_EMULATOR", + "ESCRIPT_EMULATOR", + "HOME", + "HOMEDRIVE", + "HOMEPATH", + "LANG", + "LC_ALL", + "LC_CTYPE", + "PATH", + "PROGNAME", + "RELDIR", + "ROOTDIR", + "TERM", + %"VALGRIND_LOG_XML", + + %% heart + "COMSPEC", + "HEART_COMMAND", + + %% run_erl + "RUN_ERL_LOG_ALIVE_MINUTES", + "RUN_ERL_LOG_ACTIVITY_MINUTES", + "RUN_ERL_LOG_ALIVE_FORMAT", + "RUN_ERL_LOG_ALIVE_IN_UTC", + "RUN_ERL_LOG_GENERATIONS", + "RUN_ERL_LOG_MAXSIZE", + "RUN_ERL_DISABLE_FLOWCNTRL", + + %% driver getenv + "CALLER_DRV_USE_OUTPUTV", + "ERL_INET_GETHOST_DEBUG", + "ERL_EFILE_THREAD_SHORT_CIRCUIT", + "ERL_WINDOW_TITLE", + "ERL_ABORT_ON_FAILURE", + "TTYSL_DEBUG_LOG" + ]). + +os_getenv_erts_specific([]) -> []; +os_getenv_erts_specific([Key|Keys]) -> + [{Key, os:getenv(Key)}|os_getenv_erts_specific(Keys)]. + +split_env(Env) -> + split_env(Env, []). + +split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs}; +split_env([I|Vs], Key) -> split_env(Vs, [I|Key]); +split_env([], KV) -> lists:reverse(KV). % should not happen. + +%% get applications + +code() -> + % order is important + get_code_from_paths(code:get_path()). + +get_code_from_paths([]) -> []; +get_code_from_paths([Path|Paths]) -> + case is_application_path(Path) of + true -> + [{application, get_application_from_path(Path)}|get_code_from_paths(Paths)]; + false -> + [{code, [ + {path, Path}, + {modules, get_modules_from_path(Path)} + ]}|get_code_from_paths(Paths)] + end. + +is_application_path(Path) -> + case filelib:wildcard(filename:join(Path, "*.app")) of + [] -> false; + _ -> true + end. + +get_application_from_path(Path) -> + [Appfile|_] = filelib:wildcard(filename:join(Path, "*.app")), + case file:consult(Appfile) of + {ok, [{application, App, Info}]} -> + {App, [ + {description, proplists:get_value(description, Info, [])}, + {vsn, proplists:get_value(vsn, Info, [])}, + {path, Path}, + {modules, get_modules_from_path(Path)} + ]} + end. + +get_modules_from_path(Path) -> + [ + begin + {ok,{Mod, Md5}} = beam_lib:md5(Beam), + Loaded = case code:is_loaded(Mod) of + false -> false; + _ -> true + end, + {Mod, [ + {loaded, Loaded}, + {native, beam_is_native_compiled(Beam)}, + {compiler, get_compiler_version(Beam)}, + {md5, hexstring(Md5)} + ]} + end || Beam <- filelib:wildcard(filename:join(Path, "*.beam")) + ]. + +hexstring(Bin) when is_binary(Bin) -> + lists:flatten([io_lib:format("~2.16.0b", [V]) || <<V>> <= Bin]). + +%% inspect beam files for information + +get_compiler_version(Beam) -> + case beam_lib:chunks(Beam, [compile_info]) of + {ok,{_,[{compile_info, Info}]}} -> + proplists:get_value(version, Info); + _ -> undefined + end. + +%% we don't know the specific chunk names of native code +%% we don't want to load the code to check it +beam_is_native_compiled(Beam) -> + Chunks = get_value([chunks], beam_lib:info(Beam)), + case check_known_hipe_chunks(Chunks) of + [] -> false; + [Arch] -> {true, Arch}; + Archs -> {true, Archs} + end. + + +check_known_hipe_chunks([{Tag,_,_}|Cs]) -> + case is_chunk_tag_hipe_arch(Tag) of + false -> check_known_hipe_chunks(Cs); + {true, Arch} -> [Arch|check_known_hipe_chunks(Cs)] + end; +check_known_hipe_chunks([]) -> []. + +%% these values are taken from hipe_unified_loader +%% perhaps these should be exported in that module? + +-define(HS8P_TAG,"HS8P"). +-define(HPPC_TAG,"HPPC"). +-define(HP64_TAG,"HP64"). +-define(HARM_TAG,"HARM"). +-define(HX86_TAG,"HX86"). +-define(HA64_TAG,"HA64"). + +is_chunk_tag_hipe_arch(Tag) -> + case Tag of + ?HA64_TAG -> {true, amd64}; %% HiPE, x86_64, (implicit: 64-bit, Unix) + ?HARM_TAG -> {true, arm}; %% HiPE, arm, v5 (implicit: 32-bit, Linux) + ?HPPC_TAG -> {true, powerpc}; %% HiPE, PowerPC (implicit: 32-bit, Linux) + ?HP64_TAG -> {true, ppc64}; %% HiPE, ppc64 (implicit: 64-bit, Linux) + ?HS8P_TAG -> {true, ultrasparc}; %% HiPE, SPARC, V8+ (implicit: 32-bit) + %% Future: HSV9 %% HiPE, SPARC, V9 (implicit: 64-bit) + %% HW32 %% HiPE, x86, Win32 + _ -> false + end. + + +get_dynamic_libraries() -> + Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]), + case os:type() of + {unix, darwin} -> os:cmd("otool -L " ++ Beam); + _ -> os:cmd("ldd " ++ Beam) + end. + +get_beam_name() -> + Type = case erlang:system_info(build_type) of + opt -> ""; + TypeName -> "." ++ atom_to_list(TypeName) + end, + Flavor = case erlang:system_info(smp_support) of + false -> ""; + true -> ".smp" + end, + Beam = case os:getenv("EMU") of + false -> "beam"; + Value -> Value + end, + Beam ++ Type ++ Flavor. diff --git a/lib/runtime_tools/test/Makefile b/lib/runtime_tools/test/Makefile index bcabdf13ed..dcb9082231 100644 --- a/lib/runtime_tools/test/Makefile +++ b/lib/runtime_tools/test/Makefile @@ -5,6 +5,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk MODULES = \ dyntrace_SUITE \ runtime_tools_SUITE \ + system_information_SUITE \ dbg_SUITE \ erts_alloc_config_SUITE diff --git a/lib/runtime_tools/test/system_information_SUITE.erl b/lib/runtime_tools/test/system_information_SUITE.erl new file mode 100644 index 0000000000..fb9455a30f --- /dev/null +++ b/lib/runtime_tools/test/system_information_SUITE.erl @@ -0,0 +1,300 @@ +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% +%% + +-module(system_information_SUITE). + +-include_lib("common_test/include/ct.hrl"). + +%% Test server callbacks +-export([suite/0, all/0, groups/0, + init_per_suite/1, end_per_suite/1, + init_per_group/2, end_per_group/2, + init_per_testcase/2, end_per_testcase/2]). + +%% Test cases +-export([ + %% API-test + api_report/1, + api_to_file/1, + api_from_file/1, + %% server + api_start_stop/1, + validate_server_interface/1 + ]). + +%%-------------------------------------------------------------------- +%% COMMON TEST CALLBACK FUNCTIONS +%%-------------------------------------------------------------------- +%%-------------------------------------------------------------------- +%% Function: groups() -> [Group] +%% +%% Group = {GroupName,Properties,GroupsAndTestCases} +%% GroupName = atom() +%% The name of the group. +%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}] +%% Group properties that may be combined. +%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase] +%% TestCase = atom() +%% The name of a test case. +%% Shuffle = shuffle | {shuffle,Seed} +%% To get cases executed in random order. +%% Seed = {integer(),integer(),integer()} +%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | +%% repeat_until_any_ok | repeat_until_any_fail +%% To get execution of cases repeated. +%% N = integer() | forever +%% +%% Description: Returns a list of test case group definitions. +%%-------------------------------------------------------------------- +groups() -> + []. + +%%-------------------------------------------------------------------- +%% Function: all() -> GroupsAndTestCases | {skip,Reason} +%% +%% GroupsAndTestCases = [{group,GroupName} | TestCase] +%% GroupName = atom() +%% Name of a test case group. +%% TestCase = atom() +%% Name of a test case. +%% Reason = term() +%% The reason for skipping all groups and test cases. +%% +%% Description: Returns the list of groups and test cases that +%% are to be executed. +%%-------------------------------------------------------------------- +all() -> [ + api_report, + api_to_file, + api_from_file, + api_start_stop, + validate_server_interface + ]. + + +%%-------------------------------------------------------------------- +%% Function: suite() -> Info +%% +%% Info = [tuple()] +%% List of key/value pairs. +%% +%% Description: Returns list of tuples to set default properties +%% for the suite. +%% +%% Note: The suite/0 function is only meant to be used to return +%% default data values, not perform any other operations. +%%-------------------------------------------------------------------- +suite() -> [ + {timetrap,{minutes,1}}, + {ct_hooks,[ts_install_cth]} + ]. + +%%-------------------------------------------------------------------- +%% Function: init_per_suite(Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the suite. +%% +%% Description: Initialization before the suite. +%% +%% Note: This function is free to add any key/value pairs to the Config +%% variable, but should NOT alter/remove any existing entries. +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_suite(Config0) -> void() | {save_config,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% +%% Description: Cleanup after the suite. +%%-------------------------------------------------------------------- +end_per_suite(_Config) -> + ok. + +%%-------------------------------------------------------------------- +%% Function: init_per_group(GroupName, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% GroupName = atom() +%% Name of the test case group that is about to run. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding configuration data for the group. +%% Reason = term() +%% The reason for skipping all test cases and subgroups in the group. +%% +%% Description: Initialization before each test case group. +%%-------------------------------------------------------------------- +init_per_group(_GroupName, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_group(GroupName, Config0) -> +%% void() | {save_config,Config1} +%% +%% GroupName = atom() +%% Name of the test case group that is finished. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding configuration data for the group. +%% +%% Description: Cleanup after each test case group. +%%-------------------------------------------------------------------- +end_per_group(_GroupName, _Config) -> + ok. + +%%-------------------------------------------------------------------- +%% Function: init_per_testcase(TestCase, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% TestCase = atom() +%% Name of the test case that is about to run. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the test case. +%% +%% Description: Initialization before each test case. +%% +%% Note: This function is free to add any key/value pairs to the Config +%% variable, but should NOT alter/remove any existing entries. +%%-------------------------------------------------------------------- +init_per_testcase(_TestCase, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_testcase(TestCase, Config0) -> +%% void() | {save_config,Config1} | {fail,Reason} +%% +%% TestCase = atom() +%% Name of the test case that is finished. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for failing the test case. +%% +%% Description: Cleanup after each test case. +%%-------------------------------------------------------------------- +end_per_testcase(_TestCase, _Config) -> + ok. + + +%%-------------------------------------------------------------------- +%% TEST CASES +%%-------------------------------------------------------------------- + +%%-------------------------------------------------------------------- +%% Function: TestCase(Config0) -> +%% ok | exit() | {skip,Reason} | {comment,Comment} | +%% {save_config,Config1} | {skip_and_save,Reason,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the test case. +%% Comment = term() +%% A comment about the test case that will be printed in the html log. +%% +%% Description: Test case function. (The name of it must be specified in +%% the all/0 list or in a test case group for the test case +%% to be executed). +%%-------------------------------------------------------------------- + + +api_report(_Config) -> + Report = system_information:report(), + ok = validate_report(Report), + ok. + +api_to_file(Config) -> + DataDir = ?config(data_dir, Config), + Filename = filename:join([DataDir, "system_information_report_1.dat"]), + ok = system_information:to_file(Filename), + {ok, _} = file:consult(Filename), + {save_config, [{report_name, Filename}]}. + +api_from_file(Config) -> + {api_to_file, Saved} = ?config(saved_config, Config), + DataDir = ?config(data_dir, Config), + Fname1 = filename:join([DataDir, "information_test_report.dat"]), + Report1 = system_information:from_file(Fname1), + ok = validate_report(Report1), + Fname2 = ?config(report_name, Saved), + Report2 = system_information:from_file(Fname2), + ok = validate_report(Report2), + ok. + +api_start_stop(_Config) -> + {ok, _} = system_information:start(), + ok = system_information:stop(), + ok. + +validate_server_interface(Config) -> + DataDir = ?config(data_dir, Config), + Fname1 = filename:join([DataDir, "information_test_report.dat"]), + %% load old report + ok = system_information:load_report(file, Fname1), + ok = validate_loaded_report(), + ok = system_information:stop(), + %% load local + ok = system_information:load_report(), + ok = validate_loaded_report(), + ok = system_information:stop(), + ok. + + +%% aux + +validate_loaded_report() -> + ok = system_information:applications(), + ok = system_information:applications([full]), + ok = system_information:environment(), + ok = system_information:environment([full]), + ok = system_information:application(kernel), + ok = system_information:application(kernel,[full]), + ok = system_information:module(gen_server), + ok = system_information:module(gen_server,[full]), + ok = system_information:modules(native), + ok. + + +validate_report([]) -> {error, no_entries}; +validate_report(Report) -> + ensure_report_keys([ + init_arguments, + code_paths, + code, + system_info, + erts_compile_info, + beam_dynamic_libraries, + environment_erts, + environment + ], Report). + +ensure_report_keys([], _) -> ok; +ensure_report_keys([K|Ks], Report) -> + case lists:keysearch(K, 1, Report) of + false -> {error, key_not_found, K}; + _ -> ensure_report_keys(Ks, Report) + end. + diff --git a/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat new file mode 100644 index 0000000000..0900eadd4a --- /dev/null +++ b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat @@ -0,0 +1,9873 @@ +{system_information_version, "1.0"}. +{system_information, [{init_arguments, + [{root, + ["/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"]}, + {progname,["erl"]}, + {home,["/home/otptest"]}]}, + {code_paths, + [".", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"]}, + {code, + [{code,[{path,"."},{modules,[]}]}, + {application, + {kernel, + [{description,"ERTS CXC 138 10"}, + {vsn,"2.16.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin"}, + {modules, + [{application, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"69c3102d717e7258701a536ddae1eb89"}]}, + {application_controller, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bbfd81a8486ac040562ce0fd40c32aa"}]}, + {application_master, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8eee82bfd661e8f0d862f3aad5b85ca"}]}, + {application_starter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d505f3189443053e586fdf270446ce2f"}]}, + {auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"800c93bf9ba03b6e4951de0d5db28328"}]}, + {code, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84f37378526c5e82c5d0d967c1ca8f82"}]}, + {code_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09ce0ef7103f3151553c6badc7e96fc1"}]}, + {disk_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5ab0573095f258c87f6166af8f8425c"}]}, + {disk_log_1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"287f2521436a30a0567d54e2596c1034"}]}, + {disk_log_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c7972e5f3dedce5c87cf8ef88c59bb2"}]}, + {disk_log_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6012237e70b570585bfb58f60537d9c"}]}, + {dist_ac, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4dfa17c94d63da8f6b9edb1532a3e537"}]}, + {dist_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8fa19e7b4bca4b5aac847d138c85c553"}]}, + {erl_boot_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86ecca01e41b2321c01b7181cb826766"}]}, + {erl_ddll, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90f1c7a6fd3cf6595d95b9f57abd87ce"}]}, + {erl_distribution, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16a49a506b48567bd32b2021dac425ff"}]}, + {erl_epmd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eee4870e061790054c43ff70bbccbe25"}]}, + {erl_reply, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e0a4f09b0877938b4d79b41122dad38"}]}, + {error_handler, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1af2b51d167b017b3e1fae0beb408181"}]}, + {error_logger, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"941136b080021af90dc32f23774b0def"}]}, + {erts_debug, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a7b675323db5946605344ffccca170"}]}, + {file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5eccb55276e7162ab5bec77b46562332"}]}, + {file_io_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"032292fd7d9e2bf08ff23de192710f97"}]}, + {file_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58bd1e532dee0fccff9e1fba1e429a5e"}]}, + {gen_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e5e5a8c7708c9a81f26d2a89e3987c"}]}, + {gen_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4cf58918602a7242ca4060bc1d6b5652"}]}, + {gen_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"361b9b25604b9053a8a4c98b8df47408"}]}, + {global, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e553137965978f64ffb9ef274c79e9c2"}]}, + {global_group, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ce6b230fef9340aeb41205a6ef4b4f3"}]}, + {global_search, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a82f2701d71d2a1576074dd69414e1b"}]}, + {group, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6b3164d5d61625f0651c13107459627c"}]}, + {heart, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b808d9003cf50d73ebf888da50d73e12"}]}, + {hipe_unified_loader, + [{loaded,true}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"879423975936fcf88729034f7d4a93b6"}]}, + {inet, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd325ceedcab3ca885eeaf4c982561e0"}]}, + {inet6_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8b6d95ec571f5e669047b5f40455d21"}]}, + {inet6_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93a9204ef927b17957c61a18f3ba47e2"}]}, + {inet6_tcp_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a94acd2c5dc0e625d2c2b4292e9a27a"}]}, + {inet6_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17a90b344977dd2c657309507c99b516"}]}, + {inet_config, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"741587fa47d6b66b96ef125b3d5ba61a"}]}, + {inet_db, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f65160805d30ff194618a5ae4038ae9f"}]}, + {inet_dns, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f0c31b6cecf31d641bf46840f85ebee"}]}, + {inet_gethost_native, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09867d1d19f3c30b73fb47a48d0d843a"}]}, + {inet_hosts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0f48322bd3a1bd0e75f248e39b41f69"}]}, + {inet_parse, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29aee7378a4d1f814e1fd311d0eaab3a"}]}, + {inet_res, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1018a662254323cfa45309afb3b3397"}]}, + {inet_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cbce09a1ffa13cb124d87eaecd25dfbf"}]}, + {inet_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0da6499cb44db53be6145a5dc3449d93"}]}, + {inet_tcp_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"797e28cd89efe3a1a9d83244afd0b880"}]}, + {inet_udp, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70908d7165a2b298a85d9a4c1f8f9fa2"}]}, + {kernel, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf5c248b778654e664e6d2368ec285df"}]}, + {kernel_config, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39fbe27956eeb0cca9d7871f7de40a2e"}]}, + {net, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb8595f084959a2b5e329ab32047dbc4"}]}, + {net_adm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"628c961d8dbbab4c5b2b180e527530be"}]}, + {net_kernel, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"049f43826000bfefbbc2376bd21c9919"}]}, + {os, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"464c6c09afb87824ecf12bfa6065b3dc"}]}, + {pg2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34858fa3619c1dc17d01536593359ed2"}]}, + {ram_file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28bf8253c5f8357ab68b4d505e170856"}]}, + {rpc, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"895e080302ac8a39197dfac0cc53adc6"}]}, + {seq_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"845af954b395a80e5cf3d0c2ea0a3b99"}]}, + {standard_error, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0ac4192fd9f73885581481638c1648a"}]}, + {user, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93ad1841fa2dee776bff76f8989f5021"}]}, + {user_drv, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"161f1a45735f77129c80bacd778e5632"}]}, + {user_sup, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"baab537a62725bcbe4510c9f0b2d99eb"}]}, + {wrap_log_reader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5dceb6e671d0c51d181f51ec4e031798"}]}]}]}}, + {application, + {stdlib, + [{description,"ERTS CXC 138 10"}, + {vsn,"1.19.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin"}, + {modules, + [{array, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7c98b180715bd79794eef21a2930fff"}]}, + {base64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e45b571f2414c6131fbf62b1da3560e5"}]}, + {beam_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e13b050aff529ecac6569f7101237ba"}]}, + {binary, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e77ffd0688b3f1ace1ac70936969da3"}]}, + {c, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"402465a98ccec8e9314139daacf6203e"}]}, + {calendar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c09413575ac7f80ea3d9217b1f7e1bc"}]}, + {dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5154c82c2ffefa19096cf87ffb394a6c"}]}, + {dets_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c810e731ba4101aba5f6b6c08481ea85"}]}, + {dets_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9b4a9ef0f616b7c5464cf6813384e220"}]}, + {dets_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a64e0220f855e6e97d53a9bc4f0a111b"}]}, + {dets_v8, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ebf2c94f62d180c3159b663ba2094189"}]}, + {dets_v9, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9098391234b6304ff3d106dc56d467b6"}]}, + {dict, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0bc1d74a65bd392960cd7e1b230f07bf"}]}, + {digraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac9049d6d7454a87c40c2f03f4223849"}]}, + {digraph_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17bbe67d3314e9024825512c1ccc7be8"}]}, + {edlin, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"518247b4963c998e742c0794091c9864"}]}, + {edlin_expand, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06c4ff7cf326df872bec9feed7f5984d"}]}, + {epp, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"493760bc942ddd16df2a8e55f8b59774"}]}, + {erl_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bba2a00b28557c9678356247c36b0474"}]}, + {erl_compile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"291c9ddceeb66c7a7c36ab3505799513"}]}, + {erl_eval, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9982f2bca01a352a45932a6db95a1336"}]}, + {erl_expand_records, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"047c93973c9fbf83724cdf688e258cff"}]}, + {erl_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3225aadc9ec4f84cc9451f30833cdefb"}]}, + {erl_lint, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98ffb79824edc0f2a8ad49ff447e121c"}]}, + {erl_parse, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9a3d97b028bafa2bba7037bc1987d87"}]}, + {erl_posix_msg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ecb0903ecde21b7cc58277424d8bac3d"}]}, + {erl_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b7945b193daf989e3f62c4a452f773e"}]}, + {erl_scan, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dd9fb779b35d1925a0ad68c092af1f0"}]}, + {erl_tar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6161b31a69bd3566a910d369baae00"}]}, + {error_logger_file_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"218156df9bdedd04e37eecc76863940c"}]}, + {error_logger_tty_h, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a2cac9386113d6879a4111be3e2d191b"}]}, + {escript, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b77d5172cf00acd06fd6e42f03dc9b06"}]}, + {ets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"13c77916ba3c85e6e076aa0664f5674f"}]}, + {eval_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7bf8829d056519787fd0f7900bd04b73"}]}, + {file_sorter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e31c9ca53e59010980dfc4e46e8aaf1"}]}, + {filelib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"641651ced98857991b064b22c85cf90f"}]}, + {filename, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a007021a1e9de6af67e99cc48be13c5"}]}, + {gb_sets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4891f6d98f4bb81bc64415434d08ff9d"}]}, + {gb_trees, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9a8ae86761c41dc0e9d32f57df63c3"}]}, + {gen, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5beaa9b295439aa39187eeef56b8527b"}]}, + {gen_event, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79bc1c9f72e633331d4518d982221af0"}]}, + {gen_fsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb95e4cf29f5cf640e486c789fe9f1f7"}]}, + {gen_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14f189569fb6420c633a5dab81f7b897"}]}, + {io, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75fd9a0dc5823e95b4543a09be83c6ce"}]}, + {io_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34c18dd02ec6458cae20ddc323542eed"}]}, + {io_lib_format, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1f8f2a4d12d79d82420335d0e84107a"}]}, + {io_lib_fread, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"27699e322a2de2004b057465f549fa3f"}]}, + {io_lib_pretty, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32d7bae40549bdd60298c0d17efe057b"}]}, + {lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"394b1b967c909d1830939846963ac4f0"}]}, + {lists, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f840b76db5f9e5d37dcc9dc39a436b90"}]}, + {log_mf_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f972dea76e360d99074b659327db69f"}]}, + {math, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe02e030a198ec343f3c4a62f60ebf8a"}]}, + {ms_transform, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dba72a603f0a9382274671842d6aaf55"}]}, + {orddict, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bedb6cdaf10530b2486b46f79853fbea"}]}, + {ordsets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5dfe0e73da077c2f86dbbe846e0dab7"}]}, + {otp_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff3edabfa0633b9553b6fed1e47e41fc"}]}, + {pg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3975b993694a2a465d331278b503f81"}]}, + {pool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d0398428064137474f5acbb4122a70d"}]}, + {proc_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5542f4add07ef7bb54a76b0cdfa542ba"}]}, + {proplists, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5723876c3ed585a5a4b10dc3aefaf170"}]}, + {qlc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75df6efc99d9a75bb4c989985125d3da"}]}, + {qlc_pt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e84b6da8fb84f811f2c58365e59dd47f"}]}, + {queue, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"221ed57d299c2281992706fd6e2c6584"}]}, + {random, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e703cb7ee27e2e23baf924c2f6b29f50"}]}, + {re, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6eef786ed4f4dfec57a568e488e3596d"}]}, + {sets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4fbf3b29bf971465a8dc4077fc3e7c8"}]}, + {shell, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4fdd7e1d18047b5f086b6fe8730c896"}]}, + {shell_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a94fd884c9594ff9056228503cd2731"}]}, + {slave, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5536e71d137302d699982fc65b9d025"}]}, + {sofs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"10f13cd4626d429897246538c02c2cb4"}]}, + {string, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7440fe2e1838223f877286bf7d8f2a4"}]}, + {supervisor, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29c98bf9e58cc955d4c29d881d98e84f"}]}, + {supervisor_bridge, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f58b58a1fefecc46a476490ef5231d7e"}]}, + {sys, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7afd9c746450e5189048ff3635b37926"}]}, + {timer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa3e2b017848accc808f92910abf87b8"}]}, + {unicode, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be45160097c37c9144169f4ba54e0128"}]}, + {win32reg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f59ec1a4af1e6381d8770fc2c5915e4"}]}, + {zip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc9aab95b5fc9ee7e534e890d8e5516c"}]}]}]}}, + {application, + {xmerl, + [{description,"XML parser"}, + {vsn,"1.3.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin"}, + {modules, + [{xmerl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1eabeb9846b832059537e2bdf6fed2d2"}]}, + {xmerl_b64Bin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62075ae2d95f3188143a41f582542bf9"}]}, + {xmerl_b64Bin_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd99982371c4db3baf4883c96e146c96"}]}, + {xmerl_eventp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"99aad15d2ad4be80d580fe7e3ba4178f"}]}, + {xmerl_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f79915eaadae7d92946f1182110e6f81"}]}, + {xmerl_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91fe55408e50bf92a9f8ef8b402a3e51"}]}, + {xmerl_otpsgml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2e027e7204405c168eaa598a6a4d476"}]}, + {xmerl_regexp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"408f3ffbd843e09ed0326f5e6a72356e"}]}, + {xmerl_sax_old_dom, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66b229f3eec3dce1f8754de256ba8d1d"}]}, + {xmerl_sax_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66e80c0d03a583d22abc40a54096777c"}]}, + {xmerl_sax_parser_latin1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a462359d6765811f41b1ac1260c81a"}]}, + {xmerl_sax_parser_list, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db56224dbccdf302e42479027c3f961b"}]}, + {xmerl_sax_parser_utf16be, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aaa379b8f1008944bd486f29a85ab1c2"}]}, + {xmerl_sax_parser_utf16le, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"027d5c2218de2a7dd6f5db3b1c433a74"}]}, + {xmerl_sax_parser_utf8, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40f970e9b4eb4122589c0afec6b8907d"}]}, + {xmerl_sax_simple_dom, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2c08dc40f819e4972a58a2fb2fcf6239"}]}, + {xmerl_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0afb5a6c37db1b5dd100297a149d9f8a"}]}, + {xmerl_sgml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22933821d58054ab2941678ce2f8a298"}]}, + {xmerl_simple, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c83463864e0c2117c7659aae4e6ae50"}]}, + {xmerl_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"661d77ea6d07fe6281f04e8e553528d4"}]}, + {xmerl_ucs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ace187d193a5314fbe329eba939dcf0"}]}, + {xmerl_uri, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1121ced96856184d51daecddbb4b562f"}]}, + {xmerl_validate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe1eb20e24d92db08eb03a7a3fbbd73a"}]}, + {xmerl_xlate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2515e06ee34909465fb4520f199f5a46"}]}, + {xmerl_xml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e04d0e513bb48336b9e69de89208e97c"}]}, + {xmerl_xpath, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02a4e2d946ffe93e960c66ce0d391628"}]}, + {xmerl_xpath_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6531ac82f1524946a0a31f40a90546d"}]}, + {xmerl_xpath_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b3bd078c12f46cf5154d05c49880058"}]}, + {xmerl_xpath_pred, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a7d97114507d23ad8cfdf967fd656f"}]}, + {xmerl_xpath_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d43883f65aa0006900fc053453d1bd2"}]}, + {xmerl_xs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6963383b4148fd4a7d51bf8e54b79640"}]}, + {xmerl_xsd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4660a75a540225ba8a88c00914923507"}]}, + {xmerl_xsd_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be422d840d07c53b8ba210889dd5d308"}]}]}]}}, + {application, + {wx, + [{description,"Yet another graphics system"}, + {vsn,"1.0"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin"}, + {modules, + [{gl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b2c807a7fbd4012871027dd4292448b"}]}, + {glu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28a23cf86e317c54ebd1b609b38f2fe3"}]}, + {wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"854481fd306d90c1fe6ad683045a1d98"}]}, + {wxAcceleratorEntry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d7572b3e8662e26666964cc64ff7b90"}]}, + {wxAcceleratorTable, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a261f6c3e0d571493a46fcd40b0361f7"}]}, + {wxArtProvider, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22bc145a24e52e15d6e0f66e3f057df7"}]}, + {wxAuiDockArt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22fca5ae251c6592dda5b08c0688138a"}]}, + {wxAuiManager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f87b4fc280d820edca4655bfc0388bd"}]}, + {wxAuiManagerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d08f2847271aae031ed49a0cab96e8f1"}]}, + {wxAuiNotebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b055991aa4efef19c59653db60d611e"}]}, + {wxAuiNotebookEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9fc2a85bda82dc6406833d3746a1313"}]}, + {wxAuiPaneInfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"96dc39e65e2d04e597a76663651cbe45"}]}, + {wxAuiTabArt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0641080a257e4c0ce7030d7a404ea965"}]}, + {wxBitmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62ddedace917fe7d65ebfdd968e2b442"}]}, + {wxBitmapButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"676cbd0f421681f3cdb110b08b89cdf4"}]}, + {wxBitmapDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ab868e8a18350bb427d08abd31d805c"}]}, + {wxBoxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f30f0ad197cd2fe6bb6956ecf55009e"}]}, + {wxBrush, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f41534b5b14c0528729f3faba6d97e1d"}]}, + {wxBufferedDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14bd8d1184f57ca3b71ae50c396b8fb6"}]}, + {wxBufferedPaintDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b617bb74c090fd1bedd78a44e87620df"}]}, + {wxButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cee0c2cf94d454426067a18f222b5175"}]}, + {wxCalendarCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684d559165e957aac543b2f75db8821a"}]}, + {wxCalendarDateAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3406fdefafb1e56b3b4b0c049e8f306"}]}, + {wxCalendarEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"deb02e8741160ee9f1a44853db16a6d3"}]}, + {wxCaret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"543d4a99c593ac822143cc4c680fbe10"}]}, + {wxCheckBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae5b445190e6d0811bc3bf41c269ad7a"}]}, + {wxCheckListBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"094de5ba936cca4c26ffc0b765d371be"}]}, + {wxChildFocusEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4d29ee311555ab76419724546859432"}]}, + {wxChoice, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7e31246a035375896498e17c366beaa"}]}, + {wxChoicebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32665c0637a00816a2fff4d4f5f418c1"}]}, + {wxClientDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"400fdcc0f51e0e5043be4ca4da99a8a7"}]}, + {wxClipboard, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ddbb8e1f11321204d48d247e9f7548b"}]}, + {wxCloseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"815ac954da8b6cb7b694ca4cb28ccd50"}]}, + {wxColourData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84cf04d6327af73aabd2f775d16bac5d"}]}, + {wxColourDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8e90d5109efec91ee6417d01b929951"}]}, + {wxColourPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7fb673975f4cfa9946c34e30109d036"}]}, + {wxColourPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2cfa29b0fce7f98058c3d5ad016c1f2f"}]}, + {wxComboBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2aa520b9051f42a5e0f1ce1c6408101"}]}, + {wxCommandEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5fed22a39c6c80dcc029ebe5444b0c0"}]}, + {wxContextMenuEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a1739b84b365833c87232bfb298f681"}]}, + {wxControl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aed7a496290caa0b53740c681de998ec"}]}, + {wxControlWithItems, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a14351fadd0f776a4deeaf5ec518a689"}]}, + {wxCursor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79eadaef3d9df7bae0a2146634d43e72"}]}, + {wxDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f88cfd62f368172c3ed90684df53ba3"}]}, + {wxDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"065ea6f1e76ca8b6558ca3dd7ff42077"}]}, + {wxDateEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56c06074946764fbc74b7070f5759e19"}]}, + {wxDatePickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c716525fffbc864c85159fb43b2a8d64"}]}, + {wxDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a480a0c1690092014cf8198ba52d2a3"}]}, + {wxDirDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43565cc473a21632555cb3151138b7c0"}]}, + {wxDirPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6463e54c6564a1f7f5d6bec082f9ea63"}]}, + {wxDisplayChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dbd9061f370f3db0343c4f88f57cfa3"}]}, + {wxEraseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff780a85a34cb23667b7e4072db17a2b"}]}, + {wxEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8644675e2fd7bbc6965d4babd0d14d7a"}]}, + {wxEvtHandler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0991f5d86247ce757145c326adea516"}]}, + {wxFileDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd9b5735e3994492c32ca099a70093d0"}]}, + {wxFileDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9cb446535683e7a9258953f53cd77de"}]}, + {wxFileDirPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6153d339ac822da8c4a9d766d0af22f9"}]}, + {wxFilePickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c9ff43ff739e3ee37aae637a494d7d3"}]}, + {wxFindReplaceData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bccc5beebb4aa0bfd424d26f472745a6"}]}, + {wxFindReplaceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c40b557d35e4bc527a715996daad0e0c"}]}, + {wxFlexGridSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed3da3c3822f59a6b2737f273397367d"}]}, + {wxFocusEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c04cb018d6c94d24a44ae365dae46c1"}]}, + {wxFont, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64303b1a35432898649e40e9c3f5bdd2"}]}, + {wxFontData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0135398ad369de2fd9beda1553f7d309"}]}, + {wxFontDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a872a3b88df4faa051e4b1f8cb0397a0"}]}, + {wxFontPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e5b363ea487a4284714346d43d6c418"}]}, + {wxFontPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a22e0effda4c521ce1b35bd5b2259758"}]}, + {wxFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"168aac11a6c3835b122ee653ce2e50a0"}]}, + {wxGBSizerItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"857c0be340c9c324d39cd525749a7cf7"}]}, + {wxGLCanvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88461209c2234e4e166923d760a42164"}]}, + {wxGauge, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d998a1ffcf56ccf2ea3a12eabe375d9"}]}, + {wxGenericDirCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5f8f19f7fdf9545c1a08318a12782b8"}]}, + {wxGraphicsBrush, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9eeb08fd93c17259400e13b1586ef6ee"}]}, + {wxGraphicsContext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bee681fb85f534a63c2747e704d9001d"}]}, + {wxGraphicsFont, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be1d636aa381e330db93a1deb9ff4b13"}]}, + {wxGraphicsMatrix, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b452f9e3d87800b00e063b39d71583aa"}]}, + {wxGraphicsObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64dba881c5b70355d45323363715ba69"}]}, + {wxGraphicsPath, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e93e67098fd350e7eb20ccc5f7287b30"}]}, + {wxGraphicsPen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c8c8c3cf5277cdc526dca9e591a10b0"}]}, + {wxGraphicsRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4aeb3961b9b1a22263c8abf2473cc53f"}]}, + {wxGrid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1195ea11e71c0534fffa76535efefbf"}]}, + {wxGridBagSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"60ee2c7022f1feef9c169a191945d637"}]}, + {wxGridCellAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02222543db113d41d409cd4080764d49"}]}, + {wxGridCellBoolEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"297c5d3648d99bef9bc294d52d28b619"}]}, + {wxGridCellBoolRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5cf8954049f0443ea2f9003deae7960d"}]}, + {wxGridCellChoiceEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b77d6b8cb344c4512cef8adaf23ef93b"}]}, + {wxGridCellEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5cf6065e8754f96612cff48a1fdcd20"}]}, + {wxGridCellFloatEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"723baea27c999730afcacb3280f611c4"}]}, + {wxGridCellFloatRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab56332ebccd1245fff7cb86abfd670b"}]}, + {wxGridCellNumberEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0d86be445b03945610d9154c8905258"}]}, + {wxGridCellNumberRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28ae774386962927dd552da4e9a28ca1"}]}, + {wxGridCellRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6da61c7ff2464f3b007626b1f813dcb"}]}, + {wxGridCellStringRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aefd3b8019cc4321037c8bd8e4faeba2"}]}, + {wxGridCellTextEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbce8b54a66e9a9869d84655ef26d908"}]}, + {wxGridEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b41f04ffe42c4602fe2911b5ca44dbe"}]}, + {wxGridSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37bfde707aa6f2a1f68f8377dcbd7580"}]}, + {wxHelpEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"714f8b000f3d09fe7eae13b1a5daa0c7"}]}, + {wxHtmlEasyPrinting, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eaa59118b8408b91d16df3b600494e5e"}]}, + {wxHtmlLinkEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f527856d02011b9f480494b2f3118f0"}]}, + {wxHtmlWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61e947b44d4ae81b9bb0faf9a443cbd3"}]}, + {wxIcon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b4d9209343a029641204f334bd07dc5"}]}, + {wxIconBundle, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3281d9d364552b38009405e79467d5c5"}]}, + {wxIconizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d66e4289534961f6868d91e1d1399b53"}]}, + {wxIdleEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc82957c3a0181ef84ca78ace7a9271e"}]}, + {wxImage, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"25de92b502b3a920e1247d2d1433aa32"}]}, + {wxImageList, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3445492f371fe7d2a6f7534d61ad66a9"}]}, + {wxJoystickEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15c7352ac168dc5adc0de4a872b9740c"}]}, + {wxKeyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2e23f50406c65d5f2269910467a9721"}]}, + {wxLayoutAlgorithm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f93e6eac8570144faabaea83388129a"}]}, + {wxListBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"87aade14ade89a7021b6908143d339f1"}]}, + {wxListCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e35643c3218ee7db6bf18dbd72bc470"}]}, + {wxListEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90354ad1e09b594dd321bca68d8d3f02"}]}, + {wxListItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be95e4c22e265fbcfb14ab7c9c798684"}]}, + {wxListItemAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0137573b7a2b2569b481548c26bb91a9"}]}, + {wxListView, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0022979dbcc2ac873adb72ea26c16aa"}]}, + {wxListbook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e4b01ad81bf68f1784ba30772502e0b"}]}, + {wxLogNull, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17f8273288c6e880ec0c7a21842b022f"}]}, + {wxMDIChildFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5894b4a01bb643f208995257a0f9a00f"}]}, + {wxMDIClientWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa7017cfb2e70f0492550a2ecd01d1c7"}]}, + {wxMDIParentFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"251cf2044002bbb5afc2acddf442f14a"}]}, + {wxMask, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b4ce241e6edd84d32df4b40a2f17a15"}]}, + {wxMaximizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8a766afd7de5050ced825a275c6cdba"}]}, + {wxMemoryDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4c1bb9fed0edf70b44f24ea3fb54f39"}]}, + {wxMenu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2e48cd879d0ece5ee24260bc70e2f9b"}]}, + {wxMenuBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"562e9979f8ce58c85032ae3e02307d7b"}]}, + {wxMenuEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0571277ab11e756d18d34c6cb4f8f1c0"}]}, + {wxMenuItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"900c9de70ac02a326bce22eec1c64d48"}]}, + {wxMessageDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a15267b44d3cbeae16c294c4c0b96324"}]}, + {wxMiniFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ca0204b8a167fd472a555695e58927b"}]}, + {wxMirrorDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d521a1f1e4d37132a7a0de0eccc332f0"}]}, + {wxMouseCaptureChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f85672fbf15ee0b8306de4aaf4eb4719"}]}, + {wxMouseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"802c21f46105f957d8cd8c84ff36d986"}]}, + {wxMoveEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4231fd181e0b305a82c595f66eb99b96"}]}, + {wxMultiChoiceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4eb40bfa965a25034ebe4b8fca335863"}]}, + {wxNavigationKeyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b113c9dcf181af633d0eae1f18c36f"}]}, + {wxNotebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fef44c082d799a4d86e0cd8db58609df"}]}, + {wxNotebookEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ccae052bfd1cf87236add4c0b26143d"}]}, + {wxNotifyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3d22b2b86ce1a94c57ccd9842211f05"}]}, + {wxPageSetupDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"755792c8d70118493f5147ef26f40d00"}]}, + {wxPageSetupDialogData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"942f2c8bd296e971ea1d0f74ec700be5"}]}, + {wxPaintDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c23afeac816efecc5417b0687437d8cf"}]}, + {wxPaintEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a18ce83af679d334ce979df65607226c"}]}, + {wxPalette, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5b3e165b8ac3e3cb2d5ba6e149bb0ca"}]}, + {wxPaletteChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"785c765df0a50eac4b2c5c054453c0d9"}]}, + {wxPanel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08c772b8c30e7441366bcfcd5005f21d"}]}, + {wxPasswordEntryDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62b860fd64e74f7d67c51a5d8a0fb157"}]}, + {wxPen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51b981a9e2313e58123888c6b67192ed"}]}, + {wxPickerBase, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab9e2f2d6c3b5f8184d5b1d806b0dce"}]}, + {wxPostScriptDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a820bdc1354c448a8b442016951a6b2"}]}, + {wxPreviewCanvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7b48321129f0e14c2006272c8926544"}]}, + {wxPreviewControlBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62393081a6ffcb6bf092b47703e31b4d"}]}, + {wxPreviewFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78f39bbfead1330839955a50281a2329"}]}, + {wxPrintData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"928a6a97c5c4b664687015c40d660cdf"}]}, + {wxPrintDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"acc4c816bf0a64c8ce31af3c001f1688"}]}, + {wxPrintDialogData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc97f97b620110928f4093806b1b8ce4"}]}, + {wxPrintPreview, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92f04b064e7b041ee27bb202e5a60b80"}]}, + {wxPrinter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"05626841c780ceaf3c5af0212f53fbaf"}]}, + {wxPrintout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"feea26109fa63e4d98c2924189762a43"}]}, + {wxProgressDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb45280951aef0038b8130c91a333833"}]}, + {wxQueryNewPaletteEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be6c85603e81f7c90d4a949d42c0b32d"}]}, + {wxRadioBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33684d6ce3f3c5388e6faf4f06d90463"}]}, + {wxRadioButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92bebfd9b33658dcff2e592b5fcaeb7a"}]}, + {wxRegion, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18cb5a2a1dcb63a646135f2a6cb1b21c"}]}, + {wxSashEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4c51c14137513da9841890751deafd2"}]}, + {wxSashLayoutWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6f5167ff888b73c603b2f641e96a49f"}]}, + {wxSashWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91c5be41fbe95f5ad4504fae2f56f91f"}]}, + {wxScreenDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc9411f49fe7324bcbace2c05d31d39a"}]}, + {wxScrollBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e60ffb44799a3684f74d783addbf42c9"}]}, + {wxScrollEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4fbd1eb49f69e56894aa4a7fb26e1b4b"}]}, + {wxScrollWinEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be44e413061c515cb83a103a46572065"}]}, + {wxScrolledWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ccef65f1430df907d9bd34c27408f9cb"}]}, + {wxSetCursorEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1aad98a9e1d08f792da0d73f23ceb7e5"}]}, + {wxShowEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89a775b3e6579b8e55e35bc6a46649ef"}]}, + {wxSingleChoiceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0df9c7367cbb88a21c8dbfcff668fed"}]}, + {wxSizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78d4dff8fa58b02bd49c31b6de28b935"}]}, + {wxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"581f4ba6c9b3befca1efbcd221455b49"}]}, + {wxSizerFlags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"54ae0bf1305ef85943158c8f4bc58669"}]}, + {wxSizerItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff2680fb6f057abf757516aa98e26281"}]}, + {wxSlider, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e0578ebbde06a5308c00e98e0fbb6b"}]}, + {wxSpinButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d27cc12c048bf0b160f53ca416add6ab"}]}, + {wxSpinCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6ce2382ed84ceb1585afea719fcddf73"}]}, + {wxSpinEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"158d1777d9e8d840b6d8fa93982b876a"}]}, + {wxSplashScreen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2719e687a6f08135c305b0b0692b8f40"}]}, + {wxSplitterEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a71231c8d2c06f12ee862be00ac91fb3"}]}, + {wxSplitterWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7cf57a832b89c0e8574b09e632c7f1d"}]}, + {wxStaticBitmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"709ad1816bd35aa84a5b1eca1a6571f2"}]}, + {wxStaticBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84480d00723cfae07f5c67ad463bec22"}]}, + {wxStaticBoxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b32933189486b806c14a04452a3a5887"}]}, + {wxStaticLine, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"569ff89c23e697fc73de1f13d51b17d3"}]}, + {wxStaticText, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6baa91538f6f4d374f0c8c4a2cb5f25c"}]}, + {wxStatusBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1cbef8443710f5270baade15b9312c4e"}]}, + {wxStdDialogButtonSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2325bcbc06870de4093489cae45bc2ee"}]}, + {wxStyledTextCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94cc5d191271e6c87926850e0ea8615d"}]}, + {wxStyledTextEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"451ad9ce6872ea2035c3828713fe09c1"}]}, + {wxSysColourChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6f80dd65e0c9731e4a6dfcb10c71059"}]}, + {wxSystemOptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f3db4310f5e978392d4c6ec83347dae"}]}, + {wxSystemSettings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3bb2753eb2dde96fd7f4aac7f944f69e"}]}, + {wxTaskBarIcon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d221781abd0a15270e591e77e279a840"}]}, + {wxTaskBarIconEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d865d9706104b122cab70b07fcc3a1"}]}, + {wxTextAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a6de5eb0c71625ca14606d4e3919e53"}]}, + {wxTextCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"924adbbbade1b95c226a18484c6bba33"}]}, + {wxTextDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4a3694d548ae60c8261f55b671ac834a"}]}, + {wxTextEntryDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c3038c65992b9a6eef33dd1aff7ce1d"}]}, + {wxToggleButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4471e21c4fb39eece7418adbcd0f0fd1"}]}, + {wxToolBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"163743b59b5ec0b6af08d7a66f1f36a0"}]}, + {wxToolTip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71dde961902117baba2d2b70f18ebad5"}]}, + {wxToolbook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"053b84811ff7ef240d44fa454f966e71"}]}, + {wxTopLevelWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7dc3f9260823e5ebb2f99855f8d498f"}]}, + {wxTreeCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72e339bd396c87edd28d5a7cc6954e6d"}]}, + {wxTreeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17bf2e16e1f41f451fde53d1b72f8b01"}]}, + {wxTreebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4889ab8905fd0fd8df5d06c900edf44"}]}, + {wxUpdateUIEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7e61e2de35af5257f49919be1304381"}]}, + {wxWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5337193a39eb848cbcd1afc79f19c8f"}]}, + {wxWindowCreateEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c898ff077b90017671180089c5b37048"}]}, + {wxWindowDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dcdf0f184f2b85f0915bb8d89ae8be27"}]}, + {wxWindowDestroyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c443d15978d3a61549f9817ff75fb48"}]}, + {wxXmlResource, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7240754b5985cf7af7c3ff2a3aba3548"}]}, + {wx_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c24e9903d1b499f26e385d7aae15108"}]}, + {wx_object, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b17d673c7c4f59b27e9625b62077ef41"}]}, + {wxe_master, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cbafeb9aba24bb5e831dede889b317c1"}]}, + {wxe_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6fabc67e68c6a41d8fa0ae642f6b272"}]}, + {wxe_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d6e77598d0db8185bb1cb3bad9c5d14"}]}]}]}}, + {application, + {webtool, + [{description,"Toolbar lookalike for the web"}, + {vsn,"0.8.9.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin"}, + {modules, + [{webtool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29344486df5f854ae8fd3bd674c80e99"}]}, + {webtool_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0130c653986734ecbcc9eb173c28c60a"}]}]}]}}, + {application, + {typer, + [{description, + "TYPe annotator for ERlang programs, version 0.9.5"}, + {vsn,"0.9.5"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin"}, + {modules, + [{typer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfd9dd08af18a1e70eacb4048fb641d9"}]}]}]}}, + {application, + {tv, + [{description,"tv Table Visualizer"}, + {vsn,"2.1.4.10"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin"}, + {modules, + [{tv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be7275d94eee00787500a1a2116f2f42"}]}, + {tv_comm_func, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac45aad5047bb8c9fd5567c83f513db4"}]}, + {tv_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97de27d10499042aaf10e26289e1e92b"}]}, + {tv_db_search, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41a489c86d92bc1de3d2b1eba6884c6f"}]}, + {tv_db_sort, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8f3679aece6310ac4b2d574bb4e7180"}]}, + {tv_ets_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71f7fcd2da96e0166340d5fecd7b3878"}]}, + {tv_etsread, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"45a731d225555df8f910b7960330f095"}]}, + {tv_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c776d3c4a16bc432fed801d2e3c8d70"}]}, + {tv_io_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c34cbecb007f6b330646a192aac6163"}]}, + {tv_io_lib_format, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"843ef9fc1762e75675f7a27b7ba99eb4"}]}, + {tv_io_lib_pretty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e749f6a7879008513c7194c145e0faf2"}]}, + {tv_ip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d54724ccb30cfd4eaca323d38ef7861"}]}, + {tv_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de096a5d9d31dd3443e6bbbd4207ecd8"}]}, + {tv_mnesia_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"947c40384ab9d95074ee626b399d893d"}]}, + {tv_new_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3105970c5d4e109104492bf286bfb4b"}]}, + {tv_nodewin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfd57496a2e56d57558891338db3e79e"}]}, + {tv_pb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fecb58bfc084d7d6dd979f14ea8c2796"}]}, + {tv_pb_funcs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcfb711f62ae07c91da02c5b145f3099"}]}, + {tv_pc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61f6f61fcc34826ca8bc3b450e94f92f"}]}, + {tv_pc_graph_ctrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8c763ad45fac44f4356a4739baa30b0"}]}, + {tv_pc_menu_handling, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc155c0472d92d089e6d74a1987d2223"}]}, + {tv_pd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"20b8ec33209b59d6775702be748d2da1"}]}, + {tv_pd_display, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73d810061bb4e923468e82e414f6c962"}]}, + {tv_pd_frames, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8fd381887281403263da14b070a35ca1"}]}, + {tv_pd_scale, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"daff409824df94f43198e08c00c8aadc"}]}, + {tv_pg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de42de073fbf5bd3ae58bef45ee05858"}]}, + {tv_pg_gridfcns, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"663f41dd11d7fbca1f8eb58529e63e53"}]}, + {tv_poll_dialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef887432416a9931b8051963d9a97fdc"}]}, + {tv_pw, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4443616d58cadb7e473ff9ad95c473c"}]}, + {tv_pw_window, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef96313278caafa5e4cb0c1f5da9d165"}]}, + {tv_rec_edit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6cbd579d5ccd73e575e67d00fe9983d2"}]}, + {tv_table_owner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af79fe7c2092cd90cd1cd360def69fec"}]}, + {tv_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6967a2d5f7e03b34c4e26f47355ba43"}]}]}]}}, + {application, + {tools, + [{description,"DEVTOOLS CXC 138 16"}, + {vsn,"2.6.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin"}, + {modules, + [{cover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7856ff33e1e956b68c9f6527b5700b5"}]}, + {cover_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ead2c2bfdef49be858d1caee2d8878a0"}]}, + {cprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0d6cd8fb042b31641c7869b4e148e7c5"}]}, + {eprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8fd5ee11ba9f1cdae8af5c8f1b367a1"}]}, + {fprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c549341f79f954416e826f591645f676"}]}, + {instrument, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf9b95c95942f0ca0ca65db707873a74"}]}, + {lcnt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b27f3e814feb4f8d4f95705115ce98"}]}, + {make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a69d24258713596763ad87c247cef15"}]}, + {tags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"450d10b82d488d74ab49eeef1d7277b7"}]}, + {xref, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f07cbb4541ab47dd30a29a9ad6df8c2"}]}, + {xref_base, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cdb2414576f192e4f5df0f8b0d565598"}]}, + {xref_compiler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1bba5a52fff82650e201bd08241277e"}]}, + {xref_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ee075a14d4a9caf00fd422a5b8a4941"}]}, + {xref_reader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d257c5126f9d0cc4e9050fbbae796366"}]}, + {xref_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7e53f28338fe627ac6fd0821ae6c551"}]}, + {xref_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66929f66fc0606d320c6e5d216cb3b29"}]}]}]}}, + {application, + {toolbar, + [{description,"Toolbar"}, + {vsn,"1.4.2.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin"}, + {modules, + [{canvasbutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2432b0ceaf3b3cd6ab059067bb1b904c"}]}, + {toolbar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0264f53a2881d926b34401d0583b07fe"}]}, + {toolbar_graphics, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"327c7483e8b5cd55e8478a2cea9f0c1f"}]}, + {toolbar_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64977a22d445c231a98bc12926186e0d"}]}, + {toolbar_toolconfig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"037bc3e6d48012cb0c18796d7870c33a"}]}]}]}}, + {application, + {test_server, + [{description,"The OTP Test Server application"}, + {vsn,"3.6.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin"}, + {modules, + [{erl2html2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28fc702edc8365854f9f66fc2fe01793"}]}, + {test_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09cd3b380d55881b18f4020709ad1ef4"}]}, + {test_server_ctrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14f716cc55a7cb00e3db6f747c72bfa7"}]}, + {test_server_gl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91fa2c7419209a51361800e1a28f3891"}]}, + {test_server_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90c3fbf1bdd3260d8be29c0ab04279bf"}]}, + {test_server_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"accd333c058e9b4da064190ef7cf48cc"}]}, + {test_server_node, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"091d5d7aadb062a6e3812afbb130402a"}]}, + {test_server_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9aad63f121b569e197e38735d5f3bf2a"}]}]}]}}, + {application, + {syntax_tools, + [{description,"Syntax tools"}, + {vsn,"1.6.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin"}, + {modules, + [{epp_dodger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec04cd4dd5985f232fc3116ba222bfd6"}]}, + {erl_comment_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b8dce1126af7468c5b30f73044c44db"}]}, + {erl_prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"020fefd3937417a2029a5278dfe6a6c3"}]}, + {erl_recomment, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9ef1a5c9ce3c6ce6b88966b1c766452"}]}, + {erl_syntax, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ee5f2f422313742a2d321fcd901909b"}]}, + {erl_syntax_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f27de1f2cf65260fe863025c358c9c86"}]}, + {erl_tidy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f92471b03263f0cd77f35fd59686258a"}]}, + {igor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eabc7b07e7b92b8d34fa8eb20a507cff"}]}, + {prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1e07ce1f5edda823216364302796ac1"}]}]}]}}, + {application, + {ssl, + [{description,"Erlang/OTP SSL application"}, + {vsn,"5.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin"}, + {modules, + [{dtls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3942c7ba7ffaf15f739485a0294f256"}]}, + {dtls_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0d3d571363ba45d10d8d772f107cd24f"}]}, + {dtls_handshake, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92217b2b0b6d3b16913521e333533ca6"}]}, + {dtls_record, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4aa88c3ec82a97c9aef5efb0773c153c"}]}, + {inet_tls_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c9e1c10262b46fce60dcd0127455cb0"}]}, + {ssl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c0cf688a767412c4de5ab3be9cb2e55"}]}, + {ssl_alert, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff069c184808a482f096e6cf5aeda43b"}]}, + {ssl_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08781acbe7e677b43923f943d54e17f5"}]}, + {ssl_certificate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"292c330ca048353298a264de596e2ee2"}]}, + {ssl_cipher, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7da7124e32552cf9438259bf544389c"}]}, + {ssl_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b46886f7e29fdc628a965ee9e2314e1f"}]}, + {ssl_dist_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1db0e97b9d77cbb26348e98cf386210b"}]}, + {ssl_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e170a0ac2f663c4396f5a3b00e36239"}]}, + {ssl_pkix_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c1b5a81345dcd39060c2fb177b29898"}]}, + {ssl_session, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9103614974d7d39d0f1ccb0a9e5b6f8"}]}, + {ssl_session_cache, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09b0d541e61e1ed9dbcb169b1d5b945a"}]}, + {ssl_session_cache_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffafcdc2ff0342c4c698df0dec3cdc96"}]}, + {ssl_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9d62b4943dddf16fbe39f781699260"}]}, + {ssl_srp_primes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c2df3c9a38a3ceb9cb273a030bd423a"}]}, + {ssl_ssl2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6822bde894695368a294a0e890183b67"}]}, + {ssl_ssl3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5cd3fbdb5a3f1fdb4c78a2acf9735fa"}]}, + {ssl_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a69f0e3bb4639f90a310b2b938cb9235"}]}, + {ssl_tls1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14b5f8a146f51df359e9c1265e949564"}]}, + {ssl_tls_dist_proxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bbb1df174c32c1f424cfa64547d075f"}]}, + {tls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ff734327614ac4d6e4d9acf49998c2d"}]}, + {tls_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ad4d62a6b8101cc5b928498752714ed7"}]}, + {tls_handshake, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2c5513a959ecbe56166df52dff06e6e"}]}, + {tls_record, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94501e4bda011f01fba860eebdff5a44"}]}]}]}}, + {application, + {ssh, + [{description,"SSH-2 for Erlang/OTP"}, + {vsn,"2.1.7"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin"}, + {modules, + [{ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b91a0a4f8271ff77d0efceb75ba5e8f"}]}, + {ssh_acceptor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c39ef119dbfcec7618d1cf223d445d6"}]}, + {ssh_acceptor_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d79d965ce6a8121cfbcc1a57029fa06c"}]}, + {ssh_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"11089687f3d5ff2e2ff4527efdb86920"}]}, + {ssh_auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ff2e66febd08d64ffbebed7e7880ca3"}]}, + {ssh_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ab1a9f964ccce1e001d7484b37c561c"}]}, + {ssh_channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4259284ff9d7671940cfde40b8615fe"}]}, + {ssh_channel_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2594f48f478040f5e861f92c63f78eb3"}]}, + {ssh_cli, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6eb0733483419dc0a920452bb42b7344"}]}, + {ssh_client_key_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1a1ce3edce20525a435533b3f37fcfc"}]}, + {ssh_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b551f86d866df22232a147fca4ac7c04"}]}, + {ssh_connection_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bec5a32b6f6199b3f52e1fbfbbceba3"}]}, + {ssh_connection_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"399ad1481f99b9d43c874c162742c91c"}]}, + {ssh_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd1150bc1fe3673d2446811f54dc23de"}]}, + {ssh_daemon_channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17ceee1d84a542cf54dd487808e00a1e"}]}, + {ssh_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d014774c5b5dbd368fad2bc809515e48"}]}, + {ssh_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1045e82cd74643c823a1bda96d24b47"}]}, + {ssh_math, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a4b44ed70c1938a7277f37d56f9de8f"}]}, + {ssh_no_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9bf450746c1bcc1fd90c463299fdaf5"}]}, + {ssh_server_key_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"debb7d5dcdf2eb88d30ed95a56652366"}]}, + {ssh_sftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74ed0ad4eaf38e4233ea40f4b4769b7d"}]}, + {ssh_sftpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"472a422310ca8f6f289334ef64550afd"}]}, + {ssh_sftpd_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5269b3e25dd16faeb466f76ba993ba50"}]}, + {ssh_sftpd_file_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"627f97d4fb4abd5bee4b509d9225edaa"}]}, + {ssh_shell, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c7831c144031be28ec9dc12b4da3b94"}]}, + {ssh_subsystem_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"755716a08c990d1f606e90420006a77e"}]}, + {ssh_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"408837d884dc9e1f0a969ef64558d733"}]}, + {ssh_system_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f384bcadd7cdca24ec6e40cbe04d71a0"}]}, + {ssh_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1c9ed65701948f63ddb181cfaf2744"}]}, + {ssh_userreg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4f27505cb543991360e10ddb88870cc"}]}, + {ssh_xfer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0220668d75e0c89e7823990a0c968eaf"}]}, + {sshc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"483104e1f9410dfc4e1e29c61d8827ee"}]}, + {sshd_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aba8a2861b6f773e9016ff2859e8de24"}]}]}]}}, + {application, + {snmp, + [{description,"SNMP CXC 138 13"}, + {vsn,"4.24"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin"}, + {modules, + [{snmp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ab098c46c4c009b5ab8a4a37673cf82"}]}, + {snmp_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2ab3974db30a5b20ba308e1ef0c1d3"}]}, + {snmp_app_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b81a8361da32fd1da51e85f36b678347"}]}, + {snmp_community_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14e553d78094cb09e2e2a1a3476fa9de"}]}, + {snmp_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e5c6bc754f1fdf1dfaf7f9815163cc5"}]}, + {snmp_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9ec2fef69fed3fddbb122a5fd31853b"}]}, + {snmp_framework_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0886188c6a8c18a6ff8a3b08172a0773"}]}, + {snmp_generic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b23bcb8a031ccd450999f71b41f1f0dc"}]}, + {snmp_generic_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74806ef6c5e3a1af2cb14a4121f4442a"}]}, + {snmp_index, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a0358730d6b279e4056b9e78fdabbe2"}]}, + {snmp_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f93d36dbfdfef30de3f4807efcec170e"}]}, + {snmp_mini_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bb79af4e373cdc2ec4e6f5fe71d0e01"}]}, + {snmp_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ccd6ba3cc7e504e0c163f8c0f7ff575"}]}, + {snmp_note_store, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3b5f37d8fc6663a63d177cb72a1c498"}]}, + {snmp_notification_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c283ef6cba1ffb08a38c4228f119c1f2"}]}, + {snmp_pdus, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48138570bb1ff76dabe8f1fa5a6e662c"}]}, + {snmp_shadow_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba004cbc14fe13ad6b29515d6b3b84af"}]}, + {snmp_standard_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75c1099b71f4cde7703c1b651168196a"}]}, + {snmp_target_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52cfb682cf25e4c6ad7c6a31ea71bc41"}]}, + {snmp_user_based_sm_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b3b454fe409f6cd24463bfca9369adf5"}]}, + {snmp_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"667650cc1c2f535f771132907bf12342"}]}, + {snmp_verbosity, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8e3d33775ee83cca4d47f64df1dd5ca"}]}, + {snmp_view_based_acm_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dcc969b6786ab84f450e9f0875eab3e"}]}, + {snmpa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2057219be785ea520f5a3f1886d51360"}]}, + {snmpa_acm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f21fee89e88dccc36afbae59e8ccd85f"}]}, + {snmpa_agent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1fcbbb2b5328095d05622eb5da5b1fa"}]}, + {snmpa_agent_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"668a5398f181b8abce6b0c68716e175e"}]}, + {snmpa_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16cc3053b5568e50b5fa384baca6a40f"}]}, + {snmpa_authentication_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc05c3f08dbdec4878aae7816eb5033e"}]}, + {snmpa_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"826ab227f8829b50aabc3072cf2a8537"}]}, + {snmpa_discovery_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50040fb1565d5888507dcffe6109cc16"}]}, + {snmpa_discovery_handler_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62413e2497c617d1dabf1ab269610eb3"}]}, + {snmpa_error, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb436bf4d7bf0615c02c649c0e04541e"}]}, + {snmpa_error_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98147b5cfad093916c0756b37f763e86"}]}, + {snmpa_error_logger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b0431d9de22543e6608515bc4afc07c2"}]}, + {snmpa_error_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"214d6585224898ce39f6eef6554593c4"}]}, + {snmpa_local_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb82eaa9a8486d087a27e834b58a2f6c"}]}, + {snmpa_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e68b813ac1df34912af16ef01738f185"}]}, + {snmpa_mib_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed334445e6e025059b2c9b618109cb9c"}]}, + {snmpa_mib_data_tttn, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f39357a667d3cb530b431fed0dfa674"}]}, + {snmpa_mib_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79d8aff9ea8d71bce6eac0a6f01f53b8"}]}, + {snmpa_mib_storage, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22e11676e0303ea2f292534da8ae66f5"}]}, + {snmpa_mib_storage_dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8c4649828d764370112243ccdbd2da3"}]}, + {snmpa_mib_storage_ets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4410e4e89e46b6e2b818d3b002a98579"}]}, + {snmpa_mib_storage_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e3d387a72c28b5bf76d7a55ac39071a"}]}, + {snmpa_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c4244cad7870e2ec012bdd05281b182"}]}, + {snmpa_mpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8475e9d61092213166efe3667bcf0c06"}]}, + {snmpa_net_if, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"258227a8467ed99df2f9e55cc7b5e9ad"}]}, + {snmpa_net_if_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f57faf094fd82ceadc8527983194b2cd"}]}, + {snmpa_network_interface, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"247221ee7ec97ee189ef5a8b5eb2d18a"}]}, + {snmpa_network_interface_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec6d7d452145362e9dcc0a8be42b3280"}]}, + {snmpa_notification_delivery_info_receiver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de84fce31ef758fbb04722b66e1b22d3"}]}, + {snmpa_notification_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e0b2e493bbbe13f1f17f3fd0be7ce1f7"}]}, + {snmpa_set, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7152d8c4f238062a801fb9b46115b1ee"}]}, + {snmpa_set_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1739e0cf36ad6a9249a8a200409813b"}]}, + {snmpa_set_mechanism, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3bef6423ec85b3b9a144f17c3e3f6c2"}]}, + {snmpa_supervisor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19aa2eef0602df46711bdc98c67d105c"}]}, + {snmpa_svbl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4079d7e9812ac1c42274316b0f883c0"}]}, + {snmpa_symbolic_store, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e0fe1dda713ed3048f51155e47932e06"}]}, + {snmpa_target_cache, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02394ee2b706d7c26f027c960c659f39"}]}, + {snmpa_trap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6ffd78574b7c33a0a96bee64d310531e"}]}, + {snmpa_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b121f7bf87a2d44a14aa42988c2072f3"}]}, + {snmpa_vacm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7c7855fb65468a2355c889aa26badb6"}]}, + {snmpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a474261cc18e1f80f0f742774e3b1417"}]}, + {snmpc_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce88a5b16fdc8fa367c8559a81eabcb8"}]}, + {snmpc_mib_gram, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8b4a0280a0bd9b0e89fd47361381583"}]}, + {snmpc_mib_to_hrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88a2a7964f0b3501263eaf513a72e876"}]}, + {snmpc_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"feadc3549879e928bcc4941ff25c1756"}]}, + {snmpc_tok, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37784c9fb162c53b0fae3cd77566bdb2"}]}, + {snmpm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfcde2ccea1b2dbfe7d6f3bead4df7d4"}]}, + {snmpm_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d6eef427d28f7a96b5be06a0509ed8d"}]}, + {snmpm_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a026c01e17b82bd2fdcb31fb69ae51a"}]}, + {snmpm_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02dd27ee95e3bbe3aab099b11120b826"}]}, + {snmpm_mpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b593b66256ce780231c57b31298fd29"}]}, + {snmpm_net_if, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"68d325a69b69e7de7106965a049522d2"}]}, + {snmpm_net_if_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a83bf186eec6c82fd6c9b164fc337edb"}]}, + {snmpm_net_if_mt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e44169e0549ab840243a2e4e0fa3d5fa"}]}, + {snmpm_network_interface, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47b0e15cd1537e1a3a1b41b8be44998e"}]}, + {snmpm_network_interface_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93b503aeb95e30d2fcf28c2b7d2e017e"}]}, + {snmpm_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdf5855cd385c8d4589d43f2aaddee8c"}]}, + {snmpm_server_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fc16c37e8db23a8b3e40d3696488a0d"}]}, + {snmpm_supervisor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"289642b05307317c1684b5ba76cb81c5"}]}, + {snmpm_user, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c6e66b34460082bbcb99ccaf1cedbf3"}]}, + {snmpm_user_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8c7e1b66076bcbde4678471ee9066f0"}]}, + {snmpm_user_old, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae32fe52a746f3be59c94bac2b679fcb"}]}, + {snmpm_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"59bb20fedd0aca2f57ce3b5dad4e50aa"}]}]}]}}, + {application, + {sasl, + [{description,"SASL CXC 138 11"}, + {vsn,"2.3.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin"}, + {modules, + [{alarm_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"250185bf9caa8aafeefc21d2dc85671d"}]}, + {erlsrv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"656c183c67d6d7556d846752ac2e0168"}]}, + {format_lib_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be7d1b5e03f626bc3a081680842f3c69"}]}, + {misc_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"57e2232dbb711535686b684350c6412a"}]}, + {overload, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce834faf427a10bffb528420385e75fc"}]}, + {rb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c791582aa44b9701a38bea7b12a737c9"}]}, + {rb_format_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6df90c6b446bfd31471022bae098995"}]}, + {release_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc289c9b3ed6443f9e88a7a40b1bbd78"}]}, + {release_handler_1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b7cbb150cbc1ad629936632bcf8700a"}]}, + {sasl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a39ff904fad2fb7b62b8745b34e29b9"}]}, + {sasl_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"651a20fbd6df5b1c785152aecf691f13"}]}, + {sasl_report_file_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d21420c495fb60e6be13677a923ff7b"}]}, + {sasl_report_tty_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165b304307e62adee19805a95d9b6ccb"}]}, + {si, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ecfe8c3c35aba098dd3530398086bcc1"}]}, + {si_sasl_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77c86cc1c9667be73a48dbcb3c480d36"}]}, + {systools, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5514e0264308050ac1cc5cecaf74c950"}]}, + {systools_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1aa9e6a22dccb94499d5609ce1cf66b"}]}, + {systools_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2c4d3e4b7b322b6629575a64e553f90"}]}, + {systools_rc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4337b68dc98fbbed9e93f2bde9ef4d0d"}]}, + {systools_relup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd4bb2c6c8422b979b5a75e6f545baab"}]}]}]}}, + {application, + {runtime_tools, + [{description,"RUNTIME_TOOLS"}, + {vsn,"1.8.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin"}, + {modules, + [{appmon_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62c6dd94499d20f1776df7cd3267c100"}]}, + {dbg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a7b449f37506a70985c5b3f69ec579c"}]}, + {dyntrace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"746609b1554ac41985637b5bba780905"}]}, + {erts_alloc_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a489439d8dded5734eab5eb575ce454"}]}, + {observer_backend, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9af82e565eecf62c161023fce415c58"}]}, + {percept_profile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32909b64d30ade082680e9491a3ddbc8"}]}, + {runtime_tools, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c569a23a42bf744f56abbf4215ca2a9d"}]}, + {runtime_tools_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f52650d88ee6f6754ed9d109accb7eac"}]}, + {system_information, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ed879d33f6159b48fb25bc472369285"}]}, + {ttb_autostart, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6838c97b9564b06d26e5f599adcee4a6"}]}]}]}}, + {application, + {reltool, + [{description,"Reltool the release management tool"}, + {vsn,"0.6.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin"}, + {modules, + [{reltool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b15d15af1453d274df701f6c4b39da09"}]}, + {reltool_app_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e15041fae657a7abcce63e7e775af842"}]}, + {reltool_fgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c07b7a13c2ae36b59f5d1f0daf8a567"}]}, + {reltool_fgraph_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"230041769919290efa2a3419cf70c8cb"}]}, + {reltool_mod_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"752d8f1d674a79955de7afd3ba6b561b"}]}, + {reltool_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"135d9bb6ea57344472c185d61c97573c"}]}, + {reltool_sys_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f02ff065d17fa8203d711b9cc698ebf4"}]}, + {reltool_target, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"036440a327b1c9cbe5e404ffaf02b9a4"}]}, + {reltool_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c623f90e0c5da5db65d4ca56d9088d7a"}]}]}]}}, + {application, + {public_key, + [{description,"Public key infrastructure"}, + {vsn,"0.19"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin"}, + {modules, + [{'OTP-PUB-KEY', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6f796b3667abf21828ee3daf8df487c"}]}, + {'PKCS-FRAME', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4419b1988012d2d620ac3cc7dec13d65"}]}, + {pubkey_cert, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7a4ac659e84ddfb1dc14f0608460fbfb"}]}, + {pubkey_cert_records, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d5b1f48543bb6b0e62b343c2b965615f"}]}, + {pubkey_crl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"680633b53ae9815138f804c999e78bbd"}]}, + {pubkey_pbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"517156230695474828dc4d30af59f656"}]}, + {pubkey_pem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eef5632fcf01194dd6c98f116de8f923"}]}, + {pubkey_ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5acc6568d3caea9be2d2b93904f6bda9"}]}, + {public_key, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b054e72c6e34943c0143ac34edcc37e"}]}]}]}}, + {application, + {pman, + [{description,"pman The Process Manager"}, + {vsn,"2.7.1.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin"}, + {modules, + [{pman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d0ea0aa857d089d112f46bed16fb83c"}]}, + {pman_buf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efdccd7cb884a2a9c50cc70719d53575"}]}, + {pman_buf_buffer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfdd78d8905bd1bb7e07ee22414a0eae"}]}, + {pman_buf_converter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"afd7e3173377b46ec7374c0e1118a158"}]}, + {pman_buf_printer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c592081860a9b92b08b557c46b11307"}]}, + {pman_buf_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77e551e0bc43c59bf5a76f0e32daf822"}]}, + {pman_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4371d24cd7312794afb137de259b8e0"}]}, + {pman_module_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0336677781cb813897e9306415f85b38"}]}, + {pman_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"016b8cac7c507593a118b25ab3d642d2"}]}, + {pman_process, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"faab007fad0f14fc692df152d60a8abd"}]}, + {pman_relay, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b12bbe3e253211fac5006414f6f6162b"}]}, + {pman_relay_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3b7eb65c7c1507892ed8f01a1b5e027d"}]}, + {pman_shell, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3b9e7634fb49f1e84a57ed8cee5e3909"}]}, + {pman_tool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58ab631eed4b29ddebd390b4cd30c82f"}]}, + {pman_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"697f4a56a374bcacf06e8329356f7b9d"}]}]}]}}, + {application, + {percept, + [{description,"PERCEPT Erlang Concurrency Profiling Tool"}, + {vsn,"0.8.8.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin"}, + {modules, + [{egd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"810926c65926827a80dc5de6e9cace80"}]}, + {egd_font, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f41911d6aa5ada509332aca159c905e"}]}, + {egd_png, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"201db7435f6981d1d5b738c5431d4a39"}]}, + {egd_primitives, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cba1711d459930f92725953bca582106"}]}, + {egd_render, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b86b9269dfad8feb8753abfa8e9be68e"}]}, + {percept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af81f6c6164ac09eafdfbe02a985976b"}]}, + {percept_analyzer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efe67a4369a96144def43df906f2ac94"}]}, + {percept_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bff80fb7515c9c23977cceb2fba5e0f"}]}, + {percept_graph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1444b51fa93b12bb98f6bf5246e079f9"}]}, + {percept_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b84fd915479ddaa158366217f7fb2ff7"}]}, + {percept_image, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec8d1dae1d54b90ccd7cce76d83573b6"}]}]}]}}, + {application, + {parsetools, + [{description,"XLATETOOLS CXC 138 xx"}, + {vsn,"2.0.9"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin"}, + {modules, + [{leex, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c82fd5f503469e40008fb18b393b5421"}]}, + {yecc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e644a07828dcb46e440058ec4e3ea83b"}]}, + {yeccparser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43c2c84fbd4caf3c3eacfe0e25874f3a"}]}, + {yeccscan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc55537c97f45738825ae56628fd4c71"}]}]}]}}, + {application, + {otp_mibs, + [{description, + "SNMP managment information base for Erlang/OTP nodes."}, + {vsn,"1.0.8"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin"}, + {modules, + [{otp_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b92358a169666b58abe47dc98b1ea1f8"}]}]}]}}, + {application, + {os_mon, + [{description,"CPO CXC 138 46"}, + {vsn,"2.2.12"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin"}, + {modules, + [{cpu_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"071d377ab6c706f3c4404dfddf95316c"}]}, + {disksup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53255f9176fdf57c6d2c62a1e3ca8ce2"}]}, + {memsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d5aa81b4c0017f97827b13d588e907cc"}]}, + {nteventlog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d593ff9832f59a682cb9a7217eb1dc55"}]}, + {os_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8fcf26c77f01a1542d007513e49c214"}]}, + {os_mon_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15ff2fbfd1c88ff31ff9c8e85bf10cb9"}]}, + {os_mon_sysinfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bed5dda663ec63a320198f44c90f388"}]}, + {os_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52837f657faabaab44288ba2d29ba473"}]}]}]}}, + {application, + {orber, + [{description,"The Erlang ORB application"}, + {vsn,"3.6.26.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin"}, + {modules, + [{'CosNaming_Binding', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f894f1ca2a53e8c68579c9e786884b64"}]}, + {'CosNaming_BindingIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"938a503dbdbe3f091ce900dbe1efeeaa"}]}, + {'CosNaming_BindingIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"07513574b340d64ec6d50ebf98a772c7"}]}, + {'CosNaming_BindingList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37aaba8fc8623355426055d3b9c2e2b8"}]}, + {'CosNaming_Name', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7053bbff4a4dd27357c7ae2b7a1bd158"}]}, + {'CosNaming_NameComponent', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ef942efe3f30c93b89cbb79f0b0e372"}]}, + {'CosNaming_NamingContext', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e73232824e400a4b6f9a295922420a5"}]}, + {'CosNaming_NamingContextExt', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb072ace0d3d1445fa884fbb59d19ff6"}]}, + {'CosNaming_NamingContextExt_InvalidAddress', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba29a989c4d5c961c62bec9162bedd71"}]}, + {'CosNaming_NamingContextExt_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ece2da1a74559421fd8c5a0fcce5a984"}]}, + {'CosNaming_NamingContext_AlreadyBound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba2061d5ba1cd24262351fa0b92b8850"}]}, + {'CosNaming_NamingContext_CannotProceed', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"175c9f998a255ce625568ff7d7258988"}]}, + {'CosNaming_NamingContext_InvalidName', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b5bb3702b8105f78101d3deeb4c3717"}]}, + {'CosNaming_NamingContext_NotEmpty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0dbdfc178f40394391977946fdbf331d"}]}, + {'CosNaming_NamingContext_NotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2f4d6cf9150fcc92bd9568ff89d2774"}]}, + {'OrberApp_IFR', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67d245498b4abcae1f6acd51c4edc47e"}]}, + {'OrberApp_IFR_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab7e63e7a7e47bac6d2cc7e703f2915"}]}, + {any, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1339baf3e573eee6bb558d0097bce4c2"}]}, + {cdr_decode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dda23b10f13bec369113cf3ae72b9448"}]}, + {cdr_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d36c6b8ee3a9fddfdc76246030287ba"}]}, + {cdrlib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d97ec0db3640dda02a25e6ecc9d5fa5e"}]}, + {corba, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3794dffcd3c921332af2b343bb9e8e40"}]}, + {corba_boa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dfd1417d677ca18f73c4efe65b37bad"}]}, + {corba_object, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"569d7993c599bd7c2f68bf7a2d11fdbd"}]}, + {erlang_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ec91157e3e220cc5163b552f3a4050d"}]}, + {erlang_pid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"49b95cc1773eeed11661fc4cb36b7921"}]}, + {erlang_port, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b0dd3969488714fc2e2dce30b297b14"}]}, + {erlang_ref, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98b38f4a590a67a1fa34b2c6d60e8992"}]}, + {fixed, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"469aed745e70550ecb4ee6b382a0c919"}]}, + {iop_ior, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d3eeb1d5401ad27f97b75926cbf8387"}]}, + {lname, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"945467530d2858f1dfb87b970a3862bc"}]}, + {lname_component, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2cb0fe6e60c6d07d711cd8c3b28c8f7"}]}, + {oe_CORBA, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02e20118e9fd5c3f5d2f398851cbdcf1"}]}, + {oe_OrberIFR, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ebc39f59cbd7848e61193c82ab0ee2b9"}]}, + {oe_cos_naming, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18745eadd8db295fc1e8e656a5c8d4d6"}]}, + {oe_cos_naming_ext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56520dda2639eaadae720ac4974080d5"}]}, + {oe_erlang, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"963486a48402a80366275f8dace2a80f"}]}, + {orber, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b4c2a1e44684d8f314230f21def86f2"}]}, + {orber_acl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76577170937f03fa23e69e4df6cfc424"}]}, + {orber_cosnaming_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f856cbb99314e9eb7d0d7bfcdb30994e"}]}, + {orber_diagnostics, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"656103538d0ee20b1433c6b2909b26c0"}]}, + {orber_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75b0fa232da40432e3009ead263f3749"}]}, + {orber_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ef09c1b3026ef3aaae5e9c6a5dd2918"}]}, + {orber_ifr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0fed5973a29d60ab161580bf07f3b185"}]}, + {orber_ifr_aliasdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"941404668a378948bbef59da18973eea"}]}, + {orber_ifr_arraydef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4a1ebba0a7f7a26d5205972ac2bc6fc6"}]}, + {orber_ifr_attributedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"141fa0d0127d292e0bfc3f0e654059df"}]}, + {orber_ifr_constantdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"337388d13414ab58cdafcbd70a150741"}]}, + {orber_ifr_contained, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a825abb903208287bc2dfb7323342fe6"}]}, + {orber_ifr_container, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3027632d783e5db3440bead382fbc787"}]}, + {orber_ifr_enumdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f031b9d117143554a1db00a0f7f9d4af"}]}, + {orber_ifr_exceptiondef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e152b750cbb286b90ec49855c9f8115"}]}, + {orber_ifr_fixeddef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0f66c8a6999241daec6815a1eaf7112"}]}, + {orber_ifr_idltype, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f5b0c9c79289e56f5cfe24c5de10c26"}]}, + {orber_ifr_interfacedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"985cc443e424939f7f067e9d577c0044"}]}, + {orber_ifr_irobject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"441a6a89092f9059eddaafb3a19fddac"}]}, + {orber_ifr_moduledef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"571791fe8c191478f9d99008066db451"}]}, + {orber_ifr_operationdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"26ff4727920661a5777fdfeb9542447d"}]}, + {orber_ifr_orb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f82245f4568a7ad57b93005504b22f3"}]}, + {orber_ifr_primitivedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cad06f8ddc116042d7dd2f54f189dc9e"}]}, + {orber_ifr_repository, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88fc8f59fe5a883e6a5cc76c9db0a8f0"}]}, + {orber_ifr_sequencedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55db89bec3e336bf1a1087b8b24ec0c9"}]}, + {orber_ifr_stringdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7119d2c1827fbfe04397a23e0c9b7bea"}]}, + {orber_ifr_structdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e0643a9e51eb2fe1bb3268623005b9c"}]}, + {orber_ifr_typecode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52a2bebb663486dfde545175b24f1db9"}]}, + {orber_ifr_typedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1440f73d398af50ec1f1854b68a7ba14"}]}, + {orber_ifr_uniondef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a767805d679f87ec96f566ea535b0ae"}]}, + {orber_ifr_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a7a7127b079023e8507c1963bb70c6a8"}]}, + {orber_ifr_wstringdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d9705c3d0a8e75958cfc92c0e065688"}]}, + {orber_iiop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08e63cf45c6b87ef390f1ba44908df62"}]}, + {orber_iiop_inproxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7d958ccebf1795810daf42c284df0b0e"}]}, + {orber_iiop_inrequest, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"01cf6a0b86d8575aad71a64d1ead078f"}]}, + {orber_iiop_insup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f3e97ae477f58ab983bbf78c5691a6b"}]}, + {orber_iiop_net, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf48384275f94de84a88f985e69db8c5"}]}, + {orber_iiop_net_accept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"311c1717af0f83c768a7904bd4f35d87"}]}, + {orber_iiop_outproxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aadcfde8449aad07dda946c4fe8ae73f"}]}, + {orber_iiop_outsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bb6aa4ab42569ea07e6410eec054d96"}]}, + {orber_iiop_pm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c23eac6eed61ab8f4b0376bada6a96c"}]}, + {orber_iiop_socketsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41cb70052711397c5ff4346c78bad0bc"}]}, + {orber_iiop_tracer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3db9add6a744c5d57f2f88593010189c"}]}, + {orber_iiop_tracer_silent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddc6f4254d9d55920c182bfc82174cd5"}]}, + {orber_iiop_tracer_stealth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b5c2faed84597fcc65a1f79f126d38ed"}]}, + {orber_initial_references, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52d7435fcf9d9b18c41cd15112211641"}]}, + {orber_objectkeys, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77601464765a034f2157e184b66b27bf"}]}, + {orber_pi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7772668cb95512b5068384cffb15f5ec"}]}, + {orber_request_number, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce4912e1c1726a3edd4d2709171895ad"}]}, + {orber_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea78f1c75c253c070f2b3423b896667a"}]}, + {orber_tb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d9b508906d187e6448fd06b88923aea"}]}, + {orber_tc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f43cb767b9c01d13d190a56574aa504c"}]}, + {orber_typedefs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82369e4a3e862ef248d19c460b2df8ea"}]}, + {orber_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23cc5e9ac5ffe3b7ac2315ae0759243c"}]}, + {orber_web_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c95b45e743c0a1f7a2e88e350075f78c"}]}]}]}}, + {application, + {odbc, + [{description,"Erlang ODBC application"}, + {vsn,"2.10.16"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin"}, + {modules, + [{odbc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2763e2d38d62e1fbe7c8ed231cce1905"}]}, + {odbc_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"83f4d02ba9fd29ff84576abe0fde901e"}]}, + {odbc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c39c9a6e602d66a2d12b662bf0a9b20"}]}]}]}}, + {application, + {observer, + [{description,"OBSERVER version 1"}, + {vsn,"1.3.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin"}, + {modules, + [{crashdump_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77bff2805dfd88de4320b9f8c1469fe3"}]}, + {crashdump_viewer_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d22f72c96ed77a6e4cabe125db6c8419"}]}, + {etop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"377b59a76eeb5edb5b8531b5f0267399"}]}, + {etop_gui, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0421b554807cd47031f0873f649d5e1"}]}, + {etop_tr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d152946c82611d5f39b1ed3c720cb570"}]}, + {etop_txt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02a670a9ee8ea7c3cea6de5bdcfa356"}]}, + {observer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e7d30dfe8122c8736eeac0582abb076"}]}, + {observer_app_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6130cbc700be448c7f64c7f8bcefcc6"}]}, + {observer_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0973e064b3b2ff3b79f2f1eed47a8539"}]}, + {observer_perf_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b5753467f635c1a98ad5e3f2e50f75f4"}]}, + {observer_pro_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e68919849e91012fd156d3ac6228af"}]}, + {observer_procinfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"175c07cc3510655fbdfe95a35012a84a"}]}, + {observer_sys_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7637a94c99800b8b1c47467f7411fce6"}]}, + {observer_trace_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a836a58f29e21107efbf7fa3276c0ff6"}]}, + {observer_traceoptions_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e070e083bc809e6bd67284d46876292e"}]}, + {observer_tv_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dfa1b811025f5313ba91c620bdafa62"}]}, + {observer_tv_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c8661053d6b3b563582c335e6e18bc2"}]}, + {observer_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72d4b855d618e72367b3b26a9c9fe22e"}]}, + {ttb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08eec178cb05729190be64adbfc06fd4"}]}, + {ttb_et, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18006f41b1483c5378d0d803bb73428f"}]}]}]}}, + {application, + {mnesia, + [{description,"MNESIA CXC 138 12"}, + {vsn,"4.9"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin"}, + {modules, + [{mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ef269bdcc2f2ebecc93eed4a7d97e43"}]}, + {mnesia_backup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50581e2e99465b9ab9adb11193ccbcb8"}]}, + {mnesia_bup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63c4dc59c47dedf48fb8a67b3aee3a5a"}]}, + {mnesia_checkpoint, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"57fca37f2b0e856bb728f0660f6ad017"}]}, + {mnesia_checkpoint_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"211e3b158a5869145c472cc12080a148"}]}, + {mnesia_controller, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4d98077e647433bbd4dfe9215bf45c0"}]}, + {mnesia_dumper, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32b0759359dcf8f05af72e914720ceaf"}]}, + {mnesia_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb423661483d17e8aaa683a22600aee7"}]}, + {mnesia_frag, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"279eb6b4f1f713c9960f1697856030e7"}]}, + {mnesia_frag_hash, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ca1e314bdfa381005e047965e7fe435"}]}, + {mnesia_frag_old_hash, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70dd3592f65741eefd724448e56427a3"}]}, + {mnesia_index, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79261cc27d922d6eeecac20a90920cd0"}]}, + {mnesia_kernel_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f6da4fd3cf0ce074bf7b04e44e86470"}]}, + {mnesia_late_loader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02a44f59cd50a3b6fcb78198781e8e7b"}]}, + {mnesia_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08abcd0826ef6dce6929ca1741c156d7"}]}, + {mnesia_loader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b316a61b4f5ce23b5c7e4bcfdaf6367f"}]}, + {mnesia_locker, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"847d79bf891a9bcffda9e12458490e7e"}]}, + {mnesia_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ae50e4995027fe6229091521e842b1e"}]}, + {mnesia_monitor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"105c199cb846668f52e583faee684690"}]}, + {mnesia_recover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91044c669bf165c1d9bb72d76da7135c"}]}, + {mnesia_registry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa46aa5634381be997d54dbbf8da99d1"}]}, + {mnesia_schema, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19676af000bf38b666e545b3c6f22937"}]}, + {mnesia_snmp_hook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f994954a18270025bf505af1a1dd1244"}]}, + {mnesia_snmp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb3f27cfb0a3fa51e062ca6e86973a3f"}]}, + {mnesia_sp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86565dac38aae327be11f08e8d2e05e8"}]}, + {mnesia_subscr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02b0b2458f5900927d72010d097ea94"}]}, + {mnesia_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"309a5b00197c57437131eec4ce49c560"}]}, + {mnesia_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3008beca178112720e4dc18ec6325583"}]}, + {mnesia_tm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7be29c00407f6162375a0d855b36c68d"}]}]}]}}, + {application, + {megaco, + [{description,"Megaco/H.248 protocol"}, + {vsn,"3.17.0.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin"}, + {modules, + [{megaco, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1621bcd17d72f8165b568b33e80badff"}]}, + {megaco_ber_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12ccb5c139d29b2066d3317a2f6c166f"}]}, + {megaco_ber_media_gateway_control_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c13becbea3de6bd37af08cd022c5b5a1"}]}, + {megaco_ber_media_gateway_control_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"721176c1221d7ea112757ebe621508fb"}]}, + {megaco_ber_media_gateway_control_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4546f9416ae2b969c41f114c777b994"}]}, + {megaco_ber_media_gateway_control_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f352af0a5bfe76b5ca6a6393ef0782a"}]}, + {megaco_ber_media_gateway_control_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2321767a4aeeadca11a92a77da4bb488"}]}, + {megaco_ber_media_gateway_control_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"851782cffe570769b46773bc55073bc5"}]}, + {megaco_binary_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e378f272d26a606b7d8b99accc472ff"}]}, + {megaco_binary_encoder_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1eaa0f4ac077056d2753b4945acac2af"}]}, + {megaco_binary_name_resolver_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"afc05954d77f1580e3e3119b28b2ee18"}]}, + {megaco_binary_name_resolver_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64eca1a5ca4891ec6cb56e5b3b747cb1"}]}, + {megaco_binary_name_resolver_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ab8daa26dfc1ecd8593ea03f037e0b1"}]}, + {megaco_binary_name_resolver_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a28e0729df9ed41a27d38e76d2b1efc"}]}, + {megaco_binary_name_resolver_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e831098553576721cfa3187f3246577"}]}, + {megaco_binary_name_resolver_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"adc24901b71b89a59191caa575777136"}]}, + {megaco_binary_term_id, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82f36dc610c932eb0e6ca2e9002d6c5b"}]}, + {megaco_binary_term_id_gen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1f0904c943c78f55b67da76203955d"}]}, + {megaco_binary_transformer_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fff3d874f36cfbc32dbbbc5078dcd380"}]}, + {megaco_binary_transformer_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33cc44d1bf46cd3bfb5aea29887bcd57"}]}, + {megaco_binary_transformer_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef3fe41f1f88c54aa4fb1caac2724337"}]}, + {megaco_binary_transformer_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f916e19a7725a6887c4f88395c9af607"}]}, + {megaco_binary_transformer_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4c8f6b31357bc55c13c7b7881a9a775"}]}, + {megaco_binary_transformer_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab88024bec5e1fd3c03923d1d0e5119a"}]}, + {megaco_compact_text_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf7e1fe374598225fd46f38b81e07d9f"}]}, + {megaco_compact_text_encoder_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23e6620407ec5197028fa798bf01e51a"}]}, + {megaco_compact_text_encoder_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a475f5b036fb0aa3dd35f86ff1d3c3fd"}]}, + {megaco_compact_text_encoder_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2cbd43381f15e24a25a85797028851d5"}]}, + {megaco_compact_text_encoder_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b193fe2860d7e926e73b71c501412b07"}]}, + {megaco_compact_text_encoder_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"777b3a6ecc8b41b8bbab1ad70c7bf6ae"}]}, + {megaco_compact_text_encoder_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e481d7fc5b319d95e6b6d7301837211c"}]}, + {megaco_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"895d349eeee863ee722653edb146eec3"}]}, + {megaco_config_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"275e3e57bae4ae030b1e8f2be4a4ece2"}]}, + {megaco_digit_map, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e82b7b9950adc2a9b92418b741056198"}]}, + {megaco_edist_compress, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de4bb8d979b71e2a77bc6480c755f0e0"}]}, + {megaco_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"323b5d062600331842c9a23dd847ce29"}]}, + {megaco_erl_dist_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6523fa00adc2e065d8418983cb9caa83"}]}, + {megaco_erl_dist_encoder_mc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41066ab829e0f8ebc457c8e087e029db"}]}, + {megaco_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"778b451ec26564a06b01bb6449e62004"}]}, + {megaco_flex_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"76674c634aab23d50f8746016a4a0be5"}]}, + {megaco_flex_scanner_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"eeafd9d64269893a5e719f9791e846ec"}]}, + {megaco_messenger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7fc902eabe8adb5b0fe33e79b000ddbd"}]}, + {megaco_messenger_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3bee9043dce0a684cdd1cd8134a370a4"}]}, + {megaco_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"441b7ad486bf4eef899e02f97ba14768"}]}, + {megaco_monitor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6da74b6f55cbbbacdea077af0a845ef1"}]}, + {megaco_per_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58c49d0f60e2132cef575414c82a917b"}]}, + {megaco_per_media_gateway_control_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b84247f3fbcda78fd09755f5368ade94"}]}, + {megaco_per_media_gateway_control_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a981605bd179636baebaef5ff6ebc806"}]}, + {megaco_per_media_gateway_control_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f30445cfec10f8cbd55fe17c6724b53c"}]}, + {megaco_per_media_gateway_control_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0fe217237913122558c928dd10ef79f5"}]}, + {megaco_per_media_gateway_control_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d1a9dfc04639677dfb27b24b2829f7ad"}]}, + {megaco_per_media_gateway_control_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e967677da6dc54388db01f5c1545c77e"}]}, + {megaco_pretty_text_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9dce15ad90abfcf6a7cc93391dbdc64"}]}, + {megaco_pretty_text_encoder_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b00d8cfa3efaae8d225da7007dada64"}]}, + {megaco_pretty_text_encoder_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa844b22554dca495b913fc57cfa3013"}]}, + {megaco_pretty_text_encoder_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91b54a6e884a8afa32ffaa8352893baa"}]}, + {megaco_pretty_text_encoder_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6db8e013212168a6df39fca101e3aa"}]}, + {megaco_pretty_text_encoder_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"079587bd6b00f80224aaeec199380224"}]}, + {megaco_pretty_text_encoder_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3a6f2cc1885299f91fb769fd4a1cb01"}]}, + {megaco_sdp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e2d41d949f9ab2404116f809237301a"}]}, + {megaco_stats, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03152bbddea7c1e557224711c4b97892"}]}, + {megaco_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb7802016626e692d5a8519f536cf3d2"}]}, + {megaco_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15cec9b1865d957412d0945e11bd5630"}]}, + {megaco_tcp_accept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4999b86506c5da0b256de8fdf1423c20"}]}, + {megaco_tcp_accept_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91e916f8b5d3aec78b129abb2064f229"}]}, + {megaco_tcp_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53c5b634698b54c66de0676289c52222"}]}, + {megaco_tcp_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48ff5ffa59eb95858702320eed91bf59"}]}, + {megaco_tcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"597fe1780a9081757e42b57e5ebef1b2"}]}, + {megaco_text_mini_decoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4675bc758b6dfade5a21f345c13fd523"}]}, + {megaco_text_mini_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbc886fe01447c012941de8bbcb8b1e7"}]}, + {megaco_text_parser_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc946659afb87b8bcd032cd513206016"}]}, + {megaco_text_parser_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d0158fa2aa0880bfcfcea1249e90a259"}]}, + {megaco_text_parser_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9acb9c582674145c94ada5f3bc58567f"}]}, + {megaco_text_parser_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfc2972ed82568f1212b10aa5f54a5bf"}]}, + {megaco_text_parser_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38f90460cdfcaf135be0f96917b2f7fa"}]}, + {megaco_text_parser_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9afc2c639e48188d332c8bccf39588"}]}, + {megaco_text_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d050061e3c87e8f1964b063624202b3"}]}, + {megaco_timer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1252b5457aeb62266567e5905d4fa76f"}]}, + {megaco_trans_sender, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3be0e627b81fb19dc7a3e27885f0958d"}]}, + {megaco_trans_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c89becbc7e0e3b62c0ee8fac09f5adef"}]}, + {megaco_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ad32251f0bd50e9289ae09286daf84e"}]}, + {megaco_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4274133166af4f35b78505125ca3280a"}]}, + {megaco_udp_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84b71d1f62b9e3958dc6bc55ea87dd5d"}]}, + {megaco_udp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e05c1a2e530417dee164ad41e4fa8888"}]}, + {megaco_user_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"604d252f88e8e7de2e8b2941d6f2fc2f"}]}]}]}}, + {code, + [{path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8"}, + {modules,[]}]}, + {application, + {inets, + [{description,"INETS CXC 138 49"}, + {vsn,"5.9.5"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin"}, + {modules, + [{ftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f75e6a1763c0f8ad63c48fee7762bd08"}]}, + {ftp_progress, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a9f1247decddc2091349cc0c561740ba"}]}, + {ftp_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8184ca2df27024d938c1745b9b46b21b"}]}, + {ftp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23491501dc6175d1a49c2bbb888642a9"}]}, + {http_chunk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d127d36200e815d589b358178ae3d98"}]}, + {http_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9d27256b8abc0a4752a98c5fab193d9"}]}, + {http_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a327d5e08590cae728288f395b5880ea"}]}, + {http_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fefac9e86284528e5883735ff02f9635"}]}, + {http_uri, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d8dafbcdb6a18c64161cda56b762aea"}]}, + {http_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"948c60f737d5c6d13e9e19b518eb5dcc"}]}, + {httpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12f827ea3b4a60e6abe352016df83794"}]}, + {httpc_cookie, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55dbb04357dcd95196eb831ae6c88924"}]}, + {httpc_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"13538972414b85062867ba8f72b63a6a"}]}, + {httpc_handler_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d291f5169c3ee61ab92b272e5612628"}]}, + {httpc_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbc2349ce89229b7aab1397e920c4a23"}]}, + {httpc_profile_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71f19372131a26ce3fec7fe59cae62a6"}]}, + {httpc_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f9b151b009d24a06987f46db7a7ab32"}]}, + {httpc_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df4086639fe81d9d6b0b0f1c27d783c8"}]}, + {httpc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cac51bc379bec99f8e2fe737e6701177"}]}, + {httpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"965f24797bd0ecb2662f8cccbf5a114f"}]}, + {httpd_acceptor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"60c4ec255f9d3e71ca247d690fc050e3"}]}, + {httpd_acceptor_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"146196f8aa54e2872ea09789bf43167e"}]}, + {httpd_cgi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"493bef6896bc09b2a84424756e6aa2d6"}]}, + {httpd_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"122f251eb11290e92a55da1a97647ff7"}]}, + {httpd_esi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0a20e7f4efd148111074d6c027a749d"}]}, + {httpd_example, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e8699c78100cc50e49ac578b154e491"}]}, + {httpd_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"30702eec4e62275db10ea6e81cd67866"}]}, + {httpd_instance_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d7ab2c856e6d5438dd3144b284ee396"}]}, + {httpd_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12fc1dfa3734ae50f2b5912d1245d63d"}]}, + {httpd_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae9176839ab029c3685eaa1e9b2b90d9"}]}, + {httpd_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c61eb0828079a16033e6b33e8095104"}]}, + {httpd_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a91f7e3de28a17002b2923df84f4b01e"}]}, + {httpd_request_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b44228586d6ef9df1fb9bbcdf8e395a"}]}, + {httpd_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73a06662a9f1ea7bb68ea6e0487ff3c0"}]}, + {httpd_script_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"348c3920cf5e3c2137127c4a1e1345b4"}]}, + {httpd_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f021c0b5923e108fd344cee27e360a2"}]}, + {httpd_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7814cf6981a80379606be6a64d684e24"}]}, + {httpd_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b6d1e4e24096bf68e395c2105f9ddce"}]}, + {inets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5dea85fffabe81e273c12c78d57d3ea7"}]}, + {inets_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0cc5b16bf76fdd61cc3fcc189509b4cb"}]}, + {inets_regexp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d90aa0458fda8b4878dc77b59f3a996"}]}, + {inets_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fda2c34b97323c1cc7756e681f50073f"}]}, + {inets_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c8287946a050dad1ffd422678150174"}]}, + {inets_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38930cb6dedec461e1cb409ee6902dc4"}]}, + {mod_actions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd04b142450e4b2a6681a67ff53fe983"}]}, + {mod_alias, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"488cd71dcfc552f96603b8ae70cffbc8"}]}, + {mod_auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4c582f449cb199ea9cc8d5a7004a9da"}]}, + {mod_auth_dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43a467ba929f04d907a1a6ba11bb1893"}]}, + {mod_auth_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d3fe40e66d1a310a5814ead817db4f"}]}, + {mod_auth_plain, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1692c15dbed5d5a680dbac4354569ec8"}]}, + {mod_auth_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ee144579a7fd9a4a761307385f6ef449"}]}, + {mod_browser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4187d14f39e293330958d7ed7f61ce5"}]}, + {mod_cgi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e72a465306011f4ac2a88f03cd6c9dc"}]}, + {mod_dir, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec5cbec9126f452057ed437dba2051b2"}]}, + {mod_disk_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"702d6f87d24465d11d91f561fd11f7b6"}]}, + {mod_esi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e83eabd7527ed663b93fd5a58a587be4"}]}, + {mod_get, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8dd5d81c6a7cc426524180332edb7a14"}]}, + {mod_head, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a62a5beb75a1b60206669499f77130e"}]}, + {mod_htaccess, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bf3f03a28de0bf786813fc181fdb85f"}]}, + {mod_include, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"145c3dccff68b053b1db14d5f92488a2"}]}, + {mod_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5417983275ff4ded18c546c70b8cc7e5"}]}, + {mod_range, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03a0b6a05ae0fd306c5b3f20bb6e05b8"}]}, + {mod_responsecontrol, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ebe00aaf53af7508dabc9d09b949a0b"}]}, + {mod_security, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"423eb8f57b9a8bde28e3da13db3de59d"}]}, + {mod_security_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cca3960b3899a1a7a4581afc69d7a5cc"}]}, + {mod_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62fba170a84e8fdb39c8744f64b37a64"}]}, + {tftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ade4b7390488800507debf97307bd963"}]}, + {tftp_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67a1747702ba0bff57a6f8aaa883b9d2"}]}, + {tftp_engine, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb9e0ee93bfa57bd7ef5a038c23edecd"}]}, + {tftp_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48fd419a1467c45c1e7057cdbb59a0a7"}]}, + {tftp_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f666dd774c5c60c7ff175b19ade12b2d"}]}, + {tftp_logger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"151ed197576a35d060b7bbf3c74bdf7f"}]}, + {tftp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7fc8de866dbc9c30b3d91a8adf8ebf0c"}]}]}]}}, + {application, + {ic, + [{description,"The IDL Compiler"}, + {vsn,"4.3.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin"}, + {modules, + [{ic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe764abce09fdd454d880128d9ddda2c"}]}, + {ic_array_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"227ce84fee6671f9cdf93fb8048f596c"}]}, + {ic_attribute_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"975e0b45c8a9ce1cb4551fdfb76cbd11"}]}, + {ic_cbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43ac10b9d3c5142c747d99c3b9dad4d7"}]}, + {ic_cclient, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73ec31c28859c6c5d6e5dc91b6ce5411"}]}, + {ic_code, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02d51ffcaef78b26a0bc8c680938fb53"}]}, + {ic_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41159947a7c4259a58fec12f96d02d69"}]}, + {ic_constant_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ca029a6c4023f792cdd8fb9052241416"}]}, + {ic_cserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf63d17869ccb762e0edab496be39e09"}]}, + {ic_enum_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab555fa7842eec8c99e22d11060e6430"}]}, + {ic_erl_template, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04c3d10872a5ab6edd781ae24512b6aa"}]}, + {ic_erlbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"add3f7151efb782e2437bb626a7d51fd"}]}, + {ic_error, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6379a791ac55b3542b5db5a1e329439d"}]}, + {ic_fetch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bdc5454c6fe20b3a28d3a10ea4a7b3ed"}]}, + {ic_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6597963c839cab5b5591eb1dcaa6a9a1"}]}, + {ic_forms, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bcfeec18c0f2bc54dd64694b0f6d82e"}]}, + {ic_genobj, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97c379af6629a74a7b70c60e6338a245"}]}, + {ic_java_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40d0d5d7707b0d63119fdc658f7f3084"}]}, + {ic_jbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e2429e630ce4f7dad22af0d4ab242b7"}]}, + {ic_noc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8e61ad2dbb06818f812f1a3dcf0f16c"}]}, + {ic_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9f64ecd00b68edfcf38b61e79bd0b80"}]}, + {ic_plainbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"44ee00595baf6554efbdb45d3ee28937"}]}, + {ic_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"857d2fb9fea30b14657b1c4a86d08386"}]}, + {ic_pragma, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f69abbe96dd3cbebbff573664fe0997"}]}, + {ic_sequence_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdf12c1c5c020249ba9966ed529e5062"}]}, + {ic_struct_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4120b045ef93f4db9bea6c9f14180ca6"}]}, + {ic_symtab, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c8ba1bfdd061a5e6864f86c957d6408"}]}, + {ic_union_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9b140a193c08210aa09a4484d9a54f3"}]}, + {ic_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6ce2a93793c15e09c8e18ccca534772"}]}, + {icenum, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a53766074b7015a3bae4631d87f017e7"}]}, + {iceval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d60924eb402c253265ef229824856baa"}]}, + {icparse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2a14e584b40aa5b9e79c5f3101dfb3e"}]}, + {icpreproc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14b63dc40d8160ee25e0f829a0d088c6"}]}, + {icscan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c8e2841047e577935f05c0b5cb10b02"}]}, + {icstruct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3fc6b7d763b490773a0c893a541b3d3a"}]}, + {ictk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00ad73c637ec333d51a0905c46381eb0"}]}, + {ictype, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8cfb0ed8d61bdff82302c4b52716ebf0"}]}, + {icunion, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db222ee3335d7b431061d104f6ecf9b2"}]}]}]}}, + {application, + {hipe, + [{description,"HiPE Native Code Compiler, version 3.10.2"}, + {vsn,"3.10.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin"}, + {modules, + [{cerl_cconv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3f8e5afb7f644e20ecc93eff288091d3"}]}, + {cerl_closurean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"598014277bdc97eb3e42db827964786c"}]}, + {cerl_hipeify, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c67cb3c827232c389de98edcb669a6f2"}]}, + {cerl_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81c8c4cc2fddba367e557bb8fa3e46b1"}]}, + {cerl_messagean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d45d1cf2112a30de90c6e02674b471f5"}]}, + {cerl_pmatch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"592ae9106c429413eef5bca3404a312a"}]}, + {cerl_prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c10b7a51c482eaae5d5bb5156072faed"}]}, + {cerl_to_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"975ca9009d46f139766227e24f00167b"}]}, + {cerl_typean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2407a7ab5367d3d2112283c1ddfc53a2"}]}, + {erl_bif_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0a6c9083ace0be207cc54681c6cbf565"}]}, + {erl_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"42d756bf4eaf470785a1b81838979af7"}]}, + {hipe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"32e6ef5c8585a438373c41e5a5d75d91"}]}, + {hipe_adj_list, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e5bc155da44d7631411dfc1a02fec2ef"}]}, + {hipe_amd64_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1647b309190377cb226db1314fcac5cd"}]}, + {hipe_amd64_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d3829c95a7eed25abc393e29da9bbf19"}]}, + {hipe_amd64_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"49079178cae281b4645ae6f25ce18838"}]}, + {hipe_amd64_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4476b9c0703b2a8473aa502dc6bdada8"}]}, + {hipe_amd64_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"9fab826ab4bd5d716173c1f3b3b4d347"}]}, + {hipe_amd64_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"52b41c777e65aeea7e35a9321585d34a"}]}, + {hipe_amd64_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4eb339172dae5c27d67b4410de84f51f"}]}, + {hipe_amd64_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"73bf464fdfd7cf668efdffc3fc78c352"}]}, + {hipe_amd64_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7bc4f317d89794f58a1a0bda3b599879"}]}, + {hipe_amd64_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5c0509cfd228b140247a46214243a415"}]}, + {hipe_amd64_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6a50f0f7d1c454c50975d6d0b3eb3c4e"}]}, + {hipe_amd64_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1ed593df4c9da2fe96da00274117f1b4"}]}, + {hipe_amd64_ra_sse2_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"277417561a1fed88867bfdafe9e1c580"}]}, + {hipe_amd64_ra_x87_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8684b37d2d952516b2f8e77426decaf2"}]}, + {hipe_amd64_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"02db134b8e57405134b8e68a9f0588d3"}]}, + {hipe_amd64_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c66c33708abe9f32d36337c358a73530"}]}, + {hipe_amd64_specific_sse2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f0e4d5df03612b82d8cffecd5f9d4a84"}]}, + {hipe_amd64_specific_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3a28b90d577a9db6ef4b70d9defbd863"}]}, + {hipe_amd64_spill_restore, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81a80af9658effa33fdfe85f6161a35a"}]}, + {hipe_amd64_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b55ded15ce4283908342b2824226406b"}]}, + {hipe_arm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"160cf412bbc01adfb4229f8b73a45ba5"}]}, + {hipe_arm_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"62390a02348b3abffcb4502ff1b2b9f3"}]}, + {hipe_arm_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"30d169daa65fe2104260b4621d500e17"}]}, + {hipe_arm_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c464aa34b089a594edfc1cdb7012f39c"}]}, + {hipe_arm_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ee3833e47107f465b35e3d9a255d0447"}]}, + {hipe_arm_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"74ce09dca62bfdfdbe0f667075f78c35"}]}, + {hipe_arm_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e46614b822aafd6233af080377bc8729"}]}, + {hipe_arm_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"19888211ce56a0eb039578ea485a7776"}]}, + {hipe_arm_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b745515f7f9a5b4dc2e3f03f8dba82c3"}]}, + {hipe_arm_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3b5de0ec46bf573c64151697e03dcbeb"}]}, + {hipe_arm_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d129dfc23327601b4615e91f849c214f"}]}, + {hipe_arm_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cdeccd5062db370b87cb350b317c041a"}]}, + {hipe_arm_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fd59b7eba19bd0985bfc527377e815ea"}]}, + {hipe_arm_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cbbdef9b7829ce07fc482451a8f7c7a8"}]}, + {hipe_arm_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2a3a8e58a6ba75ca3902348a5b43ec79"}]}, + {hipe_arm_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7bd890ef97657715f12f031658d4c9c4"}]}, + {hipe_arm_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"611f5b731b1c7fa6f589010db3443a81"}]}, + {hipe_bb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"66afe906c353f43505649b33dfed45a9"}]}, + {hipe_beam_to_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"826bf8aa6513c06c61e08faa9383b4fc"}]}, + {hipe_coalescing_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cf5f22f7e27c8ba6a1e73e29900fb096"}]}, + {hipe_consttab, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4a430042156f62e55b404d38b82ef6c1"}]}, + {hipe_data_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7843ffb243b1c8d66351c1452fec1cf5"}]}, + {hipe_digraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3caa6181724dc59e70a3c5ee5b886233"}]}, + {hipe_dominators, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4f7038336d002e637edb3b57cc6b7293"}]}, + {hipe_dot, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0218e226a92b4a444c90b4c18be48c76"}]}, + {hipe_gen_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"75a06ae623c2dd5a78903d11ba61cfd6"}]}, + {hipe_gensym, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1b5a357fb4e6833e55b574343d116217"}]}, + {hipe_graph_coloring_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e25c88384aaa7b7a16c5849b31db4fcf"}]}, + {hipe_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"899c47579553070995c5701f16f2c1ca"}]}, + {hipe_icode2rtl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cba4203ea542c9abfac6eaa92cb269e9"}]}, + {hipe_icode_bincomp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4e211977eb23242d6a2bf0b099eff090"}]}, + {hipe_icode_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f79f8f10f1aaaf4280abf06cfa40d56d"}]}, + {hipe_icode_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ca9529e58b378b731ac6aac84218e2da"}]}, + {hipe_icode_coordinator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3a1caa6d31d48a3fb311a2ea97f0c30c"}]}, + {hipe_icode_ebb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b6b088a13c02a03e5a28247be6d45b94"}]}, + {hipe_icode_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"40dfad7ac3602fece6bb4b5a8c9ab98b"}]}, + {hipe_icode_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f3fcc6b3d555dfa882e7483eb64a6571"}]}, + {hipe_icode_heap_test, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fed11d612f8f3da9ea1e4cc67389eff5"}]}, + {hipe_icode_inline_bifs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3027c916d2ecc9762123585e1d91f467"}]}, + {hipe_icode_instruction_counter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cf488cc5eb29636045d2880b33254711"}]}, + {hipe_icode_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bb99ee17bd466d1b802a42b0583e26d7"}]}, + {hipe_icode_mulret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"323e6103d2511e5bd4a87ad2b4dcf3c3"}]}, + {hipe_icode_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"56edb2552a5c36757005cebd6196f7ce"}]}, + {hipe_icode_primops, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3f14ad0079bdc8cf1feb08c6c2da287a"}]}, + {hipe_icode_range, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0040719dd6effa173e861e4eb0e3cff6"}]}, + {hipe_icode_split_arith, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5575b7299b149e93d358fdeccc999652"}]}, + {hipe_icode_ssa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"090ca01ba76f97f346c6fb260751cad3"}]}, + {hipe_icode_ssa_const_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5944b123b3fcd4b0839b316ee68ee36d"}]}, + {hipe_icode_ssa_copy_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"997be266f8aa90058e1cc47807628ab4"}]}, + {hipe_icode_ssa_struct_reuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8fbe27064d4bb5a27507564d4ace240b"}]}, + {hipe_icode_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cd5755e095fcdc667aa925440a072104"}]}, + {hipe_ig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"023433ebf566fdd844f091a0d35af764"}]}, + {hipe_ig_moves, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b1d86094e8232686f4e234cca76178c6"}]}, + {hipe_jit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d52c6fa1354f23d6c3234f2ba0adb467"}]}, + {hipe_ls_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"af8f6022eafbf853ada08fe69e9509ca"}]}, + {hipe_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c5c32cf830833284942651c29d48e796"}]}, + {hipe_moves, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4b6be3fb7b1fd8acaa60cf09a34ab92"}]}, + {hipe_node_sets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8f506e9e71db4336c1ec699b1335dc17"}]}, + {hipe_optimistic_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"43cd34d83f3c513ee455a446628c39eb"}]}, + {hipe_pack_constants, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"09e240bfc2522acbaa543f356a28f9af"}]}, + {hipe_ppc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b4a1ef1f5d56e249be91954a55b35b5c"}]}, + {hipe_ppc_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"be62cec21a026c5385d2482369ac59a0"}]}, + {hipe_ppc_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7d0362cb062e78fb25852d9fcf943371"}]}, + {hipe_ppc_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"45a4ac6be649d5ebd584abd44704addc"}]}, + {hipe_ppc_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fb5b41996c46e440e0292565c786d9a2"}]}, + {hipe_ppc_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1475ac44aff754105fdd4e85687346ab"}]}, + {hipe_ppc_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1fd18b642e945b3f6b384549c810f5c6"}]}, + {hipe_ppc_liveness_all, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5194b99327e725de7a0c94abb4d35974"}]}, + {hipe_ppc_liveness_fpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b3958a1138f1f112f5ff4b357520fa4d"}]}, + {hipe_ppc_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fc4585d446b47d4151671b7bc83f86eb"}]}, + {hipe_ppc_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ec4dd9d536fb6aa5cdb418dded96184b"}]}, + {hipe_ppc_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c37b9de73810ceeaca37bc0520a76884"}]}, + {hipe_ppc_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"db4deb5ea2a237ff1e0984f7979e5d3f"}]}, + {hipe_ppc_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4376f33857d9cb0cea29ff783ea82cf"}]}, + {hipe_ppc_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6ba2df5f54c48dc90c42547e8bd2ca48"}]}, + {hipe_ppc_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ba3d03b4267f315b10ed939a37d4597c"}]}, + {hipe_ppc_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a9d4ca393bff97c1931d0eb18d38a811"}]}, + {hipe_ppc_ra_postconditions_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"742e3f111a16eb5ca003f1a97804e5a9"}]}, + {hipe_ppc_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"40dd287c6853767e7083a8c5549681ce"}]}, + {hipe_ppc_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d5e2330aa55edd677ecf3e77bf659781"}]}, + {hipe_ppc_specific_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"34a6f358c60c47ebec7956b66205062f"}]}, + {hipe_profile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"210939fd9ea20991d7fae07b12348d35"}]}, + {hipe_reg_worklists, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ee79fa6eb3bca9a4f0025d9e4ce02a72"}]}, + {hipe_regalloc_loop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"19fc9f539fd5abb2ecc5aeaf6c2526db"}]}, + {hipe_rtl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2ab93246a0c75f83327de3e0234dbe08"}]}, + {hipe_rtl_arch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3481cc7240b928da18df9e61214ceb25"}]}, + {hipe_rtl_arith_32, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"328deb7987296b869279c7c0d588f337"}]}, + {hipe_rtl_arith_64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"64cc932e691e7743d06642103170de55"}]}, + {hipe_rtl_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"198df75c4eefcd2b7a7f769922d4ce60"}]}, + {hipe_rtl_binary_construct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7a1b57215669ed36c40b335e6826be2c"}]}, + {hipe_rtl_binary_match, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1c22996f5b79a3818503a19059bdaf8e"}]}, + {hipe_rtl_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"60570bb8a1cbde7c72ad1c37e2b8e17d"}]}, + {hipe_rtl_cleanup_const, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a555a1c325dd9b3ae1775881af8abfad"}]}, + {hipe_rtl_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6c7f64efbed1c8e51f2323fa693d3b89"}]}, + {hipe_rtl_lcm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bd3735cbd4bc9eb9254b0c2ee67cd1ad"}]}, + {hipe_rtl_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0dcceb8fd82c12480e42399dd2869c41"}]}, + {hipe_rtl_mk_switch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8890cf7e39302f57f3adf8987755b34c"}]}, + {hipe_rtl_primops, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c734e269cbc4be78cb3fe47fa55053a5"}]}, + {hipe_rtl_ssa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4d9ce36d8dc1168eecf173bde8a0871a"}]}, + {hipe_rtl_ssa_avail_expr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ef5653db422ed4115c734d9676f3b030"}]}, + {hipe_rtl_ssa_const_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"598dee97d9fd44735a534b250bf60e2a"}]}, + {hipe_rtl_ssapre, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"93b3ea7957d2008d763bd4416ef98277"}]}, + {hipe_rtl_symbolic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4e6b19de45d978326014a378368a6f8e"}]}, + {hipe_rtl_to_amd64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6afb4d232649b0a0ee54e5a4859e85ce"}]}, + {hipe_rtl_to_arm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a12eb244baec0e0bcd2d39353ac69b90"}]}, + {hipe_rtl_to_ppc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"521f595296e6c1bf0b7d1caf59bbfb77"}]}, + {hipe_rtl_to_sparc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"66783d3f670bd939159b0abf3548dddc"}]}, + {hipe_rtl_to_x86, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2b4ebecd4e2fa29e952c650809ec89b6"}]}, + {hipe_rtl_varmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2b1e6ba5714a0764c0897a780fb38c8e"}]}, + {hipe_sdi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c305600fbb8905b9b0cf792f2f85ed72"}]}, + {hipe_sparc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6a5cf680abe539d1dfa669cb52ce1f80"}]}, + {hipe_sparc_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"330f4c7130dc215c911ecfd48d9dedde"}]}, + {hipe_sparc_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d8278464e9d1d65437625517255ae2ab"}]}, + {hipe_sparc_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a7f131d52962288326e844f28d13d4cc"}]}, + {hipe_sparc_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c1b5971e5e6f3304bcc00f1abeb268f7"}]}, + {hipe_sparc_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"22d88316138d80c3ecf41ced21ec25cf"}]}, + {hipe_sparc_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"623fdaf78bfaff2b07733eb4a211f79b"}]}, + {hipe_sparc_liveness_all, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2bd5c26371c946fdbf9c1530c1478ca1"}]}, + {hipe_sparc_liveness_fpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7dc401039841503524934a1b97990c2a"}]}, + {hipe_sparc_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4c5e32e6adbbc37b4f793e8bde52ab2f"}]}, + {hipe_sparc_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3c063c4c5b1bd8ec02c6ffe60c561056"}]}, + {hipe_sparc_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f89846e24afb3795d259291e4613c155"}]}, + {hipe_sparc_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6925c18182b17ee978041e26fbf490b3"}]}, + {hipe_sparc_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"45cef8c32ae3b2f6f01911592016924b"}]}, + {hipe_sparc_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2eedc8b13aac2efcd2e3649afd845d02"}]}, + {hipe_sparc_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81f0a231c4bde04b132bdb6748774c10"}]}, + {hipe_sparc_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"549d7dfb54dce00bb7f5317306694308"}]}, + {hipe_sparc_ra_postconditions_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"9de491abdbbc1c156a20a692d463965b"}]}, + {hipe_sparc_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1a4dd5b6dc938d539fead6b1ad9e2ba0"}]}, + {hipe_sparc_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"809b836428fcb194565eeee86ecf138b"}]}, + {hipe_sparc_specific_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4bf2be9b351b82024e81eabfd68806f9"}]}, + {hipe_spillcost, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b9ef65406aa671e28d1bd8428f102fe9"}]}, + {hipe_spillmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bde0ad7813cb8f86fc4ff110090af2da"}]}, + {hipe_spillmin_color, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e277f11303f44d6ea07be695c1057d7f"}]}, + {hipe_spillmin_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b007825bb206e086b9ffc943213aa625"}]}, + {hipe_tagscheme, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"568fc377e498aec5a73e1b2c9cd29432"}]}, + {hipe_temp_map, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"56dff1fb8175d1d7c32f7e8d95e10488"}]}, + {hipe_timing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c3238c3b4adc08c290c37ba1ea7d3a31"}]}, + {hipe_tool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f93194221b0e3756c9f0f70127b205bd"}]}, + {hipe_vectors, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4e6ef55b233f27c27bd2f781baf9c94"}]}, + {hipe_x86, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"051e4ee3dd5298e2cee05b1fca82e64d"}]}, + {hipe_x86_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d1829f13a89049280e7cb22cd394af0d"}]}, + {hipe_x86_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b9d6a090c32c03e6e91deac9bbb167ae"}]}, + {hipe_x86_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c81bb7a0dd72b256c57fb37042de68ff"}]}, + {hipe_x86_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"386d1abc98765c09c6bc6fe44cf2748d"}]}, + {hipe_x86_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"db2a440f5975688c7bf9a88c47aaf627"}]}, + {hipe_x86_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8783c19717dda46b566c465ba85b2588"}]}, + {hipe_x86_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"236cd462abe386223cefe606b4f48928"}]}, + {hipe_x86_postpass, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"57e5cb6ad12dceef612122c8f759ac15"}]}, + {hipe_x86_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6efd3b5cd8c70edbd326ffe9457a3192"}]}, + {hipe_x86_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1e8b7f27a05e1e7fac9ea95cdd394909"}]}, + {hipe_x86_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4a3c30788866a5e997e0a1687279732e"}]}, + {hipe_x86_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bb13a4d08391fe3f212fa4eba816029b"}]}, + {hipe_x86_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e26c0711db5e891c86b64da12fe064ff"}]}, + {hipe_x86_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e3d6ad622a3017744106b653324c0edb"}]}, + {hipe_x86_ra_x87_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a6092f1853a7a04f8d16228f6183dcc0"}]}, + {hipe_x86_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ce77b4ffff06c9532943ad5f6907b18e"}]}, + {hipe_x86_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ad074b1e645c06c2137a46cd19f88b72"}]}, + {hipe_x86_specific_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a20c2c2b1742aa084dbb7395a92b650d"}]}, + {hipe_x86_spill_restore, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"88e191ef5057ea6a50c75af85c814013"}]}, + {hipe_x86_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6edcc888c87ffc96414a8dce57d691da"}]}]}]}}, + {application, + {gs, + [{description,"GS The Graphics System"}, + {vsn,"1.5.15.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin"}, + {modules, + [{gs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9d416ae60d6cda2ea55a05dbde8a53f7"}]}, + {gs_frontend, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb02484f42ac799bdd086f6832b72330"}]}, + {gs_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea7a1edc4bd5b9867ce924130851f295"}]}, + {gs_packer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c5d911152526836f3487cd3de6b0bf9"}]}, + {gs_widgets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2efa721783d863bca4ff2e116c9593fd"}]}, + {gse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9355057cfe2b70da376f208739bd7c06"}]}, + {gstk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684b9d8f370368e25ea2ca2ac708c1ee"}]}, + {gstk_arc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1cd1114560c3839fb84380975d61d68b"}]}, + {gstk_button, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29ce4f10fe8dc2bb85649018aa64d71a"}]}, + {gstk_canvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a637d6932415873666ed040817ed2a72"}]}, + {gstk_checkbutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3cad265e62fb4cbeda02c089b5b309bb"}]}, + {gstk_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd236aeb7ff4658fd1a9d1302602a7af"}]}, + {gstk_editor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17dd7595545d33bb3143ac3995711b39"}]}, + {gstk_entry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2740de840e6b8871909dfedd96d4b5b4"}]}, + {gstk_font, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc2fef06167d48c71cc434fa7411ca95"}]}, + {gstk_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5113cb91ebb88a4cb1a0b4cb7665607d"}]}, + {gstk_generic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d392d9f2e6c6220245cff065e99a3f5"}]}, + {gstk_grid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61def27e9610041778245948e5f82be1"}]}, + {gstk_gridline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40c7173521b57e4c9243ec5258f65d6d"}]}, + {gstk_gs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c9ab7ac782c3e36e201d4760f37e478"}]}, + {gstk_image, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50a6a6b41de78e4f06b0c98cba97992a"}]}, + {gstk_label, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00b5826ce30fc11e417a7a43f0c7e563"}]}, + {gstk_line, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7785bc56e2f32b575a4240a60994d62"}]}, + {gstk_listbox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"053218bec49478a8334df6b0818e981f"}]}, + {gstk_menu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ccf11b45fdd908fafb781c897d379370"}]}, + {gstk_menubar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e801f2c6eccc8258d719028b706ec624"}]}, + {gstk_menubutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fc2d88da997bdc39a24f3f0db9963b3"}]}, + {gstk_menuitem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a4442a7307d34c544783c9d22433135"}]}, + {gstk_oval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f4775c1b7522750f395f28a94eefe453"}]}, + {gstk_polygon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdc96f316574995486c842b612722e25"}]}, + {gstk_port_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"95ec5d20c905e8cc7fef2df5f99ceb88"}]}, + {gstk_radiobutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b67bb9cafd3bf67b210d7b0e0b1bd992"}]}, + {gstk_rectangle, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6bf1f8e7953532468393090fe8d56ba2"}]}, + {gstk_scale, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"848c7ee845d1a59a0a7c4775f64f220e"}]}, + {gstk_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"719252f8d069544886ec473e16688530"}]}, + {gstk_widgets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29b540f4612eb1f1e65123f08809bee4"}]}, + {gstk_window, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"746a06674df1cd96678689e6ab92a95a"}]}, + {tcl2erl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f67bcc59683d0c578cba1c0062ff6b3e"}]}, + {tool_file_dialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3763cc96ed8e2a6136a4c15e54a9adee"}]}, + {tool_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"96edfeab61de9b40618e7808d62225b2"}]}]}]}}, + {application, + {eunit, + [{description,"EUnit"}, + {vsn,"2.2.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin"}, + {modules, + [{eunit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"800601aeceaf1de519df273ca25741b5"}]}, + {eunit_autoexport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48f889ffaa560238fa2269614f93bbce"}]}, + {eunit_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed89782dac4c2b21da64d92bf74f1e22"}]}, + {eunit_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"949ed8c5f494a8678c6f29775a7b5154"}]}, + {eunit_listener, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f107b19b4ecf45031a93afa5ace611f"}]}, + {eunit_proc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfc2da427b2bf7ba843f6b8d8121e2c9"}]}, + {eunit_serial, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f07a040ebbba4af90fa9668c410befba"}]}, + {eunit_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0842dedb36c3b1cd91229a7e4abfe328"}]}, + {eunit_striptests, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"473b48509d28519ba18cfa83a8dea8b4"}]}, + {eunit_surefire, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e6a5cebf210cdd8a558cd32b96ac13"}]}, + {eunit_test, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc3897e05a5146b24c109fbc5da83e86"}]}, + {eunit_tests, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d2b6b165201e0aad13a8d8f4d542f59"}]}, + {eunit_tty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4faaab287e1fa52837cdfd1b58c7faf"}]}]}]}}, + {application, + {et, + [{description,"Event Tracer"}, + {vsn,"1.4.4.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin"}, + {modules, + [{et, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82db3e8683420a2adb933306c8c822e8"}]}, + {et_collector, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd43f7a22b3c3e6a1799a88163c3d441"}]}, + {et_gs_contents_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"44e7ea855be084e48cd364735d79f5f7"}]}, + {et_gs_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4ef2a5673c20444b198bdc185cc637a"}]}, + {et_selector, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"267f60d2ecdad671eae269cdd2ff30f6"}]}, + {et_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ae9af3449c17f045d25ca424e9873ae"}]}, + {et_wx_contents_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d14826378988286a32fc85ca4246325"}]}, + {et_wx_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"87f45e31d50a82d9db2443ddff14ad22"}]}]}]}}, + {application, + {erts, + [{description,"ERTS CXC 138 10"}, + {vsn,"5.10.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin"}, + {modules, + [{erl_prim_loader, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"719e5362c7c1f0d1fd96601b7f814981"}]}, + {erlang, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b2444affe04bb9287d86e0e0c80578"}]}, + {erts_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a95c0409fe7b4ccf6e2fe509bfd23da8"}]}, + {init, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55bb9fddcdf820938be2efee15eccd82"}]}, + {otp_ring0, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47fe4e7e2d2a5f20cd3a9393e0743e57"}]}, + {prim_eval, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16d4fc3a8e5e2ef7200bd866fe8b1abb"}]}, + {prim_file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da0745178ab8aa8fb8d3a373970ebfdd"}]}, + {prim_inet, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4993598825a1083526cbc23cf027f494"}]}, + {prim_zip, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9280fc2398f9eb3bd09f74cfa1d6d267"}]}, + {zlib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"811834d04ac37676048717e1c51f63ac"}]}]}]}}, + {code, + [{path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13"}, + {modules,[]}]}, + {application, + {erl_docgen, + [{description,"Misc tools for building documentation"}, + {vsn,"0.3.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin"}, + {modules, + [{docgen_edoc_xml_cb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29c8b94e559528ca0aeacee089f52bcf"}]}, + {docgen_otp_specs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6d53404b1059d2da87ce44bee49d2dd"}]}, + {docgen_xmerl_xml_cb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"274ef03ec5cb146346fea794e77febcf"}]}]}]}}, + {application, + {eldap, + [{description,"Ldap api"}, + {vsn,"1.0.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin"}, + {modules, + [{'ELDAPv3', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"655b60d1b5b0629024e2a78708c64518"}]}, + {eldap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df60096d034768188e0fd6eaa0fd571c"}]}]}]}}, + {application, + {edoc, + [{description,"EDoc"}, + {vsn,"0.7.12"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin"}, + {modules, + [{edoc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2749685cb80a536ad42426933220065"}]}, + {edoc_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a444b7ae3acc249aac7fe40b38355af"}]}, + {edoc_doclet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77b3ccaf177983dab1991425fd3d714b"}]}, + {edoc_extract, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9effef62cfe9939a4c80b43b86041c6c"}]}, + {edoc_layout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2b79a133f490b4de09b13f7519d37dd"}]}, + {edoc_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f421fb61a9b2c711d5fc28387b0ffd0"}]}, + {edoc_macros, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddb1e78cf2ddd20aadc87329067286f3"}]}, + {edoc_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02fe39575dfda2cffd6031f6c8f470eb"}]}, + {edoc_refs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a3ba4e7f5211445d74a4d19bc4c5963"}]}, + {edoc_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfef03c1f2c7de294972d0ad185a3a11"}]}, + {edoc_run, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0db629008caa57ebafde1dda9672306c"}]}, + {edoc_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165a8e826f458ac6de7c50c395d012df"}]}, + {edoc_specs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21a5746822e2ae01421fb064d9c8ccfd"}]}, + {edoc_tags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9ad335a1ce6b99189cfbfaef2ca2038"}]}, + {edoc_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84530d798ce334278df4dea8a69098f4"}]}, + {edoc_wiki, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eabda8c28daf0cdc040eef58f31cc6a8"}]}, + {otpsgml_layout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a511240c5864dd31d4df687465e355f6"}]}]}]}}, + {application, + {diameter, + [{description,"Diameter protocol"}, + {vsn,"1.4.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin"}, + {modules, + [{diameter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2fdb2feddc71bda9175711150823325"}]}, + {diameter_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6dcc769947f323a9ff306c9bcab4dd2c"}]}, + {diameter_callback, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8c76e1ccf47e3c781cbdf3c8d3e293f"}]}, + {diameter_capx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"65e483a5f121d99db830329f3dc050cb"}]}, + {diameter_codec, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bd2e1ef215e88519ca3865601e479dc"}]}, + {diameter_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33696e30585762fe29ca103d67ffbb04"}]}, + {diameter_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76e885acd24a697d19b07ce5446f5c2b"}]}, + {diameter_dbg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0954c1f71a204a0f2c8b3682d520c704"}]}, + {diameter_dict, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ed21a8d2eea031aa736e95870a7a165"}]}, + {diameter_dict_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c90e506d7eba4f18547238b8f025ce5e"}]}, + {diameter_dict_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b3fc9ee26b660a97ad67b4c8728a0b75"}]}, + {diameter_dict_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70475203e0968747889eecc533af3f0f"}]}, + {diameter_etcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dde08c8d8311e2700c59b741274923fb"}]}, + {diameter_etcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"85fc8320ca9eb8daceb03727bdadb6f8"}]}, + {diameter_exprecs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"728aa8871c778eacc02313d922dde7ae"}]}, + {diameter_gen_acct_rfc6733, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53fb49bb8c354f36d6e1ad6366fe02a2"}]}, + {diameter_gen_base_accounting, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"845f38b99248c11778453b628ddb4fed"}]}, + {diameter_gen_base_rfc3588, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6cd02c8318f4ccc198bd08d1ac789fb"}]}, + {diameter_gen_base_rfc6733, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"49edd3b9955c82c872169f769c833482"}]}, + {diameter_gen_relay, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c970d47476d2832f510b6b03699c95c6"}]}, + {diameter_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"472b763fc9554c0c92992a3b36177667"}]}, + {diameter_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8d49799607d7c7792a79dbc434b4d53e"}]}, + {diameter_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"249d7f673e7f192ddff7c66b578e886e"}]}, + {diameter_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3996fa63b0e083301d35fc6d88b75ce4"}]}, + {diameter_peer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89f28d8d35bdeb8b05995daffb8d868c"}]}, + {diameter_peer_fsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df03404577882e8cfba57087c91fe3ef"}]}, + {diameter_peer_fsm_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b25500795639e63d9a591e33df6e4af7"}]}, + {diameter_reg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e7d427dafe432249d3535bc9e6ec538"}]}, + {diameter_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb7487b2c41e3520b1a46738699a88c8"}]}, + {diameter_sctp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02584b6b31789dd38493fd1a8d7d3e3"}]}, + {diameter_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e990f54abf1c8706cd7717cba717594c"}]}, + {diameter_service_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a66f4714fa96fd7d289260002851cbf9"}]}, + {diameter_session, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d348e0ca8d3c827d647c3bea8f9c7691"}]}, + {diameter_stats, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f12a18f52de33ca77dacd1bba99680c8"}]}, + {diameter_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c910b68b3d0760f595a81ca58b1337f8"}]}, + {diameter_sync, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff62cfc82b044d2300345ac7912fe320"}]}, + {diameter_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4dae7482d9a79d4ead66ef14d1c3a48"}]}, + {diameter_tcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1b03a96691e03eb93144bc50022a007"}]}, + {diameter_traffic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d351fdbef0536bba235fe102fe8e697"}]}, + {diameter_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"386e129e240e91794ff79e1da6c6966a"}]}, + {diameter_transport_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9f8da23c3c870b8a6ed8648d7aac2d5"}]}, + {diameter_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2ecf24e368d30dbef34527e2971caf8"}]}, + {diameter_watchdog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0ab7bd910bc959c0d1b64f0a2ae4bda"}]}, + {diameter_watchdog_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4b16aeb2713fd42bf5e9da7cbe43bcf"}]}]}]}}, + {application, + {dialyzer, + [{description, + "DIscrepancy AnaLYZer of ERlang programs, version 2.6.1"}, + {vsn,"2.6.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin"}, + {modules, + [{dialyzer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"929cdc37a18725b9710b9c4345c3aca0"}]}, + {dialyzer_analysis_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b679e22bb1edb9f0225b79d995342dc5"}]}, + {dialyzer_behaviours, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5fb71e7e5129b4c2f74cb529d8a745c4"}]}, + {dialyzer_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5b03b559fdab4c77a8c955cdfe7a2036"}]}, + {dialyzer_cl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79a2208b0cc03af530473d2d2f49587f"}]}, + {dialyzer_cl_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4fcced00882cfef0262398a14319c2a"}]}, + {dialyzer_codeserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5c8a1600210988f627559bc16a49a65"}]}, + {dialyzer_contracts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c002e8bcddf711ae9feef14b88f28873"}]}, + {dialyzer_coordinator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51efdc15e07eaa495060e420585bb74f"}]}, + {dialyzer_dataflow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddb43241a51460b67c67780ca6174bef"}]}, + {dialyzer_dep, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffffdcfd7edb9901be2e92b6d3a5f082"}]}, + {dialyzer_explanation, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79c9bc71edcc115a03c1bb00a4133627"}]}, + {dialyzer_gui, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec41553832cb5f49cce3b123ec763448"}]}, + {dialyzer_gui_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00f5ef9bd8202d5bc303fca27c740b00"}]}, + {dialyzer_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"713bf0249b3bb22c7461498b908db812"}]}, + {dialyzer_plt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5b1ecae532cb2887c942c6bda2c7dc7"}]}, + {dialyzer_races, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec1b2f026e1dfd438fbb48dcf16a19de"}]}, + {dialyzer_succ_typings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12a59523b727169f2f415b6e57768910"}]}, + {dialyzer_timing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b170424f433845fb9aab3e554ea61044"}]}, + {dialyzer_typesig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b6670ae353fa06c5c8a5f301a7079ca6"}]}, + {dialyzer_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cac59b9f59802633948d271fcf8ff92d"}]}, + {dialyzer_worker, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e9ff1cc342b308c73bab8c607a8437e"}]}]}]}}, + {application, + {debugger, + [{description,"Debugger"}, + {vsn,"3.2.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin"}, + {modules, + [{dbg_debugged, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78bf1d9b43c718da5e198af36cabb1ce"}]}, + {dbg_icmd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"615470a6677e03a603c24cf821ba3471"}]}, + {dbg_idb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e78e73c63bfe9149a11122857355f29"}]}, + {dbg_ieval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e49ed51a1a1e7581334308cd3c9195e"}]}, + {dbg_iload, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f249c44fee09e35262d2cafbfa22ce49"}]}, + {dbg_iserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2911ffbd531888ac6e1b96a5475436"}]}, + {dbg_istk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae44e86b7893633859292861275bdb7f"}]}, + {dbg_ui_break, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5397708044bd37bac2a6f4e24edbd30"}]}, + {dbg_ui_break_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c974a8a9b180cfd4ccbcfd31a7bb88e5"}]}, + {dbg_ui_edit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7faadd987bb74826e5f5865d725ca177"}]}, + {dbg_ui_edit_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e912e444704ad322b3e25fc6393c068"}]}, + {dbg_ui_filedialog_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06a6b13cd9bcfe7d7d203a981352cfaa"}]}, + {dbg_ui_interpret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dcf7a340530f4807d774d4c719a1dbbf"}]}, + {dbg_ui_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c79f2debfab06b86990ef7e390a61b7"}]}, + {dbg_ui_mon_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c43cdde20d4e66b6f51ef903af75250"}]}, + {dbg_ui_settings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8deedced7307e14f36cca3d9fe7e367f"}]}, + {dbg_ui_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c817c2cc2f62354d4f59be8b6e6fac96"}]}, + {dbg_ui_trace_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db1abdd3b7a7b45d3c74dbd9c48f07e8"}]}, + {dbg_ui_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b10a46e072053a225a894ed76dceebca"}]}, + {dbg_ui_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e51ec8a33c335245583f7a9ba8728f66"}]}, + {dbg_ui_winman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2056472842990c08dfdb81e56df2caa8"}]}, + {dbg_wx_break, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55c7dc041c4cd1b1da98d49def9c2b15"}]}, + {dbg_wx_break_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ad9cde7d28f7de18dda8da80d97a8f00"}]}, + {dbg_wx_code, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"27abac65970e6f7c6bbaca07e9ead6a4"}]}, + {dbg_wx_filedialog_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da924842b25d80b7b258100a4e597810"}]}, + {dbg_wx_interpret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8549ef4a5bad09472dccd1cb3ab2c764"}]}, + {dbg_wx_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09140d34a402d7183cf9dfecb0b2b6e8"}]}, + {dbg_wx_mon_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fefe3be53da62cf504daf354579d910"}]}, + {dbg_wx_settings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"350aed0cb189f0b91979fc38752fd4c4"}]}, + {dbg_wx_src_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"644bfb2c2d8fc6e9296722fef5f05b57"}]}, + {dbg_wx_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"024358a893f9b37296fc0c416074a4b1"}]}, + {dbg_wx_trace_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2348218e83d1704bcf894e71c2f3e82"}]}, + {dbg_wx_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d37489d27927cff9f19f76bc0c816c9"}]}, + {dbg_wx_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d94add4e9adade091198438a278501a8"}]}, + {dbg_wx_winman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"caa1febd36494a9088fddbd5557c503f"}]}, + {debugger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e242b76bc941785f65d1cf819fd98a5"}]}, + {i, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bebfb4e91c343a1ad89f1124b06e190"}]}, + {int, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1d4c0b2e30129359db05d3bc4df646c"}]}]}]}}, + {application, + {crypto, + [{description,"CRYPTO version 2"}, + {vsn,"3.0"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin"}, + {modules, + [{crypto, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"858d0e1779f13a6bfde511898916ae94"}]}, + {crypto_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d2de1cd4927d57e8eaa4467404c8c02"}]}, + {crypto_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17e05e4b0d772036706b76ba8f68de2e"}]}, + {crypto_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1342a18fe8d994974e41aa3e351d8500"}]}]}]}}, + {application, + {cosTransactions, + [{description,"The Erlang CosTransactions application"}, + {vsn,"1.2.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin"}, + {modules, + [{'CosTransactions_Control', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ee94b22194357e2374fe2c026d2a9fb"}]}, + {'CosTransactions_Coordinator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bca2be777e58bf130a3bf48252c0c0cb"}]}, + {'CosTransactions_HeuristicCommit', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d12c1a0988d03c64a606ba471794e3cc"}]}, + {'CosTransactions_HeuristicHazard', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79d0dc47e6759987e5b45281bc4c39f2"}]}, + {'CosTransactions_HeuristicMixed', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a77cb11ccf269fa85f2194ab16ec5ebb"}]}, + {'CosTransactions_HeuristicRollback', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67a56bf7b8084c29dd10db9daa8e08f7"}]}, + {'CosTransactions_Inactive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f94debdaa1912d18bbea77492e6fc88"}]}, + {'CosTransactions_InvalidControl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b14b9b82b831e56235c1bca1f6e02e16"}]}, + {'CosTransactions_NoTransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"24252bfbc89f79dac5c90b35e35a66ad"}]}, + {'CosTransactions_NotPrepared', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddbcd30a479a50fa2fed4b0cb019c0bd"}]}, + {'CosTransactions_NotSubtransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3904cf57a879720704d8b725802cc530"}]}, + {'CosTransactions_PropagationContext', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d0dd57873deb42ef62f2e9e8620e111"}]}, + {'CosTransactions_RecoveryCoordinator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2a670d242e21803d3a559b812b3f3bfd"}]}, + {'CosTransactions_Resource', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78bdc7f9989a5277bde7e066804fa1c0"}]}, + {'CosTransactions_SubtransactionAwareResource', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1194d19b4db72b1c571aec1847fa65f"}]}, + {'CosTransactions_SubtransactionsUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6ffc90a293248735f58984f7a9f4fa9"}]}, + {'CosTransactions_SynchronizationUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9858316a8256791e5fe66729fcd364ef"}]}, + {'CosTransactions_Terminator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbbba1c622d817538fba982cbefd4a15"}]}, + {'CosTransactions_Terminator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2db2696226a90215edb559cdae7ad928"}]}, + {'CosTransactions_TransIdentity', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d38592cd26cbbbe3a963ca77b5264ea8"}]}, + {'CosTransactions_TransactionFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04db55c2ba8df7975e98e1c7b7582bb6"}]}, + {'CosTransactions_TransactionFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d8ff8a2434c10c4716b1b59aebbcb9e"}]}, + {'CosTransactions_Unavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a77c05d98c0c72e2f1d52a1f781a1b98"}]}, + {'CosTransactions_WrongTransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c836d95954f2374d89bfc9ff2bd86793"}]}, + {'CosTransactions_otid_t', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e903c81e783cb34153bbca99e047870"}]}, + {'ETraP_Common', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea5d3e59af9cadcb5587cc42fc750470"}]}, + {'ETraP_Server', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8592fd689bdae07056a29bd258293371"}]}, + {'ETraP_Server_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f192b40f501fd2f5fb3f92b21c5e9d3"}]}, + {cosTransactions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d83a1fd7da7dc0b87658efe3039f484"}]}, + {etrap_logmgr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91577f644192b682cb8739b9ce7ac7ad"}]}, + {oe_CosTransactions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f6c79ffe50eac0c3ced0fba1a8c08a0"}]}]}]}}, + {application, + {cosTime, + [{description,"The Erlang CosTime application"}, + {vsn,"1.1.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin"}, + {modules, + [{'CosTime_TIO', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77717ab85418c3c1599b3238c879b770"}]}, + {'CosTime_TIO_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ce85958b051f2f97925e980f56115e2"}]}, + {'CosTime_TimeService', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a92a3fc07bfeeae58a57075ecddb5ac6"}]}, + {'CosTime_TimeService_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0885fbeef5bd4f72920ae716f0c73d54"}]}, + {'CosTime_TimeUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ee0570f9b91eece7560cc1b6146f784"}]}, + {'CosTime_UTO', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"799ddc99175222b61965c6c8e66e5cb3"}]}, + {'CosTime_UTO_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"552c29f5ece131368c121b5a14c3ae06"}]}, + {'CosTimerEvent_TimerEventHandler', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76961fc9eaae9e46950b5eb52fe62ae3"}]}, + {'CosTimerEvent_TimerEventHandler_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a69e243a494b80eb34b37456f2b1f855"}]}, + {'CosTimerEvent_TimerEventService', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62c54aabe64cb28b1245eb80f6b9190d"}]}, + {'CosTimerEvent_TimerEventService_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6926dd7faed0366772908c8593691e"}]}, + {'CosTimerEvent_TimerEventT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74b7db88a5dd4f17c263683a80bcfe3b"}]}, + {'TimeBase_IntervalT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c8f966d02c9520f2d3a4f024892ded3"}]}, + {'TimeBase_UtcT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15f72a9538e725e68e375f3d638c1b6d"}]}, + {cosTime, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c96cfbcafba8c9df1a9b57b7e09c4d8"}]}, + {oe_CosTime, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e607ddba4a35690c39bfcbb1fa3e044e"}]}, + {oe_CosTimerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39f960f5b9c079eaecb87e75d9f90f2b"}]}, + {oe_TimeBase, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"764d088e21dd985285d4ccfd723959fe"}]}]}]}}, + {application, + {cosProperty, + [{description,"The Erlang CosProperty application"}, + {vsn,"1.1.16"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin"}, + {modules, + [{'CosPropertyService_ConflictingProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67353514e217df9f5a5c5e0d3e97d9bd"}]}, + {'CosPropertyService_ConstraintNotSupported', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce577ca5520194130903c063d8f2211a"}]}, + {'CosPropertyService_FixedProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ef0b79fd5dbcb18f7b9c94f941678e2"}]}, + {'CosPropertyService_InvalidPropertyName', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd173257499295fbdc728d60fd14af92"}]}, + {'CosPropertyService_MultipleExceptions', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3004385ac63dc6aa52bcb2aa46818f0"}]}, + {'CosPropertyService_Properties', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"172b757c8a881b79146f50d9f3da1ea9"}]}, + {'CosPropertyService_PropertiesIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37fa8c7f1e5ab4798845a1b101835900"}]}, + {'CosPropertyService_PropertiesIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"728fabf6239161186aa9f574ad27fbd6"}]}, + {'CosPropertyService_Property', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a912eb5a31517a6f94ee3f8e3b898ece"}]}, + {'CosPropertyService_PropertyDef', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8ea474f53418bda870c1f98c522d15b"}]}, + {'CosPropertyService_PropertyDefs', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c997a6a4db17765d72f52953679fc7d"}]}, + {'CosPropertyService_PropertyException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3600a7d77fe924d3883a003b68ab8902"}]}, + {'CosPropertyService_PropertyExceptions', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a516b05a720966d4a3568f7f087f22cf"}]}, + {'CosPropertyService_PropertyMode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b1e1e285b3a2b01a12e328ed94a65225"}]}, + {'CosPropertyService_PropertyModes', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed697876aa56c111eee5733379303ef3"}]}, + {'CosPropertyService_PropertyNames', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39684cd186c7d8da459f9d17637606a2"}]}, + {'CosPropertyService_PropertyNamesIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97b170d84779dcb7b98460588de428e3"}]}, + {'CosPropertyService_PropertyNamesIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e06e012106df3651db1e9d52472bebd3"}]}, + {'CosPropertyService_PropertyNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86c83ceacb0b80d4ffa6042cfaec025f"}]}, + {'CosPropertyService_PropertySet', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffbb0b6b88d4a35cd836322dcc2b4603"}]}, + {'CosPropertyService_PropertySetDef', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"429c3ed48018cc6eef3d28c2407fa42e"}]}, + {'CosPropertyService_PropertySetDefFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86da518b687db630cd85921ebe96d07a"}]}, + {'CosPropertyService_PropertySetDefFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f52585d44dd9d6863bd2b0e0359a24e"}]}, + {'CosPropertyService_PropertySetDef_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02a747cf3856996416253a5cbccfbd7"}]}, + {'CosPropertyService_PropertySetFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"faef66b15f43dc81cbf7dd9bde81c8a2"}]}, + {'CosPropertyService_PropertySetFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b538bc6740ae2b6934e08d831d5b0960"}]}, + {'CosPropertyService_PropertyTypes', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec088d6b4028f6a9dc2917e6722f1c32"}]}, + {'CosPropertyService_ReadOnlyProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f4d338a44a7ab32daf202f4d2aa7cbb"}]}, + {'CosPropertyService_UnsupportedMode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"203ca7e42a209758ceea013cbff109bd"}]}, + {'CosPropertyService_UnsupportedProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28e9e73be7eb82646e3713135d695a6d"}]}, + {'CosPropertyService_UnsupportedTypeCode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da862aea1e36f6fb797bee192a2f3e08"}]}, + {cosProperty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5c17adcc4dc9f93a8cf92c91a12c81e"}]}, + {oe_CosProperty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c9d35f1b883b805a44e9864136958b1"}]}]}]}}, + {application, + {cosNotification, + [{description,"The Erlang CosNotification application"}, + {vsn,"1.1.20"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin"}, + {modules, + [{'CosNotification', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a52684ebceaceebe3d7c971fd5e45e6"}]}, + {'CosNotification_AdminPropertiesAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa2af8e932319a2ab715d799c31678b0"}]}, + {'CosNotification_Common', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e908fdcf47fa3d9d234d4061db9760ab"}]}, + {'CosNotification_EventBatch', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c79e194e19df338bec34cee83d5c999"}]}, + {'CosNotification_EventHeader', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e08e276e855cfa3dd60bdc9b563b8e9"}]}, + {'CosNotification_EventType', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be0b154ef34f6279604f04d0be386d64"}]}, + {'CosNotification_EventTypeSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3719ad475d47fd73c1a70891586f0b17"}]}, + {'CosNotification_FixedEventHeader', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e512d2bce68fcb3de1336060be225cad"}]}, + {'CosNotification_NamedPropertyRange', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e42690af83d192433daaadb6cbfc7e02"}]}, + {'CosNotification_NamedPropertyRangeSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5eac2fb6027077046d918d30b36fb45a"}]}, + {'CosNotification_Property', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d89e479fd34c1e6c46447dcb4aaa44e0"}]}, + {'CosNotification_PropertyError', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2b5a17b0ff2dd997013daf5a4d73a83"}]}, + {'CosNotification_PropertyErrorSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2437aa1bdbeeb5f45213bc7e7922351a"}]}, + {'CosNotification_PropertyRange', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2392c8040a976dc8db3ba147f7911f2"}]}, + {'CosNotification_PropertySeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6950965079eb678d5b2e010c8266cf13"}]}, + {'CosNotification_QoSAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fafc8842d8f8e11febab4d341a2ce879"}]}, + {'CosNotification_StructuredEvent', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22a1eae09f5d8cf0d223d06cebf9d85b"}]}, + {'CosNotification_UnsupportedAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1d7ff2796dd090e244cecdbfa4d2ce"}]}, + {'CosNotification_UnsupportedQoS', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d0968f6f188653b1e292c34f3b18c51a"}]}, + {'CosNotifyChannelAdmin_AdminIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"42791a7a0d5ca5fef186c441a81cf50b"}]}, + {'CosNotifyChannelAdmin_AdminLimit', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5355d6a703102439e59b070eb6e61b45"}]}, + {'CosNotifyChannelAdmin_AdminLimitExceeded', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18b11c68d839f9aa90bfe6da07b15cd8"}]}, + {'CosNotifyChannelAdmin_AdminNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c853cd178ef80d6a46a334d3cb5371d4"}]}, + {'CosNotifyChannelAdmin_ChannelIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"992ab8f1ac2f4cc15edd6068c8dc1948"}]}, + {'CosNotifyChannelAdmin_ChannelNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"475e742fdf1dd2ec932704ccb941f3c1"}]}, + {'CosNotifyChannelAdmin_ConnectionAlreadyActive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8b95c202b2ebc28a7208928563b5382"}]}, + {'CosNotifyChannelAdmin_ConnectionAlreadyInactive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b106140de30c6cd638b328efe453cb3"}]}, + {'CosNotifyChannelAdmin_ConsumerAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c8c31c812099afa148ed0662dc67ea0"}]}, + {'CosNotifyChannelAdmin_ConsumerAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"172767d1c29ca64e810d8853c61a01e9"}]}, + {'CosNotifyChannelAdmin_EventChannel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e362f0dc4dc40c98e66b91632554ddb7"}]}, + {'CosNotifyChannelAdmin_EventChannelFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4798a326d18d53e9a7870454fb33ef4c"}]}, + {'CosNotifyChannelAdmin_EventChannelFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bc146f5b9cc168505d2249e7f04a618"}]}, + {'CosNotifyChannelAdmin_EventChannel_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db6e5631fc1e5ff158dfc77123c7e752"}]}, + {'CosNotifyChannelAdmin_NotConnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7f5e3229c7849f94b0744a78e38012c"}]}, + {'CosNotifyChannelAdmin_ProxyConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b1aa19779800f6e97852f5a2e8042641"}]}, + {'CosNotifyChannelAdmin_ProxyIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf0a62dd47773a5a4df90f70644c4e24"}]}, + {'CosNotifyChannelAdmin_ProxyNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"735c610478319545c1a68c1c8b75609d"}]}, + {'CosNotifyChannelAdmin_ProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6cc803a524bd58d1c33bee3fb8f92ac7"}]}, + {'CosNotifyChannelAdmin_ProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1683d6e08309fb3fc51d127c407348a"}]}, + {'CosNotifyChannelAdmin_ProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94416e046b1c566bfa8df9bc1884bea5"}]}, + {'CosNotifyChannelAdmin_ProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61c57643509be14cbb5e82090fb5bf6d"}]}, + {'CosNotifyChannelAdmin_ProxySupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c1c83635cd4d1e4a50577e68f084a39"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af562a179799a5ae781278e980912710"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da43e615a23f2485758bec039617792c"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a876b3b2c655fa98e23510ca72be236"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55954cf819fb29c74e8c7fa7dcb17eb8"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aeb95ea3a9deb7c129dccfd77df7976c"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e72e1de7fb0ea440aae9ca791fbdd403"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d277b85ea15126c7645eccc585325ee2"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7339f8c2876066369e6afa27267bfd81"}]}, + {'CosNotifyChannelAdmin_SupplierAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"043d43346f3ff5c2775bf7030a13e1d9"}]}, + {'CosNotifyChannelAdmin_SupplierAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efe73dc58fd1b27c2adc184018e4091a"}]}, + {'CosNotifyComm_InvalidEventType', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"516a9a10d779d7b47a5752d0b4278017"}]}, + {'CosNotifyComm_NotifyPublish', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c50da2c5c4d79c4cd3974c37b6165fbd"}]}, + {'CosNotifyComm_NotifySubscribe', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"180ce40d1660bec349bb7ddf1275c985"}]}, + {'CosNotifyComm_PullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd7be30cd0685dbb3e0f22b4de8ffb91"}]}, + {'CosNotifyComm_PullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e76b3f6be347a5d08350ae25cddc77c1"}]}, + {'CosNotifyComm_PushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2c972f2affe7f936ec38997084045b1"}]}, + {'CosNotifyComm_PushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"416e6887077de70bf3aa7cf6c6b35a9c"}]}, + {'CosNotifyComm_SequencePullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1322fb2dadb5669a36391f12455c6969"}]}, + {'CosNotifyComm_SequencePullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"281779a70fdae7a1de3e569ae707d21a"}]}, + {'CosNotifyComm_SequencePushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"701eb7ecaef2fb7f13b5adf2ff8a97aa"}]}, + {'CosNotifyComm_SequencePushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ceb164baf53b3df5f90fdbef4c800d8d"}]}, + {'CosNotifyComm_StructuredPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70d2e255c8613a9d58a4f1f69b1adf51"}]}, + {'CosNotifyComm_StructuredPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa8164033103e1c40f7721471fa6b8fd"}]}, + {'CosNotifyComm_StructuredPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684f225a8d760e970a4380c303f82662"}]}, + {'CosNotifyComm_StructuredPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de1b05e00095ac428839c165db9f92fc"}]}, + {'CosNotifyFilter_CallbackIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab4cfad0073e21b629ebd16f8973912"}]}, + {'CosNotifyFilter_CallbackNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ae7cd265c665a4cd4a969c75388b1fc"}]}, + {'CosNotifyFilter_ConstraintExp', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"421355667259ba4906ed0b0ba89ae1ba"}]}, + {'CosNotifyFilter_ConstraintExpSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ef901d08223839966e5d67b55731e63"}]}, + {'CosNotifyFilter_ConstraintIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50d0d1e84309217b5a2864eb2df3653b"}]}, + {'CosNotifyFilter_ConstraintInfo', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e988281d1a6d6d2ba412a86cb1b89e0b"}]}, + {'CosNotifyFilter_ConstraintInfoSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff21820130cfa051a6781e79f53171af"}]}, + {'CosNotifyFilter_ConstraintNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1611f041bd2826435c850dc36b2a6953"}]}, + {'CosNotifyFilter_DuplicateConstraintID', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40c6d62f59e44a14649e3de2e78deafd"}]}, + {'CosNotifyFilter_Filter', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"864d9d277d782fca9a15809c5c195c1c"}]}, + {'CosNotifyFilter_FilterAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ee1e90ea0fbde4a0c53036e0efa4b89a"}]}, + {'CosNotifyFilter_FilterFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b59a3c5c5e24a9a389792ea9ff254312"}]}, + {'CosNotifyFilter_FilterFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40bc158ddcbb31abff87fe4da270b55a"}]}, + {'CosNotifyFilter_FilterIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dd80855340f372c0682a53a6d3bc216"}]}, + {'CosNotifyFilter_FilterNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbdd34c6e28fb4c907410c2f7bc82f92"}]}, + {'CosNotifyFilter_Filter_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6911bf97e4ebe2333e7e19914d821ea"}]}, + {'CosNotifyFilter_InvalidConstraint', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"beaedbe7bcec40b0d90a0404dde063a9"}]}, + {'CosNotifyFilter_InvalidGrammar', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0055f6477430cf9c38cce84d93393a12"}]}, + {'CosNotifyFilter_InvalidValue', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"041b66a4b7933005a983848254dec48c"}]}, + {'CosNotifyFilter_MappingConstraintInfo', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab3093c4688953509866f4128d0747d2"}]}, + {'CosNotifyFilter_MappingConstraintInfoSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f81b4c571998ef9f1cefa77c45be6e5"}]}, + {'CosNotifyFilter_MappingConstraintPair', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"305991c110aca04df1398bd3b640e284"}]}, + {'CosNotifyFilter_MappingConstraintPairSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7bd7692f2d9ad411d3d4323ff4ef9a2d"}]}, + {'CosNotifyFilter_MappingFilter', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbd3cd1cce0f195048025a19666e4bb8"}]}, + {'CosNotifyFilter_MappingFilter_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c337925555dac8714bcde4ff0ac3682"}]}, + {'CosNotifyFilter_UnsupportedFilterableData', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64044f951a82b03309ab90082ed6d354"}]}, + {'PullerConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a96588beb8db62195c499ba6a61cc53f"}]}, + {'PullerSupplier_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90058bd6464dc08f79814185696ce1fb"}]}, + {'PusherConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72a8f62fb563174cf54b97aa1206b293"}]}, + {'PusherSupplier_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d03a842669765bf9907b644957fa7cb"}]}, + {cosNotificationApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a6dabb21a8926c7f733904336b3375b"}]}, + {cosNotification_Filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63cb134b80f03d8399abe10908055e40"}]}, + {cosNotification_Grammar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5636b97c6e449aeafada1b5df5b6e91"}]}, + {cosNotification_Scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c6334416492eb7be457c13d39b92222"}]}, + {cosNotification_eventDB, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d52b15cf6eaba713bb979684b54fb8df"}]}, + {oe_CosNotification, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"961cde96216694db976f1f714b0f4d6c"}]}, + {oe_CosNotificationComm_Event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"affa53e3f3dfcb411ff317d98a5ce64a"}]}, + {oe_CosNotifyChannelAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ed58499950adf48241f1701c2116857"}]}, + {oe_CosNotifyComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a944c5aa4379e8f3b07acc9c5fd56f9a"}]}, + {oe_CosNotifyFilter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c51f3aaa451621c060bdb0d707324fbd"}]}, + {oe_cosNotificationAppComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed879b4fb4e5e3438e523069a29ce1aa"}]}]}]}}, + {application, + {cosFileTransfer, + [{description,"The Erlang CosFileTransfer application"}, + {vsn,"1.1.15"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin"}, + {modules, + [{'CosFileTransfer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"537730bb6ac118a9f672ea5c5616502c"}]}, + {'CosFileTransfer_AccessLevel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"538517d444956f350c54176200fa9c2d"}]}, + {'CosFileTransfer_CommandNotImplementedException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06bb7e58f28ad101e4cb2cd2336d3698"}]}, + {'CosFileTransfer_Directory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3504d2207476a6439367e5e20b442bc"}]}, + {'CosFileTransfer_Directory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ca00e96f4f13619cbcaf663edf819405"}]}, + {'CosFileTransfer_File', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"082fb7de49fb7a94ad34873e876fbdd8"}]}, + {'CosFileTransfer_FileIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7fce306a50dbb7edaea5f9eeec1d5ce"}]}, + {'CosFileTransfer_FileIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb5946f486a03df082e02ec55308e270"}]}, + {'CosFileTransfer_FileList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f508ab863f8cf90e46fda1e2bc6a01b"}]}, + {'CosFileTransfer_FileNameList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2044a2695019499e1294315eea9f3092"}]}, + {'CosFileTransfer_FileNotFoundException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b00961e88651b5ab62c9d20b2d60c6e0"}]}, + {'CosFileTransfer_FileTransferSession', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"102d05bd8c1fda9dfa1ba3769ef283fd"}]}, + {'CosFileTransfer_FileTransferSession_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6774a931a16efaa7bcbf342ef660b49"}]}, + {'CosFileTransfer_FileWrapper', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d19e7d1eeb8b381847003f8837be28d"}]}, + {'CosFileTransfer_File_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64eda7b0b054da3e646bba7fbe6be70d"}]}, + {'CosFileTransfer_IllegalOperationException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"25a05f47c3c2fc5d14d135acb6d72a5f"}]}, + {'CosFileTransfer_ProtocolAddressList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4587002261d4308181fc93122a15cea9"}]}, + {'CosFileTransfer_ProtocolSupport', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7937786969ccbba0967581d3c25ad54"}]}, + {'CosFileTransfer_RequestFailureException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"384095c7be94a7544378f029e966cf2e"}]}, + {'CosFileTransfer_SessionException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ef101cef5808b9d7c08037e15ee66fa"}]}, + {'CosFileTransfer_SupportedProtocolAddresses', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d145c64e85be77403b797ad505564018"}]}, + {'CosFileTransfer_TransferException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4b8f0ca1710b11ed6d723ee1692c46c"}]}, + {'CosFileTransfer_VirtualFileSystem', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37e0d0057b23e3e1563b19539bc0a76d"}]}, + {'CosFileTransfer_VirtualFileSystem_ContentList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165e5f4d21952fc5eb1f0a289c571fbc"}]}, + {'CosFileTransfer_VirtualFileSystem_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"81b6bf0f44b0eab55cebc3d408671e0a"}]}, + {cosFileTransferApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed8d595027fd9c5f7dd1e9398a4351bf"}]}, + {cosFileTransferNATIVE_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91cd6a5ac4ba42b3d2ef0c0cf4c48270"}]}, + {oe_CosFileTransfer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"683aa469ec95c19f32d0f62f5f7ef6e7"}]}]}]}}, + {application, + {cosEventDomain, + [{description,"The Erlang CosEventDomain application"}, + {vsn,"1.1.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin"}, + {modules, + [{'CosEventDomainAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e2d9e538ddd0f2a2fa74f499e042db1"}]}, + {'CosEventDomainAdmin_AlreadyExists', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1ce2f0d94e633823bedf296aa1527e5"}]}, + {'CosEventDomainAdmin_Connection', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d8e1bead63a2d7644f36edd4a66772"}]}, + {'CosEventDomainAdmin_ConnectionIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56929f00f5dcec6d75408d85921c693f"}]}, + {'CosEventDomainAdmin_ConnectionNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4de106e024e8f9f45783dd7b45af2cc1"}]}, + {'CosEventDomainAdmin_CycleCreationForbidden', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a28090bafe2078be88ee5cb996f9d23"}]}, + {'CosEventDomainAdmin_CycleSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3232a8bb21e31c81f7791fdf0359d945"}]}, + {'CosEventDomainAdmin_DiamondCreationForbidden', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b9e307237ee3408e348d4593c0de997"}]}, + {'CosEventDomainAdmin_DiamondSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"65478f4d3f155d7547b52ea7d04f6628"}]}, + {'CosEventDomainAdmin_DomainIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f44a097ccf00511ed397775b33991a8"}]}, + {'CosEventDomainAdmin_DomainNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e17639bb3b5f18e80cd8f505191dbc7c"}]}, + {'CosEventDomainAdmin_EventDomain', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b21b34fcceae9698702dadc469ef2cd1"}]}, + {'CosEventDomainAdmin_EventDomainFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcf4395bcda2d977235b24ec4416ddec"}]}, + {'CosEventDomainAdmin_EventDomainFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a7d21747fe63505e98037202798cca90"}]}, + {'CosEventDomainAdmin_EventDomain_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2801240b7c96984648d565b9b210b8fb"}]}, + {'CosEventDomainAdmin_MemberIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"889c0e92b864877d5c2bbbd2ed185575"}]}, + {'CosEventDomainAdmin_RouteSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f77038e040e610031d35f876dfa2925e"}]}, + {cosEventDomainApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea692728e2b3d71f1f486a7aece4df48"}]}, + {oe_CosEventDomainAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"939160a9e6adced7edf36e0a18927785"}]}]}]}}, + {application, + {cosEvent, + [{description,"The Erlang CosEvent application"}, + {vsn,"2.1.14"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin"}, + {modules, + [{'CosEventChannelAdmin_AlreadyConnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64cb912070ade0d3254585904ba4c509"}]}, + {'CosEventChannelAdmin_ConsumerAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e027fd366965c17a0b51c3cfd80dcd4f"}]}, + {'CosEventChannelAdmin_EventChannel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8d2e64b53114282c8c353dd5110ea9e"}]}, + {'CosEventChannelAdmin_ProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9aef474c8cb0c5e9e2cb5d4cc43fe52d"}]}, + {'CosEventChannelAdmin_ProxyPullConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9057fc161db130ea1ee3bd656b083ad0"}]}, + {'CosEventChannelAdmin_ProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"11cc90a016f1b493838f6f79caa959fa"}]}, + {'CosEventChannelAdmin_ProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21b14ec7e74c8632349f31cb70324ca6"}]}, + {'CosEventChannelAdmin_ProxyPushConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dabc851d850f372affa761150136640d"}]}, + {'CosEventChannelAdmin_ProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d32c6d87385b474519aa936d9bd79256"}]}, + {'CosEventChannelAdmin_SupplierAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b26b61665649ea2af6fc2b7174d7c4f7"}]}, + {'CosEventChannelAdmin_SupplierAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8606a32b7269881c1f455edce89344db"}]}, + {'CosEventChannelAdmin_TypeError', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"20bb7e990eb8d6b0e854919c0dff94cc"}]}, + {'CosEventComm_Disconnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2ec0e6b1fa849a2ab22fdd1ce14ecb7"}]}, + {'CosEventComm_PullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43972738bc29806b38419aaf76d8c393"}]}, + {'CosEventComm_PullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5206247fdf5b00621d3732805fe1854a"}]}, + {'CosEventComm_PushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72937626c2c3f3689fb6dafed66bad17"}]}, + {'CosEventComm_PushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"54875107d8748bac2b96a3037669a477"}]}, + {cosEventApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dab9a7b6c3106899fe7d2c9e74fcb021"}]}, + {oe_CosEventChannelAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b192666923744044b3a0e652ec9e9948"}]}, + {oe_CosEventComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"884bef0af9742bfe5f3f7e345d24cd18"}]}, + {oe_CosEventComm_CAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f344012f72ef7bfbdef3d29d525e2896"}]}, + {oe_CosEventComm_CAdmin_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"935565447529d9e97da7b98c3631cc92"}]}, + {oe_CosEventComm_Channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe816f373688feb5c63c10543eedd3c2"}]}, + {oe_CosEventComm_Channel_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c3c48bf48ac0b63f62d82064f9ce32f"}]}, + {oe_CosEventComm_Event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f5146f9630ff6e60665cf32fc7e6641"}]}, + {oe_CosEventComm_PullerS, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbd58f368f06b16fa0a7628594f84c44"}]}, + {oe_CosEventComm_PullerS_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bd0c1df9074f1a792985b4ff1b0ec98"}]}, + {oe_CosEventComm_PusherS, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"36dc7eaaa1b298b7875dd41b3e6b5b85"}]}, + {oe_CosEventComm_PusherS_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63c64664227a2772b5ad3d0c6519f8c4"}]}, + {oe_cosEventApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc2ca7e6febb762f39f337c5303390e6"}]}]}]}}, + {application, + {compiler, + [{description,"ERTS CXC 138 10"}, + {vsn,"4.9.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin"}, + {modules, + [{beam_a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a338f3a7878d0c9a407950fcb5a2e7ed"}]}, + {beam_asm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cef85f8577595b73910fa77803c58cdb"}]}, + {beam_block, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e7610e6f816e2c8d869e7ce1c44cba8"}]}, + {beam_bool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3fcb1cec9f4370800203e1189c01a10c"}]}, + {beam_bsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"973abf79efd649a3f0eb1b3351b4fe92"}]}, + {beam_clean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0c6b67b764da86372deb11b4c5154f4"}]}, + {beam_dead, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff4f53d218b932103fcf093dbd366584"}]}, + {beam_dict, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e8c36a21a5287a84844e7ffa0a9bbb"}]}, + {beam_disasm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63dd1f997343124a900e2fe982fe4cad"}]}, + {beam_except, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89dd12d9c4781f83554a9d2101d623d8"}]}, + {beam_flatten, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1e49fa674cc580042459878a27403e9"}]}, + {beam_jump, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a9f1ce9787205a57d137424b5ab022b"}]}, + {beam_listing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e9a84340142cd7c90e95851ab1260a0f"}]}, + {beam_opcodes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d5d21bc2584bf078639eba76a18d221"}]}, + {beam_peep, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d81c38cab19af16ff472ce5838c63b1"}]}, + {beam_receive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7d22ec74972c53f3f93bd01dbe369370"}]}, + {beam_split, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03b0416d0fee9081f68cf6468d036170"}]}, + {beam_trim, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a6a01870ff8f8bda3ea36184da7348a"}]}, + {beam_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc4a9521730959ffc10d3ccebd20861d"}]}, + {beam_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7d2b1d7cc0722d47c7fd72fa6487d27"}]}, + {beam_validator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed5a82e40ba511c22291f87c1e2b705b"}]}, + {beam_z, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ffafc7070cf14ec69d569b0f8106f9a"}]}, + {cerl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38c2ac91b52a3141d74df2f219b45eb5"}]}, + {cerl_clauses, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75da88dc5ced060fe52f177dae449ac0"}]}, + {cerl_inline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"976487fce255a37192ac2a9258cdacf9"}]}, + {cerl_trees, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a240a6560f194a05956f572e436a6861"}]}, + {compile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98a40d5fc6bcd14ac5e516a506b6161f"}]}, + {core_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bdda978e16a885a17587e575cb2b369"}]}, + {core_lint, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"633c18d069ada94f1f1dfec526de2a2a"}]}, + {core_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21b745083d46bbe9725eb423f0c73c7a"}]}, + {core_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9940bb6f480fe3438bf97863ad0a5755"}]}, + {core_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1f3ff89deb03f34714390b93e678989c"}]}, + {erl_bifs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74c0a1563ea88b196dc2a18b1a34ffed"}]}, + {rec_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a6fdcf8ffe126bb2838f86949ced210"}]}, + {sys_core_dsetel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2c45d53e09f1b3f4e92b8f2ff8adf258"}]}, + {sys_core_fold, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac092bdc7362a76cda76e27ad5610ec7"}]}, + {sys_core_inline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f439077cdab9795b782412d556828fa"}]}, + {sys_pre_attributes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc95feafdeca105f38589c4ca7b43532"}]}, + {sys_pre_expand, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b1c1e3bf39af00ca2988295aa2fbdbb"}]}, + {v3_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"590be66e39ccc3e6260a412ccbc8becd"}]}, + {v3_core, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5997d0774f74e0bad9b8887d24a8bfa3"}]}, + {v3_kernel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21a4b3edd53de6b910df1b99219824fc"}]}, + {v3_kernel_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ec5b0e503bcf660d6da8aca9cba9682"}]}, + {v3_life, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb4ae7606e9409846d17c5c60751b08f"}]}]}]}}, + {application, + {common_test, + [{description,"The OTP Common Test application"}, + {vsn,"1.7.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin"}, + {modules, + [{ct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1f3d139ac677184b601722b92977b971"}]}, + {ct_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0257a2b9a5ed7e176df35b2c39a03a5a"}]}, + {ct_config_plain, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8330eca3a0e4401b3a8f9508343df5cc"}]}, + {ct_config_xml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3502006ebdcc975febe9d750b28fd2b0"}]}, + {ct_conn_log_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f2e020e7c92f8a7c2c148faf855c9b0"}]}, + {ct_cover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76b9cecb99d35c0bf38daa0a7107ddeb"}]}, + {ct_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2dfbb0a114e64e69b012a83a29312fe8"}]}, + {ct_framework, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d65dc75bd25fe8c45b3e574d18b0be87"}]}, + {ct_ftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f60d1979bd240e45fb63deb00c6dae6e"}]}, + {ct_gen_conn, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"abb8aa2681d03230890eb5f3fcaffc6b"}]}, + {ct_groups, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f3c50d44938374c7e364cef4c905079"}]}, + {ct_hooks, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5fbdbe96e81a1abe94ff6ce0c20c9574"}]}, + {ct_hooks_lock, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e94b9611b2abb9a665606264fb96c2c"}]}, + {ct_logs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec22f1709750c55acff646a44502c2db"}]}, + {ct_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a2f7f755c88a136bbe56c5415901e217"}]}, + {ct_master, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d8a8fd7184fd07d8caec68f3653b7f8"}]}, + {ct_master_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c497dbbef03d74f085ee633998aecba"}]}, + {ct_master_logs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2180f96ad17256256d5ef731ac4d04"}]}, + {ct_master_status, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d63adbf76f9afa47c576284d77d75a9"}]}, + {ct_netconfc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bff4907efdc764c267f373d12956eca"}]}, + {ct_repeat, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b18f0f016143922207ef2dd5577d60dc"}]}, + {ct_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51957dfa13552f236dad5ad5ab1f83a0"}]}, + {ct_run, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcaaaf893ba391b4ce961c33d48b3b5f"}]}, + {ct_slave, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6b03499c65f734a1ad97e2fce458be92"}]}, + {ct_snmp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a6826b2fdf26d9e775f8352ab15b454"}]}, + {ct_ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"657b8f076669c2db4245acd4bc8254d7"}]}, + {ct_telnet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47a92efe0ab4b30fe83d83d8d429a8fe"}]}, + {ct_telnet_client, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53f220488e09886c1933a060c000dddf"}]}, + {ct_testspec, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb607ba1ef1abdab4ba76e654cbd1ce1"}]}, + {ct_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6178d700637198b47134c927348b72b"}]}, + {cth_conn_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"113d8b745a6d162d678b03dba49ea048"}]}, + {cth_log_redirect, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7da913515a3b5841c7da153ce0883cb"}]}, + {cth_surefire, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c7c9d2147289740b913895898126f1a"}]}, + {unix_telnet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d38cf476a56523e6222de857b16e89d0"}]}, + {vts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a31c45897c8d9fe60fbc9115599edcf7"}]}]}]}}, + {application, + {asn1, + [{description,"The Erlang ASN1 compiler version 2.0.2"}, + {vsn,"2.0.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin"}, + {modules, + [{asn1_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9af64def8344330927cefe9a2bf9a8a"}]}, + {asn1ct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"352b6c8edb6cf7dfc39b3b6b6b0a7b35"}]}, + {asn1ct_check, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ef3333d2a492df6b90deff919f28b58"}]}, + {asn1ct_constructed_ber_bin_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41e917757a2c1195b8f86749a5905d64"}]}, + {asn1ct_constructed_per, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63d5e7bf85a641a2529c81c7888bfb52"}]}, + {asn1ct_eval_ext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f5e38c39875f699ad76e07de7b073b7"}]}, + {asn1ct_func, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea7118ee0d45ac6641313e378a1733db"}]}, + {asn1ct_gen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5b2688ada58f6ed45c2e7e841088e3e"}]}, + {asn1ct_gen_ber_bin_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"26db838a5c213d6ec1fe2fdf997a06d1"}]}, + {asn1ct_gen_per, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a67d91fec991b9f08680c35e95f907f0"}]}, + {asn1ct_imm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9288c73c656cf6d60fd74bd7946581b2"}]}, + {asn1ct_name, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ea14b79e5eb0ae2c3f08f92241f9c4f"}]}, + {asn1ct_parser2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a7951b400104d9f72bcfbb7405e4404"}]}, + {asn1ct_pretty_format, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dc1240d0e121f12732f8469cbd23051a"}]}, + {asn1ct_rtt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f24866e9e2295b4f6c5553ae44d53270"}]}, + {asn1ct_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d4ec9835f20bc046769547da299363c"}]}, + {asn1ct_tok, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19908cc77297850954d101491e5eb97d"}]}, + {asn1ct_value, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"388ba3507e46869822607142eef38d70"}]}, + {asn1rt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0160799421ccb619fc6b08099bfaf37b"}]}, + {asn1rt_nif, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c579098c3d97270d004e54a94e42daa"}]}]}]}}, + {application, + {appmon, + [{description,"DEVTOOLS CXC 138 16"}, + {vsn,"2.1.14.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"}, + {modules, + [{appmon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97b8d88aecbd66963563a5aa5df0d0bc"}]}, + {appmon_a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"adb9049e71eb9e2131b6952974302b4c"}]}, + {appmon_dg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"438c40af3e96404e73904864597dcca0"}]}, + {appmon_lb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d851ee67b54dbf0da46cb21a8c1f7bd9"}]}, + {appmon_place, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"192140bb8bc7e74fd7121d8da2019c56"}]}, + {appmon_txt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34c7f9da76880b4f7fcfeb0856fcc097"}]}, + {appmon_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"449317a9770ff1aa4cf001604bd2261c"}]}, + {process_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6d86fad6d0d208318c48af00853ec5b"}]}]}]}}]}, + {system_info, + [{allocator, + {glibc, + [2,4], + [sys_alloc,temp_alloc,sl_alloc,std_alloc,ll_alloc, + eheap_alloc,ets_alloc,fix_alloc,binary_alloc,driver_alloc, + mseg_alloc], + [{sys_alloc,[{e,true},{m,libc},{tt,131072},{tp,0}]}, + {temp_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,90}, + {rsbcmt,80}, + {rmbcmt,100}, + {mmbcs,131072}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,10485760}, + {smbcs,1048576}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {sl_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,80}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {std_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {ll_alloc, + [{e,true}, + {t,false}, + {ramv,false}, + {sbct,18446744073709551615}, + {asbcst,0}, + {rsbcst,0}, + {rsbcmt,0}, + {rmbcmt,0}, + {mmbcs,2097112}, + {mmmbc,18446744073709551615}, + {mmsbc,0}, + {lmbcs,10485760}, + {smbcs,1048576}, + {mbcgs,10}, + {acul,0}, + {as,aobf}]}, + {eheap_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,50}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,131072}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {ets_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {fix_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,aobf}]}, + {binary_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {driver_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {mseg_alloc,[{amcbf,4194304},{rmcbf,20},{mcs,10}]}, + {alloc_util,[{mmc,1024},{ycs,1048576}]}, + {instr,[{m,false},{s,false},{t,false}]}]}}, + {check_io, + [{name,erts_poll}, + {primary,poll}, + {fallback,false}, + {kernel_poll,false}, + {memory_size,49808}, + {total_poll_set_size,2}, + {lazy_updates,true}, + {pending_updates,0}, + {batch_updates,false}, + {concurrent_updates,false}, + {max_fds,1024}]}, + {otp_release,"R16B02"}, + {port_limit,65536}, + {process_limit,262144}, + {smp_support,true}, + {system_version, + "Erlang R16B02 (erts-5.10.3) [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]\n"}, + {system_architecture,"x86_64-unknown-linux-gnu"}, + {threads,true}, + {thread_pool_size,10}, + {{wordsize,internal},8}, + {{wordsize,external},8}, + {{cpu_topology,defined},undefined}, + {{cpu_topology,detected}, + [{node, + [{processor,[{core,{logical,0}},{core,{logical,1}}]}]}, + {node, + [{processor,[{core,{logical,2}},{core,{logical,3}}]}]}]}, + {scheduler_bind_type,unbound}, + {scheduler_bindings,{unbound,unbound,unbound,unbound}}, + {compat_rel,16}, + {schedulers_state,{4,4,4}}, + {build_type,opt}, + {logical_processors,4}, + {logical_processors_online,4}, + {logical_processors_available,4}, + {driver_version,"2.1"}, + {taints,[]}]}, + {erts_compile_info, + [{ldflags,[]}, + {cflags, + "-g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -DERTS_SMP -DHAVE_CONFIG_H -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS "}, + {config_h, + "/* x86_64-unknown-linux-gnu/config.h. Generated by configure. */\n/* config.h.in. Generated from configure.in by autoheader. */\n\n\n#define GHBN_R_SOLARIS 2\n#define GHBN_R_AIX 3\n#define GHBN_R_GLIBC 4\n\n\n/* Define the brk() argument type. */\n#define BRK_ARG_TYPE void *\n\n/* Define the brk() return type. */\n#define BRK_RET_TYPE int\n\n/* Define if you do not have a high-res. timer & want to use times() instead\n */\n/* #undef CORRECT_USING_TIMES */\n\n/* Modern style mcontext_t in MacOSX */\n/* #undef DARWIN_MODERN_MCONTEXT */\n\n/* Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H */\n\n/* Define if you need to include winsock2.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_WINSOCK2_H */\n\n/* Define if you want to disable child waiter thread */\n/* #undef DISABLE_CHILD_WAITER_THREAD */\n\n/* Define if you want to disable vfork. */\n/* #undef DISABLE_VFORK */\n\n/* Define to 1 if your processor stores the words in a double in middle-endian\n format (like some ARMs). */\n/* #undef DOUBLE_MIDDLE_ENDIAN */\n\n/* Define if you want to enable child waiter thread */\n/* #undef ENABLE_CHILD_WAITER_THREAD */\n\n/* Define if sbrk()/brk() wrappers can track malloc()s core memory use */\n/* #undef ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC */\n\n/* The only reason ERTS_EMU_CMDLINE_FLAGS exists is to force modification of\n config.h when the emulator command line flags are modified by configure */\n#define ERTS_EMU_CMDLINE_FLAGS \" -g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -g -D_GNU_SOURCE -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement\"\n\n/* Define if you have kernel poll and want to use it */\n#define ERTS_ENABLE_KERNEL_POLL 1\n\n/* Define if the smp emulator is built */\n#define ERTS_HAVE_SMP_EMU 1\n\n/* Define if dlopen() needs to be called before first call to dlerror() */\n/* #undef ERTS_NEED_DLOPEN_BEFORE_DLERROR */\n\n/* Define if poll() should be used instead of select() */\n#define ERTS_USE_POLL 1\n\n/* Define if __after_morecore_hook can track malloc()s core memory use. */\n#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1\n\n/* Define if bigendian */\n/* #undef ETHR_BIGENDIAN */\n\n/* Define if you get a register shortage with cmpxchg8b and position\n independent code */\n/* #undef ETHR_CMPXCHG8B_REGISTER_SHORTAGE */\n\n/* Define if you want to disable native ethread implementations */\n/* #undef ETHR_DISABLE_NATIVE_IMPLS */\n\n/* Define if you want to force usage of pthread rwlocks */\n/* #undef ETHR_FORCE_PTHREAD_RWLOCK */\n\n/* Define if you use a gcc that supports the double word cmpxchg instruction\n */\n#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1\n\n/* Define if you use a gcc that supports -msse2 and understand sse2 specific\n asm statements */\n/* #undef ETHR_GCC_HAVE_SSE2_ASM_SUPPORT */\n\n/* Define if you have all ethread defines */\n#define ETHR_HAVE_ETHREAD_DEFINES 1\n\n/* Define if you have libatomic_ops atomic operations */\n/* #undef ETHR_HAVE_LIBATOMIC_OPS */\n\n/* Define if you have a linux futex implementation. */\n#define ETHR_HAVE_LINUX_FUTEX 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef ETHR_HAVE_MIT_PTHREAD_H */\n\n/* Define if you have the pthread_attr_setguardsize function. */\n#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1\n\n/* Define if you have the <pthread.h> header file. */\n#define ETHR_HAVE_PTHREAD_H 1\n\n/* Define if you have the pthread_rwlockattr_setkind_np() function. */\n#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1\n\n/* Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock\n attribute. */\n#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1\n\n/* Define if you have the pthread_spin_lock function. */\n#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1\n\n/* Define if you have the pthread_yield() function. */\n#define ETHR_HAVE_PTHREAD_YIELD 1\n\n/* Define if you have the <sched.h> header file. */\n#define ETHR_HAVE_SCHED_H 1\n\n/* Define if you have the sched_yield() function. */\n#define ETHR_HAVE_SCHED_YIELD 1\n\n/* Define if you have the <sys/time.h> header file. */\n#define ETHR_HAVE_SYS_TIME_H 1\n\n/* Define if you have _InterlockedAnd() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND */\n\n/* Define if you have _InterlockedAnd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND64 */\n\n/* Define if you have _InterlockedCompareExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE */\n\n/* Define if you have _InterlockedCompareExchange128() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 */\n\n/* Define if you have _InterlockedCompareExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 */\n\n/* Define if you have _InterlockedCompareExchange64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ */\n\n/* Define if you have _InterlockedCompareExchange64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL */\n\n/* Define if you have _InterlockedCompareExchange_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ */\n\n/* Define if you have _InterlockedCompareExchange_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL */\n\n/* Define if you have _InterlockedDecrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT */\n\n/* Define if you have _InterlockedDecrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64 */\n\n/* Define if you have _InterlockedDecrement64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL */\n\n/* Define if you have _InterlockedDecrement_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT_REL */\n\n/* Define if you have _InterlockedExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE */\n\n/* Define if you have _InterlockedExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE64 */\n\n/* Define if you have _InterlockedExchangeAdd() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD */\n\n/* Define if you have _InterlockedExchangeAdd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 */\n\n/* Define if you have _InterlockedExchangeAdd64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ */\n\n/* Define if you have _InterlockedExchangeAdd_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ */\n\n/* Define if you have _InterlockedIncrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT */\n\n/* Define if you have _InterlockedIncrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64 */\n\n/* Define if you have _InterlockedIncrement64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ */\n\n/* Define if you have _InterlockedIncrement_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ */\n\n/* Define if you have _InterlockedOr() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR */\n\n/* Define if you have _InterlockedOr64() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR64 */\n\n/* Define if you have __sync_add_and_fetch() for 32-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH32 1\n\n/* Define if you have __sync_add_and_fetch() for 64-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH64 1\n\n/* Define if you have __sync_fetch_and_and() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND32 1\n\n/* Define if you have __sync_fetch_and_and() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND64 1\n\n/* Define if you have __sync_fetch_and_or() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR32 1\n\n/* Define if you have __sync_fetch_and_or() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR64 1\n\n/* Define if you have __sync_val_compare_and_swap() for 128-bit integers */\n/* #undef ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128 */\n\n/* Define if you have __sync_val_compare_and_swap() for 32-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32 1\n\n/* Define if you have __sync_val_compare_and_swap() for 64-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64 1\n\n/* Define if you want to modify the default stack size */\n/* #undef ETHR_MODIFIED_DEFAULT_STACK_SIZE */\n\n/* Define if you need the <nptl/pthread.h> header file. */\n/* #undef ETHR_NEED_NPTL_PTHREAD_H */\n\n/* Define if you prefer gcc native ethread implementations */\n/* #undef ETHR_PREFER_GCC_NATIVE_IMPLS */\n\n/* Define if you prefer libatomic_ops native ethread implementations */\n/* #undef ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS */\n\n/* Define if you have pthreads */\n#define ETHR_PTHREADS 1\n\n/* Define if pthread_yield() returns an int. */\n#define ETHR_PTHREAD_YIELD_RET_INT 1\n\n/* Define if sched_yield() returns an int. */\n#define ETHR_SCHED_YIELD_RET_INT 1\n\n/* Define to the size of AO_t if libatomic_ops is used */\n/* #undef ETHR_SIZEOF_AO_T */\n\n/* Define to the size of int */\n#define ETHR_SIZEOF_INT 4\n\n/* Define to the size of long */\n#define ETHR_SIZEOF_LONG 8\n\n/* Define to the size of long long */\n#define ETHR_SIZEOF_LONG_LONG 8\n\n/* Define to the size of pointers */\n#define ETHR_SIZEOF_PTR 8\n\n/* Define to the size of __int128_t */\n#define ETHR_SIZEOF___INT128_T 16\n\n/* Define to the size of __int64 */\n#define ETHR_SIZEOF___INT64 0\n\n/* Define if only run in Sparc PSO, or TSO mode */\n/* #undef ETHR_SPARC_PSO */\n\n/* Define if run in Sparc RMO, PSO, or TSO mode */\n/* #undef ETHR_SPARC_RMO */\n\n/* Define if only run in Sparc TSO mode */\n/* #undef ETHR_SPARC_TSO */\n\n/* Define if you can safely include both <sys/time.h> and <time.h>. */\n#define ETHR_TIME_WITH_SYS_TIME 1\n\n/* Define if you have win32 threads */\n/* #undef ETHR_WIN32_THREADS */\n\n/* Define if x86/x86_64 out of order instructions should be synchronized */\n/* #undef ETHR_X86_OUT_OF_ORDER */\n\n/* Define if you want to use clock_gettime to simulate gethrtime */\n#define GETHRTIME_WITH_CLOCK_GETTIME 1\n\n/* Define if building a halfword-heap 64bit emulator */\n/* #undef HALFWORD_HEAP_EMULATOR */\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `brk' function. */\n#define HAVE_BRK 1\n\n/* define if clock_gettime() works for getting process time */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define if you have a decl of fread that conflicts with int fread */\n#define HAVE_CONFLICTING_FREAD_DECLARATION 1\n\n/* Define if you have a putenv() that stores a copy of the key-value pair */\n/* #undef HAVE_COPYING_PUTENV */\n\n/* Define if you have cpuset_getaffinity/cpuset_setaffinity */\n/* #undef HAVE_CPUSET_xETAFFINITY */\n\n/* Define to 1 if you have the declaration of `getrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_GETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_ANY_INIT', and to 0 if\n you don't. */\n#define HAVE_DECL_IN6ADDR_ANY_INIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_LOOPBACK_INIT', and to\n 0 if you don't. */\n#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT 1\n\n/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you\n don't. */\n#define HAVE_DECL_IPV6_V6ONLY 1\n\n/* Define to 1 if you have the declaration of `posix2time', and to 0 if you\n don't. */\n#define HAVE_DECL_POSIX2TIME 0\n\n/* Define to 1 if you have the declaration of `RLIMIT_STACK', and to 0 if you\n don't. */\n#define HAVE_DECL_RLIMIT_STACK 1\n\n/* Define to 1 if you have the declaration of `SCTPS_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_ECHOED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_WAIT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_ESTABLISHED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_IDLE', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_IDLE 0\n\n/* Define to 1 if you have the declaration of `SCTPS_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_ACK_SENT', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_RECEIVED', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTP_ABORT', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_ABORT 1\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_CONFIRMED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_ADDR_CONFIRMED 0\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_OVER', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ADDR_OVER 1\n\n/* Define to 1 if you have the declaration of `SCTP_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTP_CLOSED', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_CLOSED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_COOKIE_ECHOED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_COOKIE_WAIT 1\n\n/* Define to 1 if you have the declaration of `SCTP_DELAYED_ACK_TIME', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_DELAYED_ACK_TIME 1\n\n/* Define to 1 if you have the declaration of `SCTP_EMPTY', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EMPTY 1\n\n/* Define to 1 if you have the declaration of `SCTP_EOF', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EOF 1\n\n/* Define to 1 if you have the declaration of `SCTP_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ESTABLISHED 1\n\n/* Define to 1 if you have the declaration of `SCTP_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTP_SENDALL', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_SENDALL 0\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_ACK_SENT', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_PENDING 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_RECEIVED', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_UNORDERED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_UNORDERED 1\n\n/* Define to 1 if you have the declaration of `setrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_SETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `time2posix', and to 0 if you\n don't. */\n#define HAVE_DECL_TIME2POSIX 0\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n/* #undef HAVE_DOPRNT */\n\n/* Define if you have the 'end' symbol */\n#define HAVE_END_SYMBOL 1\n\n/* Define if you have a working fallocate() */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `fdatasync' function. */\n#define HAVE_FDATASYNC 1\n\n/* Define to 1 if you have the `finite' function. */\n#define HAVE_FINITE 1\n\n/* Define to 1 if you have the `flockfile' function. */\n#define HAVE_FLOCKFILE 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpsetmask' function. */\n/* #undef HAVE_FPSETMASK */\n\n/* Define to 1 if you have the `fstat' function. */\n#define HAVE_FSTAT 1\n\n/* Define if you have fwrite_unlocked */\n#define HAVE_FWRITE_UNLOCKED 1\n\n/* Define to 1 if you have a good `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `gethostbyname2' function. */\n#define HAVE_GETHOSTBYNAME2 1\n\n/* Define to flavour of gethostbyname_r */\n#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC\n\n/* Define to 1 if you have the `gethrtime' function. */\n/* #undef HAVE_GETHRTIME */\n\n/* define if gethrvtime() works and uses ioctl() to /proc/self */\n/* #undef HAVE_GETHRVTIME_PROCFS_IOCTL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n#define HAVE_GETIFADDRS 1\n\n/* Define to 1 if you have the `getipnodebyaddr' function. */\n/* #undef HAVE_GETIPNODEBYADDR */\n\n/* Define to 1 if you have the `getipnodebyname' function. */\n/* #undef HAVE_GETIPNODEBYNAME */\n\n/* Define to 1 if you have a good `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `gmtime_r' function. */\n#define HAVE_GMTIME_R 1\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n/* #undef HAVE_IEEEFP_H */\n\n/* Define to 1 if you have the `ieee_handler' function. */\n/* #undef HAVE_IEEE_HANDLER */\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define if ipv6 is present */\n#define HAVE_IN6 1\n\n/* Define to 1 if you have the variable in6addr_any declared. */\n#define HAVE_IN6ADDR_ANY 1\n\n/* Define to 1 if you have the variable in6addr_loopback declared. */\n#define HAVE_IN6ADDR_LOOPBACK 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Early linux used in_addr6 instead of in6_addr, define if you have this */\n/* #undef HAVE_IN_ADDR6_STRUCT */\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define if you have kstat */\n/* #undef HAVE_KSTAT */\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#define HAVE_LANGINFO_H 1\n\n/* Define to 1 if you have the `dl' library (-ldl). */\n#define HAVE_LIBDL 1\n\n/* Define to 1 if you have the `dlpi' library (-ldlpi). */\n/* #undef HAVE_LIBDLPI */\n\n/* Define to 1 if you have the <libdlpi.h> header file. */\n/* #undef HAVE_LIBDLPI_H */\n\n/* Define to 1 if you have the `inet' library (-linet). */\n/* #undef HAVE_LIBINET */\n\n/* Define to 1 if you have the `m' library (-lm). */\n#define HAVE_LIBM 1\n\n/* Define to 1 if you have the `util' library (-lutil). */\n#define HAVE_LIBUTIL 1\n\n/* Define to 1 if you have the `z' library (-lz). */\n/* #undef HAVE_LIBZ */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <linux/falloc.h> header file. */\n/* #undef HAVE_LINUX_FALLOC_H */\n\n/* Define to 1 if you have the `localtime_r' function. */\n#define HAVE_LOCALTIME_R 1\n\n/* Define to 1 if you have the <malloc.h> header file. */\n#define HAVE_MALLOC_H 1\n\n/* Define to 1 if you have the `mallopt' function. */\n#define HAVE_MALLOPT 1\n\n/* Define to 1 if you have the `memcpy' function. */\n#define HAVE_MEMCPY 1\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef HAVE_MIT_PTHREAD_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the `mremap' function. */\n#define HAVE_MREMAP 1\n\n/* Define if setsockopt() accepts multicast options */\n#define HAVE_MULTICAST_SUPPORT 1\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <netpacket/packet.h> header file. */\n#define HAVE_NETPACKET_PACKET_H 1\n\n/* Define to 1 if you have the <net/errno.h> header file. */\n/* #undef HAVE_NET_ERRNO_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the `nl_langinfo' function. */\n#define HAVE_NL_LANGINFO 1\n\n/* Define if you don't have a definition of INADDR_LOOPBACK */\n/* #undef HAVE_NO_INADDR_LOOPBACK */\n\n/* Define to 1 if you have the `openpty' function. */\n#define HAVE_OPENPTY 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `posix2time' function. */\n/* #undef HAVE_POSIX2TIME */\n\n/* Define to 1 if you have the `posix_fadvise' function. */\n#define HAVE_POSIX_FADVISE 1\n\n/* Define if you have a working posix_fallocate() */\n/* #undef HAVE_POSIX_FALLOCATE */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define if you have processor_bind functionality */\n/* #undef HAVE_PROCESSOR_BIND */\n\n/* Define if you have pset functionality */\n/* #undef HAVE_PSET */\n\n/* Define if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pty.h> header file. */\n#define HAVE_PTY_H 1\n\n/* Define if you have putc_unlocked */\n#define HAVE_PUTC_UNLOCKED 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the `res_gethostbyname' function. */\n/* #undef HAVE_RES_GETHOSTBYNAME */\n\n/* Define to 1 if you have the `sbrk' function. */\n#define HAVE_SBRK 1\n\n/* Define if you have sched_getaffinity/sched_setaffinity */\n#define HAVE_SCHED_xETAFFINITY 1\n\n/* Define to 1 if you have the `sctp_bindx' function. */\n/* #undef HAVE_SCTP_BINDX */\n\n/* Define to 1 if you have the <netinet/sctp.h> header file */\n#define HAVE_SCTP_H 1\n\n/* Define to 1 if you have the `sctp_peeloff' function. */\n/* #undef HAVE_SCTP_PEELOFF */\n\n/* Define to 1 if you have the <sdkddkver.h> header file. */\n/* #undef HAVE_SDKDDKVER_H */\n\n/* Define to 1 if you have the `sendfile' function. */\n#define HAVE_SENDFILE 1\n\n/* Define to 1 if you have the `sendfilev' function. */\n/* #undef HAVE_SENDFILEV */\n\n/* Define to 1 if you have the `setlocale' function. */\n#define HAVE_SETLOCALE 1\n\n/* Define to 1 if you have the `setsid' function. */\n#define HAVE_SETSID 1\n\n/* Define if we have socklen_t */\n#define HAVE_SOCKLEN_T 1\n\n/* define if you have the Solaris/ultrasparc /dev/perfmon interface */\n/* #undef HAVE_SOLARIS_SPARC_PERFMON */\n\n/* Define if you have SO_BSDCOMPAT flag on sockets */\n/* #undef HAVE_SO_BSDCOMPAT */\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the `strerror_r' function. */\n#define HAVE_STRERROR_R 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strlcat' function. */\n/* #undef HAVE_STRLCAT */\n\n/* Define to 1 if you have the `strlcpy' function. */\n/* #undef HAVE_STRLCPY */\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if `ifr_enaddr' is member of `struct ifreq'. */\n/* #undef HAVE_STRUCT_IFREQ_IFR_ENADDR */\n\n/* Define to 1 if `ifr_hwaddr' is member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `spp_flags' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1\n\n/* Define to 1 if `spp_pathmtu' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1\n\n/* Define to 1 if `spp_sackdelay' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1\n\n/* Define to 1 if `sre_data' is member of `struct sctp_remote_error'. */\n#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1\n\n/* Define to 1 if `ssf_data' is member of `struct sctp_send_failed'. */\n#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#define HAVE_SYSLOG_H 1\n\n/* Define if you have <sys/devpoll.h> header file. */\n/* #undef HAVE_SYS_DEVPOLL_H */\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define if you have <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define to 1 if you have the <sys/resource.h> header file */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/sdt.h> header file. */\n/* #undef HAVE_SYS_SDT_H */\n\n/* Define to 1 if you have the <sys/socketio.h> header file. */\n/* #undef HAVE_SYS_SOCKETIO_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/stropts.h> header file. */\n#define HAVE_SYS_STROPTS_H 1\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n#define HAVE_SYS_SYSCTL_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define if termcap functions exists */\n#define HAVE_TERMCAP 1\n\n/* Define to 1 if you have the `time2posix' function. */\n/* #undef HAVE_TIME2POSIX */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the <util.h> header file. */\n/* #undef HAVE_UTIL_H */\n\n/* Define to 1 if you have the <utmp.h> header file. */\n#define HAVE_UTMP_H 1\n\n/* Define to 1 if you have the `vfork' function. */\n#define HAVE_VFORK 1\n\n/* Define to 1 if you have the <vfork.h> header file. */\n/* #undef HAVE_VFORK_H */\n\n/* Define to 1 if you have the `vprintf' function. */\n#define HAVE_VPRINTF 1\n\n/* Define to 1 if you have a `wcwidth' function. */\n#define HAVE_WCWIDTH 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n/* #undef HAVE_WINSOCK2_H */\n\n/* Define to 1 if `fork' works. */\n#define HAVE_WORKING_FORK 1\n\n/* Define if you have a working posix_openpt implementation */\n#define HAVE_WORKING_POSIX_OPENPT 1\n\n/* Define to 1 if `vfork' works. */\n#define HAVE_WORKING_VFORK 1\n\n/* Define to 1 if you have the `writev' function. */\n#define HAVE_WRITEV 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n/* #undef HAVE_WS2TCPIP_H */\n\n/* Define to 1 if you have the `_brk' function. */\n/* #undef HAVE__BRK */\n\n/* Define if you have the '_end' symbol */\n#define HAVE__END_SYMBOL 1\n\n/* Define to 1 if you have the `_sbrk' function. */\n/* #undef HAVE__SBRK */\n\n/* Define to 1 if you have the `__brk' function. */\n/* #undef HAVE___BRK */\n\n/* Define to 1 if you have the `__sbrk' function. */\n#define HAVE___SBRK 1\n\n/* Define to enable HiPE */\n#define HIPE 1\n\n/* define if h_errno is declared (in some way) in a system header file */\n#define H_ERRNO_DECLARED 1\n\n/* Define if netdb.h needs struct sockaddr_in ans in.h CAN be included before\n */\n#define NETDB_H_NEEDS_IN_H 1\n\n/* Define if floating points exceptions are non-existing/not reliable */\n#define NO_FPE_SIGNALS \n\n/* Defined if no found C compiler can handle jump tables */\n/* #undef NO_JUMP_TABLE */\n\n/* Define if you dont have salen */\n#define NO_SA_LEN 1\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"\"\n\n/* Define if you wish to redefine FD_SETSIZE to be able to select on more fd\n */\n/* #undef REDEFINE_FD_SETSIZE */\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define the sbrk() argument type. */\n#define SBRK_ARG_TYPE intptr_t\n\n/* Define the sbrk() return type. */\n#define SBRK_RET_TYPE void *\n\n/* The size of a `AO_t', as computed by sizeof. */\n/* #undef SIZEOF_AO_T */\n\n/* The size of a `char', as computed by sizeof. */\n#define SIZEOF_CHAR 1\n\n/* The size of a `int', as computed by sizeof. */\n#define SIZEOF_INT 4\n\n/* The size of a `long', as computed by sizeof. */\n#define SIZEOF_LONG 8\n\n/* The size of a `long long', as computed by sizeof. */\n#define SIZEOF_LONG_LONG 8\n\n/* The size of a `off_t', as computed by sizeof. */\n#define SIZEOF_OFF_T 8\n\n/* The size of a `short', as computed by sizeof. */\n#define SIZEOF_SHORT 2\n\n/* The size of a `size_t', as computed by sizeof. */\n#define SIZEOF_SIZE_T 8\n\n/* The size of a `time_t', as computed by sizeof. */\n#define SIZEOF_TIME_T 8\n\n/* The size of a `void *', as computed by sizeof. */\n#define SIZEOF_VOID_P 8\n\n/* The size of a `__int128_t', as computed by sizeof. */\n#define SIZEOF___INT128_T 16\n\n/* The size of a `__int64', as computed by sizeof. */\n#define SIZEOF___INT64 0\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* define if the variable sys_errlist is declared in a system header file */\n#define SYS_ERRLIST_DECLARED \n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n#define TIME_WITH_SYS_TIME 1\n\n/* Define to 1 if your <sys/time.h> declares `struct tm'. */\n/* #undef TM_IN_SYS_TIME */\n\n/* Define if you want to use dtrace for dynamic tracing */\n/* #undef USE_DTRACE */\n\n/* Define if you want to use dynamic tracing */\n/* #undef USE_DYNAMIC_TRACE */\n\n/* Define if you have matherr() function and struct exception type */\n#define USE_MATHERR 1\n\n/* Define to enable hrvtime() on Linux systems with perfctr extension */\n/* #undef USE_PERFCTR */\n\n/* Define if select() should be used instead of poll() */\n/* #undef USE_SELECT */\n\n/* Define if you want to use systemtap for dynamic tracing */\n/* #undef USE_SYSTEMTAP */\n\n/* Define to enable VM dynamic trace probes */\n/* #undef USE_VM_PROBES */\n\n/* Define if windows.h includes winsock2.h */\n/* #undef WINDOWS_H_INCLUDES_WINSOCK2_H */\n\n/* Define to 1 if your processor stores words with the most significant byte\n first (like Motorola and SPARC, unlike Intel and VAX). */\n/* #undef WORDS_BIGENDIAN */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `long' if <sys/types.h> does not define. */\n/* #undef off_t */\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef pid_t */\n\n/* Define to `unsigned' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define as `fork' if `vfork' does not work. */\n/* #undef vfork */\n\n\n/* Redefine in6_addr. XXX this should be moved to the files where it's used? */\n#ifdef HAVE_IN_ADDR6_STRUCT\n#define in6_addr in_addr6\n#endif\n\n/* Define a reasonable default for INADDR_LOOPBACK */\n/* XXX this should be moved to the files where it's used? */\n#ifdef HAVE_NO_INADDR_LOOPBACK\n#define INADDR_LOOPBACK (u_long)0x7F000001\n#endif\n\n#ifdef REDEFINE_FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n\n#ifdef HAVE_GETHRVTIME_PROCFS_IOCTL\n#define HAVE_GETHRVTIME\n#endif\n\n#ifndef HAVE_FINITE\n# if defined(HAVE_ISINF) && defined(HAVE_ISNAN)\n# define USE_ISINF_ISNAN\n# endif\n#endif\n\n#if defined(DEBUG) && defined(USE_THREADS) && !defined(ERTS_ENABLE_LOCK_CHECK)\n#define ERTS_ENABLE_LOCK_CHECK 1\n#endif\n\n"}]}, + {beam_dynamic_libraries, + "\tlibutil.so.1 => /lib64/libutil.so.1 (0x00002b3e06a05000)\n\tlibdl.so.2 => /lib64/libdl.so.2 (0x00002b3e06b08000)\n\tlibm.so.6 => /lib64/libm.so.6 (0x00002b3e06c0c000)\n\tlibncurses.so.5 => /lib64/libncurses.so.5 (0x00002b3e06d62000)\n\tlibpthread.so.0 => /lib64/libpthread.so.0 (0x00002b3e06ec5000)\n\tlibrt.so.1 => /lib64/librt.so.1 (0x00002b3e06fdc000)\n\tlibc.so.6 => /lib64/libc.so.6 (0x00002b3e070e6000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00002b3e068e9000)\n"}, + {environment_erts, + [{"BINDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"}, + {"DIALYZER_EMULATOR",false}, + {"CERL_DETACHED_PROG",false}, + {"EMU","beam"}, + {"ERL_CONSOLE_MODE",false}, + {"ERL_CRASH_DUMP",false}, + {"ERL_CRASH_DUMP_NICE",false}, + {"ERL_CRASH_DUMP_SECONDS",false}, + {"ERL_EPMD_PORT",false}, + {"ERL_EMULATOR_DLL",false}, + {"ERL_FULLSWEEP_AFTER",false}, + {"ERL_LIBS",false}, + {"ERL_MALLOC_LIB",false}, + {"ERL_MAX_PORTS",false}, + {"ERL_MAX_ETS_TABLES",false}, + {"ERL_NO_VFORK",false}, + {"ERL_NO_KERNEL_POLL",false}, + {"ERL_THREAD_POOL_SIZE",false}, + {"ERLC_EMULATOR",false}, + {"ESCRIPT_EMULATOR",false}, + {"HOME","/home/otptest"}, + {"HOMEDRIVE",false}, + {"HOMEPATH",false}, + {"LANG","sv_SE.UTF-8"}, + {"LC_ALL",false}, + {"LC_CTYPE",false}, + {"PATH", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"}, + {"PROGNAME","erl"}, + {"RELDIR",false}, + {"ROOTDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"}, + {"TERM","xterm-256color"}, + {"COMSPEC",false}, + {"HEART_COMMAND",false}, + {"RUN_ERL_LOG_ALIVE_MINUTES",false}, + {"RUN_ERL_LOG_ACTIVITY_MINUTES",false}, + {"RUN_ERL_LOG_ALIVE_FORMAT",false}, + {"RUN_ERL_LOG_ALIVE_IN_UTC",false}, + {"RUN_ERL_LOG_GENERATIONS",false}, + {"RUN_ERL_LOG_MAXSIZE",false}, + {"RUN_ERL_DISABLE_FLOWCNTRL",false}, + {"CALLER_DRV_USE_OUTPUTV",false}, + {"ERL_INET_GETHOST_DEBUG",false}, + {"ERL_EFILE_THREAD_SHORT_CIRCUIT",false}, + {"ERL_WINDOW_TITLE",false}, + {"ERL_ABORT_ON_FAILURE",false}, + {"TTYSL_DEBUG_LOG",false}]}, + {environment, + [{"JAVA_ROOT","/usr/lib64/jvm/java"}, + {"COLORTERM","1"}, + {"LC_NAME","sv_SE.UTF-8"}, + {"G_BROKEN_FILENAMES","1"}, + {"LESSCLOSE","lessclose.sh %s %s"}, + {"LC_TIME","sv_SE.UTF-8"}, + {"DISPLAY","localhost:11.0"}, + {"INFOPATH", + "/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info"}, + {"LPDEST","lw5"}, + {"PKG_CONFIG_PATH", + "/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig"}, + {"LESSOPEN","lessopen.sh %s"}, + {"XDG_DATA_DIRS", + "/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/"}, + {"ACLOCAL_FLAGS","-I /opt/gnome/share/aclocal"}, + {"PRINTER","lw5"}, + {"VISUAL","vim"}, + {"GTK_PATH64", + "/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0"}, + {"CVS_RSH","ssh"}, + {"LOGIN_PROFILE_RUN","true"}, + {"G_FILENAME_ENCODING","@locale,UTF-8,ISO-8859-15,CP1252"}, + {"LESS","-M -I"}, + {"MACHTYPE","x86_64-suse-linux"}, + {"LOGNAME","otptest"}, + {"GTK_PATH", + "/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0"}, + {"WINDOWMANAGER","/usr/X11R6/bin/gnome"}, + {"LS_OPTIONS","-N --color=none -T 0"}, + {"LESS_ADVANCED_PREPROCESSOR","no"}, + {"OSTYPE","linux"}, + {"QT_SYSTEM_DIR","/usr/share/desktop-data"}, + {"JDK_HOME","/usr/lib64/jvm/java"}, + {"SHLVL","1"}, + {"HOME","/home/otptest"}, + {"https_proxy","http://www-proxy.ericsson.se:8080"}, + {"SDK_HOME","/usr/lib64/jvm/java"}, + {"LC_MEASUREMENT","sv_SE.UTF-8"}, + {"PYTHONSTARTUP","/etc/pythonstart"}, + {"PROGNAME","erl"}, + {"LANG","sv_SE.UTF-8"}, + {"EDITOR","vim"}, + {"JAVA_HOME","/usr/lib64/jvm/java"}, + {"INPUTRC","/etc/inputrc"}, + {"PWD", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20"}, + {"LC_IDENTIFICATION","sv_SE.UTF-8"}, + {"JAVA_BINDIR","/usr/lib64/jvm/java/bin"}, + {"SSH_SENDS_LOCALE","yes"}, + {"CPU","x86_64"}, + {"LC_MESSAGES","POSIX"}, + {"MAIL","/var/mail/otptest"}, + {"PATH", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"}, + {"MINICOM","-c on"}, + {"XDG_CONFIG_DIRS", + "/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/"}, + {"CSHEDIT","emacs"}, + {"PAGER","less"}, + {"HOSTTYPE","x86_64"}, + {"ENV","/home/otptest/.bashrc"}, + {"ROOTDIR", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"}, + {"XNLSPATH","/usr/X11R6/lib/X11/nls"}, + {"LS_COLORS",[]}, + {"LC_TELEPHONE","sv_SE.UTF-8"}, + {"GROFF_NO_SGR","yes"}, + {"JRE_HOME","/usr/lib64/jvm/java/jre"}, + {"USER","otptest"}, + {"SSH_TTY","/dev/pts/3"}, + {"MORE","-sl"}, + {"LC_NUMERIC","sv_SE.UTF-8"}, + {"BINDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"}, + {"PROFILEREAD","true"}, + {"HISTSIZE","1000"}, + {"HOST","duilin"}, + {"TERM","xterm-256color"}, + {"SHELL","/bin/sh"}, + {"GNOME2_PATH","/usr/local:/opt/gnome:/usr"}, + {"XKEYSYMDB","/usr/X11R6/lib/X11/XKeysymDB"}, + {"HOSTNAME","duilin"}, + {"LC_MONETARY","sv_SE.UTF-8"}, + {"EMU","beam"}, + {"LC_ADDRESS","sv_SE.UTF-8"}, + {"LASER","lw5"}, + {"NNTPSERVER","news"}, + {"INFODIR","/usr/local/info:/usr/share/info:/usr/info"}, + {"MANPATH", + "/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man"}, + {"LESSKEY","/etc/lesskey.bin"}, + {"LC_PAPER","sv_SE.UTF-8"}]}]}. diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml index 80de9738f1..21c417f0c1 100644 --- a/lib/snmp/doc/src/notes.xml +++ b/lib/snmp/doc/src/notes.xml @@ -34,6 +34,86 @@ <section> + <title>SNMP Development Toolkit 4.24.1</title> + <p>Version 4.24.1 supports code replacement in runtime from/to + version 4.24, 4.23.1 and 4.23. </p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[agent,manager] Updated to support the new crypto interface. </p> + <p>Own Id: OTP-11009</p> + </item> + + </list> +--> + + </section> + + <section> + <title>Fixed Bugs and Malfunctions</title> +<!-- + <p>-</p> +--> + + <list type="bulleted"> + <item> + <p>[agent] Reading the value of the vacmViewTreeFamilyMask returns + it in the wrong (internal bitlist) format. </p> + <p>The vacmViewTreeFamilyMask is defined as a bit string in the MIB + (OCTET STRING). Internally a bitlist (list of 1's and 0's, + see <seealso marker="snmp_agent_config_files#vacm">vacm config file</seealso> + for more info) is used. + However, the MIB implementation assumed the latter, effectively + rendering all attempts to read/set masks via SNMP unsuccessful. </p> + <p>Since the mask is used in hot paths (e.g. access permission checks + for each SNMP operation, the bitlist representation of the mask has + benefits (e.g. faster processing). Reading/writing the view mask + objects is less time-critical. Therefore, to fix the issue, convert + between the bitlist (internal) representation and bitstring + (external) when the vacmViewTreeFamilyMask objects are accessed. </p> + <p>Also, the check of the vacm config file was invalid with + regard to the mask value. It was assumed to be a proper oid, which + is not strictly the case (see bitlist above). </p> + <p>Own Id: OTP-11177</p> + <p>Stefan Zegenhagen</p> + </item> + + <item> + <p>[agent] The counter increment function in the local-db was + incorrect. It did not handle counter wrap correctly. </p> + <p>Own Id: OTP-11192</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[manager] The old Addr-and-Port based API functions, previously + long deprecated and marked for deletion in R16B, has now been + removed. </p> + <p>Own Id: OTP-10027</p> + </item> + + </list> +--> + </section> + + </section> <!-- 4.24.1 --> + + + <section> <title>SNMP Development Toolkit 4.24</title> <p>Version 4.24 supports code replacement in runtime from/to version 4.23.1 and 4.23. </p> diff --git a/lib/snmp/doc/src/snmp_agent_config_files.xml b/lib/snmp/doc/src/snmp_agent_config_files.xml index bd5c537522..866b00b77b 100644 --- a/lib/snmp/doc/src/snmp_agent_config_files.xml +++ b/lib/snmp/doc/src/snmp_agent_config_files.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>1997</year><year>2011</year> + <year>1997</year><year>2013</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -32,13 +32,15 @@ <file>snmp_agent_config_files.xml</file> </header> <p>All configuration data must be included in configuration files - that are located in the configuration directory. The name of this - directory is given in the <c>config_dir</c> configuration - parameter. These files are read at start-up, and are used to - initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB, - SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB, - SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB - (refer to the <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> for a description of the MIBs). </p> + that are located in the configuration directory. The name of this + directory is given in the <c>config_dir</c> configuration + parameter. These files are read at start-up, and are used to + initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB, + SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB, + SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB + (refer to the + <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> + for a description of the MIBs). </p> <p>The files are: </p> <list type="bulleted"> <item> @@ -79,35 +81,35 @@ </item> </list> <p>The directory where the configuration files are found is given as - a parameter to the agent. </p> + a parameter to the agent. </p> <p>The entry format in all files are Erlang terms, separated by a - '<em>.</em>' and a <em>newline</em>. In the following sections, the - formats of these terms are described. Comments may be specified as - ordinary Erlang comments. </p> + '<em>.</em>' and a <em>newline</em>. In the following sections, the + formats of these terms are described. Comments may be specified as + ordinary Erlang comments. </p> <p>Syntax errors in these files are discovered and reported with the - function <c>config_err/2</c> of the error report module at start-up. </p> - + function <c>config_err/2</c> of the error report module at start-up. </p> + + <marker id="agent_information"></marker> + <section> - <marker id="agent_information"></marker> <title>Agent Information</title> <p>The agent information should be stored in a file called - <c>agent.conf</c>. - </p> - <p>Each entry is a tuple of size two: - </p> + <c>agent.conf</c>. </p> + <p>Each entry is a tuple of size two:</p> <p><c>{AgentVariable, Value}.</c></p> <list type="bulleted"> - <item><c>AgentVariable</c> is one of the variables is - SNMP-FRAMEWORK-MIB or one of the internal variables - <c>intAgentUDPPort</c>, which defines which UDP port the agent - listens to, or <c>intAgentIpAddress</c>, which defines the IP - address of the agent. + <item> + <p><c>AgentVariable</c> is one of the variables is + SNMP-FRAMEWORK-MIB or one of the internal variables + <c>intAgentUDPPort</c>, which defines which UDP port the agent + listens to, or <c>intAgentIpAddress</c>, which defines the IP + address of the agent. </p> </item> - <item><c>Value</c> is the value for the variable. + <item> + <p><c>Value</c> is the value for the variable.</p> </item> </list> - <p>The following example shows a <c>agent.conf</c> file: - </p> + <p>The following example shows a <c>agent.conf</c> file: </p> <pre> {intAgentUDPPort, 4000}. {intAgentIpAddress,[141,213,11,24]}. @@ -115,49 +117,47 @@ {snmpEngineMaxPacketSize, 484}. </pre> <p>The value of <c>snmpEngineID</c> is a string, which for a - deployed agent should have a very specific structure. See - RFC 2271/2571 for details. - </p> + deployed agent should have a very specific structure. See + RFC 2271/2571 for details.</p> + + <marker id="context"></marker> </section> <section> - <marker id="context"></marker> <title>Contexts</title> <p>The context information should be stored in a file called - <c>context.conf</c>. The default context <c>""</c> - need not be present. - </p> + <c>context.conf</c>. The default context <c>""</c> + need not be present.</p> <p>Each row defines a context in the agent. This information is - used in the table <c>vacmContextTable</c> in the - SNMP-VIEW-BASED-ACM-MIB. - </p> - <p>Each entry is a term: - </p> + used in the table <c>vacmContextTable</c> in the + SNMP-VIEW-BASED-ACM-MIB.</p> + <p>Each entry is a term:</p> <p><c>ContextName.</c></p> <list type="bulleted"> - <item><c>ContextName</c> is a string. + <item> + <p><c>ContextName</c> is a string.</p> </item> </list> + + <marker id="system_information"></marker> </section> <section> - <marker id="system_information"></marker> <title>System Information</title> <p>The system information should be stored in a file called - <c>standard.conf</c>. - </p> - <p>Each entry is a tuple of size two: - </p> + <c>standard.conf</c>.</p> + <p>Each entry is a tuple of size two:</p> <p><c>{SystemVariable, Value}.</c></p> <list type="bulleted"> - <item><c>SystemVariable</c> is one of the variables in the - system group, or <c>snmpEnableAuthenTraps</c>. + <item> + <p><c>SystemVariable</c> is one of the variables in the + system group, or <c>snmpEnableAuthenTraps</c>. </p> </item> - <item><c>Value</c> is the value for the variable. + <item> + <p><c>Value</c> is the value for the variable. </p> </item> </list> - <p>The following example shows a valid <c>standard.conf</c> file: - </p> + <p>The following example shows a valid <c>standard.conf</c> file: </p> <pre> {sysDescr, "Erlang SNMP agent"}. {sysObjectID, [1,2,3]}. @@ -167,59 +167,60 @@ {snmpEnableAuthenTraps, enabled}. </pre> <p>A value must be provided for all variables, which lack default - values in the MIB. - </p> + values in the MIB. </p> + + <marker id="community"></marker> </section> <section> - <marker id="community"></marker> <title>Communities</title> <p>The community information should be stored in a file called - <c>community.conf</c>. It must be present if the agent is - configured for SNMPv1 or SNMPv2c. - </p> + <c>community.conf</c>. It must be present if the agent is + configured for SNMPv1 or SNMPv2c. </p> <p>An SNMP <em>community</em> is a relationship between an SNMP agent and a set of SNMP managers that defines authentication, access control and proxy characteristics. </p> <p>The corresponding table is <c>snmpCommunityTable</c> in the - SNMP-COMMUNITY-MIB. </p> + SNMP-COMMUNITY-MIB. </p> <p>Each entry is a term: </p> - <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c></p> + <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c> </p> <list type="bulleted"> - <item><c>CommunityIndex</c> is a non-empty string. + <item> + <p><c>CommunityIndex</c> is a non-empty string.</p> </item> - <item><c>CommunityName</c> is a string. + <item> + <p><c>CommunityName</c> is a string.</p> </item> - <item><c>SecurityName</c> is a string. + <item> + <p><c>SecurityName</c> is a string.</p> </item> - <item><c>ContextName</c> is a string. + <item> + <p><c>ContextName</c> is a string.</p> </item> - <item><c>TransportTag</c> is a string. + <item> + <p><c>TransportTag</c> is a string.</p> </item> </list> + + <marker id="vacm"></marker> </section> <section> - <marker id="vacm"></marker> <title>MIB Views for VACM</title> <p>The information about MIB Views for VACM should be stored in a - file called - <c>vacm.conf</c>. - </p> + file called <c>vacm.conf</c>.</p> <p>The corresponding tables are <c>vacmSecurityToGroupTable</c>, - <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the - SNMP-VIEW-BASED-ACM-MIB. - </p> + <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the + SNMP-VIEW-BASED-ACM-MIB.</p> <p>Each entry is one of the terms, one entry corresponds to one - row in one of the tables. - </p> + row in one of the tables.</p> <p><c>{vacmSecurityToGroup, SecModel, SecName, GroupName}.</c></p> <p><c>{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}.</c></p> <p><c>{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}.</c></p> <list type="bulleted"> <item> <p><c>SecModel</c> is <c>any</c>, <c>v1</c>, <c>v2c</c>, or - <c>usm</c>.</p> + <c>usm</c>.</p> </item> <item> <p><c>SecName</c> is a string.</p> @@ -232,7 +233,7 @@ </item> <item> <p><c>SecLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c>, - or <c>authPriv</c></p> + or <c>authPriv</c></p> </item> <item> <p><c>Match</c> is <c>prefix</c> or <c>exact</c>.</p> @@ -244,8 +245,7 @@ <p><c>WriteView</c> is a string.</p> </item> <item> - <p><c>NotifyView</c> is a string. - </p> + <p><c>NotifyView</c> is a string.</p> </item> <item> <p><c>ViewIndex</c> is an integer.</p> @@ -258,33 +258,29 @@ </item> <item> <p><c>ViewMask</c> is either <c>null</c> or a list of ones and - zeros. Ones nominate that an exact match is used for this - sub-identifier. Zeros are wild-cards which match any - sub-identifier. If the mask is shorter than the sub-tree, the - tail is regarded as all ones. <c>null</c> is shorthand for a - mask with all ones.</p> + zeros. Ones nominate that an exact match is used for this + sub-identifier. Zeros are wild-cards which match any + sub-identifier. If the mask is shorter than the sub-tree, the + tail is regarded as all ones. <c>null</c> is shorthand for a + mask with all ones. </p> </item> </list> + + <marker id="usm"></marker> </section> <section> - <marker id="usm"></marker> <title>Security data for USM</title> <p>The information about Security data for USM should be stored in a - file called - <c>usm.conf</c>, which must be present if the agent is configured - for SNMPv3. - </p> + file called <c>usm.conf</c>, which must be present if the agent is + configured for SNMPv3. </p> <p>The corresponding table is <c>usmUserTable</c> in the - SNMP-USER-BASED-SM-MIB. - </p> - <p>Each entry is a term: - </p> + SNMP-USER-BASED-SM-MIB.</p> + <p>Each entry is a term:</p> <p><c>{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}.</c></p> <list type="bulleted"> <item> - <p><c>EngineID</c> is a string. - </p> + <p><c>EngineID</c> is a string.</p> </item> <item> <p><c>UserName</c> is a string.</p> @@ -297,7 +293,7 @@ </item> <item> <p><c>AuthP</c> is a <c>usmNoAuthProtocol</c>, - <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p> + <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p> </item> <item> <p><c>AuthKeyC</c> is a string.</p> @@ -307,7 +303,7 @@ </item> <item> <p><c>PrivP</c> is a <c>usmNoPrivProtocol</c>, - <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> + <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> </item> <item> <p><c>PrivKeyC</c> is a string.</p> @@ -319,66 +315,59 @@ <p><c>Public</c> is a string.</p> </item> <item> - <p><c>AuthKey</c> is a list (of integer). This is the User's secret - localized authentication key. It is not visible in the MIB. The length - of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, and - 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p> + <p><c>AuthKey</c> is a list (of integer). This is the User's secret + localized authentication key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, + and 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p> </item> <item> <p><c>PrivKey</c> is a list (of integer). This is the User's secret - localized encryption key. It is not visible in the MIB. The length - of this key needs to be 16 if <c>usmDESPrivProtocol</c> or - <c>usmAesCfb128Protocol</c> is used. - </p> + localized encryption key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmDESPrivProtocol</c> or + <c>usmAesCfb128Protocol</c> is used. </p> </item> </list> + + <marker id="notify"></marker> </section> <section> - <marker id="notify"></marker> <title>Notify Definitions</title> <p>The information about Notify Definitions should be stored in a - file called - <c>notify.conf</c>. - </p> + file called <c>notify.conf</c>. </p> <p>The corresponding table is <c>snmpNotifyTable</c> in the - SNMP-NOTIFICATION-MIB. - </p> - <p>Each entry is a term: - </p> + SNMP-NOTIFICATION-MIB.</p> + <p>Each entry is a term:</p> <p><c>{NotifyName, Tag, Type}.</c></p> <list type="bulleted"> <item> - <p><c>NotifyName</c> is a unique non-empty string. - </p> + <p><c>NotifyName</c> is a unique non-empty string.</p> </item> <item> - <p><c>Tag</c> is a string. - </p> + <p><c>Tag</c> is a string.</p> </item> <item> - <p><c>Type</c> is <c>trap</c> or <c>inform</c>. - </p> + <p><c>Type</c> is <c>trap</c> or <c>inform</c>.</p> </item> </list> + + <marker id="target_addr"></marker> </section> <section> - <marker id="target_addr"></marker> <title>Target Address Definitions</title> <p>The information about Target Address Definitions should be - stored in a file called <c>target_addr.conf</c>. </p> + stored in a file called <c>target_addr.conf</c>. </p> <p>The corresponding tables are <c>snmpTargetAddrTable</c> in the - SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the - SNMP-COMMUNITY-MIB. </p> + SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the + SNMP-COMMUNITY-MIB. </p> <p>Each entry is a term: </p> <p><c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId}.</c> <br></br> or <br></br> <c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> <br></br> or <br></br> -<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c></p> +<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> </p> <list type="bulleted"> <item> - <p><c>TargetName</c> is a unique non-empty string. - </p> + <p><c>TargetName</c> is a unique non-empty string. </p> </item> <item> <p><c>Domain</c> is one of the atoms: @@ -414,40 +403,37 @@ </item> </list> <p>Note that if <c>EngineId</c> has the value <c>discovery</c>, - the agent cannot send - <c>inform</c> messages to that manager until it has performed the - <em>discovery</em> process with that manager. </p> + the agent cannot send + <c>inform</c> messages to that manager until it has performed the + <em>discovery</em> process with that manager. </p> + + <marker id="target_params"></marker> </section> <section> - <marker id="target_params"></marker> <title>Target Parameters Definitions</title> <p>The information about Target Parameters Definitions should be - stored in a file called <c>target_params.conf</c>. </p> + stored in a file called <c>target_params.conf</c>. </p> <p>The corresponding table is <c>snmpTargetParamsTable</c> in the - SNMP-TARGET-MIB. </p> + SNMP-TARGET-MIB. </p> <p>Each entry is a term: </p> <p><c>{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}.</c></p> <list type="bulleted"> <item> - <p><c>ParamsName</c> is a unique non-empty string. - </p> + <p><c>ParamsName</c> is a unique non-empty string. </p> </item> <item> <p><c>MPModel</c> is <c>v1</c>, <c>v2c</c> or <c>v3</c></p> </item> <item> - <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>. - </p> + <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>.</p> </item> <item> - <p><c>SecurityName</c> is a string. - </p> + <p><c>SecurityName</c> is a string.</p> </item> <item> <p><c>SecurityLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c> - or <c>authPriv</c>. - </p> + or <c>authPriv</c>. </p> </item> </list> </section> diff --git a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl index ad9540e886..c0177b1cea 100644 --- a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl +++ b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1999-2012. All Rights Reserved. +%% Copyright Ericsson AB 1999-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -49,6 +49,14 @@ -endif. +-type internal_view_mask() :: null | [internal_view_mask_element()]. +-type internal_view_mask_element() :: 0 | 1. + +-type external_view_mask() :: octet_string(). % At most length of 16 octet +-type octet_string() :: [octet()]. +-type octet() :: byte(). + + %%----------------------------------------------------------------- %% Func: configure/1 %% Args: Dir is the directory where the configuration files are found. @@ -160,14 +168,7 @@ check_vacm({vacmViewTreeFamily, ViewName, Tree, Type, Mask}) -> {ok, TypeVal} = snmp_conf:check_atom(Type, [{included, ?view_included}, {excluded, ?view_excluded}]), - MaskVal = - case (catch snmp_conf:check_atom(Mask, [{null, []}])) of - {error, _} -> - snmp_conf:check_oid(Mask), - Mask; - {ok, X} -> - X - end, + {ok, MaskVal} = snmp_conf:check_imask(Mask), Vacm = {ViewName, Tree, MaskVal, TypeVal, ?'StorageType_nonVolatile', ?'RowStatus_active'}, {ok, {vacmViewTreeFamily, Vacm}}; @@ -194,8 +195,8 @@ init_tabs(Sec2Group, Access, View) -> ok. init_sec2group_table([Row | T]) -> -%% ?vtrace("init security-to-group table: " -%% "~n Row: ~p",[Row]), + %% ?vtrace("init security-to-group table: " + %% "~n Row: ~p",[Row]), Key1 = element(1, Row), Key2 = element(2, Row), Key = [Key1, length(Key2) | Key2], @@ -953,13 +954,23 @@ verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilySubtree, Tree) -> wrongValue(?vacmViewTreeFamilySubtree) end; verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilyMask, Mask) -> + %% Mask here is in the "external" format. That is, according + %% to the MIB, which means that its an OCTET STRING of max 16 + %% octets. + %% We however store the mask as a list of 1's (exact) and + %% 0's (wildcard), which means we have to convert the mask. case Mask of - null -> []; - [] -> []; + %% The Mask can only have this value if the vacmViewTreeFamilyTable + %% is called locally! + null -> + []; + [] -> + []; _ -> - case (catch snmp_conf:check_oid(Mask)) of - ok -> - Mask; + %% Check and convert to our internal format + case check_mask(Mask) of + {ok, IMask} -> + IMask; _ -> wrongValue(?vacmViewTreeFamilyMask) end @@ -977,6 +988,60 @@ verify_vacmViewTreeFamilyTable_col(_, Val) -> Val. +check_mask(Mask) when is_list(Mask) andalso (length(Mask) =< 16) -> + try + begin + {ok, emask2imask(Mask)} + end + catch + throw:{error, _} -> + {error, {bad_mask, Mask}}; + T:E -> + {error, {bad_mask, Mask, T, E}} + end; +check_mask(BadMask) -> + {error, {bad_mask, BadMask}}. + +-spec emask2imask(EMask :: external_view_mask()) -> + IMask :: internal_view_mask(). + +%% Convert an External Mask (OCTET STRING) to Internal Mask (list of 0 or 1) +emask2imask(EMask) -> + lists:flatten([octet2bits(Octet) || Octet <- EMask]). + +octet2bits(Octet) + when is_integer(Octet) andalso (Octet >= 16#00) andalso (16#FF >= Octet) -> + <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>> = <<Octet>>, + [A, B, C, D, E, F, G, H]; +octet2bits(BadOctet) -> + throw({error, {bad_octet, BadOctet}}). + +-spec imask2emask(IMask :: internal_view_mask()) -> + EMask :: external_view_mask(). + +%% Convert an Internal Mask (list of 0 or 1) to External Mask (OCTET STRING) +imask2emask(IMask) -> + imask2emask(IMask, []). + +imask2emask([], EMask) -> + lists:reverse(EMask); +imask2emask(IMask, EMask) -> + %% Make sure we have atleast 8 bits + %% (maybe extend with 1's) + IMask2 = + case length(IMask) of + Small when Small < 8 -> + IMask ++ lists:duplicate(8-Small, 1); + _ -> + IMask + end, + %% Extract 8 bits + [A, B, C, D, E, F, G, H | IMaskRest] = IMask2, + <<Octet:8>> = <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>>, + imask2emask(IMaskRest, [Octet | EMask]). + + + table_next(Name, RestOid) -> snmp_generic:table_next(db(Name), RestOid). @@ -1014,11 +1079,41 @@ stc(vacmSecurityToGroupTable) -> ?vacmSecurityToGroupStorageType; stc(vacmViewTreeFamilyTable) -> ?vacmViewTreeFamilyStorageType. next(Name, RowIndex, Cols) -> - snmp_generic:handle_table_next(db(Name), RowIndex, Cols, - fa(Name), foi(Name), noc(Name)). + Result = snmp_generic:handle_table_next(db(Name), RowIndex, Cols, + fa(Name), foi(Name), noc(Name)), + externalize_next(Name, Result). get(Name, RowIndex, Cols) -> - snmp_generic:handle_table_get(db(Name), RowIndex, Cols, foi(Name)). + Result = snmp_generic:handle_table_get(db(Name), RowIndex, Cols, + foi(Name)), + externalize_get(Name, Cols, Result). + + +externalize_next(Name, Result) when is_list(Result) -> + F = fun({[Col | _] = Idx, Val}) -> {Idx, externalize(Name, Col, Val)}; + (Other) -> Other + end, + [F(R) || R <- Result]; +externalize_next(_, Result) -> + Result. + + +externalize_get(Name, Cols, Result) when is_list(Result) -> + %% Patch returned values + F = fun({Col, {value, Val}}) -> {value, externalize(Name, Col, Val)}; + ({_, Other}) -> Other + end, + %% Merge column numbers and return values. there must be as much + %% return values as there are columns requested. And then patch all values + [F(R) || R <- lists:zip(Cols, Result)]; +externalize_get(_, _, Result) -> + Result. + +externalize(vacmViewTreeFamilyTable, ?vacmViewTreeFamilyMask, Val) -> + imask2emask(Val); +externalize(_, _, Val) -> + Val. + wrongValue(V) -> throw({wrongValue, V}). diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl index 2c0cad807a..5198c6ec4e 100644 --- a/lib/snmp/src/agent/snmpa_local_db.erl +++ b/lib/snmp/src/agent/snmpa_local_db.erl @@ -583,7 +583,7 @@ handle_cast({variable_inc, Name, Db, N}, State) -> {value, Val} -> Val; _ -> 0 end, - insert(Db, Name, M+N rem 4294967296, State), + insert(Db, Name, (M+N) rem 4294967296, State), {noreply, State}; handle_cast({verbosity,Verbosity}, State) -> diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src index 7ffa4a725d..16b626111b 100644 --- a/lib/snmp/src/app/snmp.appup.src +++ b/lib/snmp/src/app/snmp.appup.src @@ -17,18 +17,44 @@ %% %CopyrightEnd% %% + {"%VSN%", %% ----- U p g r a d e ------------------------------------------------------- +%% Instruction examples: +%% {restart_application, snmp} +%% {load_module, snmp_pdus, soft_purge, soft_purge, []} +%% {update, snmpa_local_db, soft, soft_purge, soft_purge, []} +%% {add_module, snmpm_net_if_mt} + [ + {"4.24", + [ + {load_module, snmp_conf, soft_purge, soft_purge, []}, + {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge, + [snmp_conf]}, + {update, snmpa_local_db, soft, soft_purge, soft_purge, []} + ] + }, {"4.23.1", [{restart_application, snmp}]}, {"4.23", [{restart_application, snmp}]} ], %% ------D o w n g r a d e --------------------------------------------------- +%% Instruction examples: +%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}} + [ + {"4.24", + [ + {load_module, snmp_conf, soft_purge, soft_purge, []}, + {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge, + [snmp_conf]}, + {update, snmpa_local_db, soft, soft_purge, soft_purge, []} + ] + }, {"4.23.1", [{restart_application, snmp}]}, {"4.23", [{restart_application, snmp}]} ] diff --git a/lib/snmp/src/misc/snmp_conf.erl b/lib/snmp/src/misc/snmp_conf.erl index e1e7fab57b..46625989d5 100644 --- a/lib/snmp/src/misc/snmp_conf.erl +++ b/lib/snmp/src/misc/snmp_conf.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. +%% Copyright Ericsson AB 1996-2013. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -50,6 +50,7 @@ check_packet_size/1, check_oid/1, + check_imask/1, check_emask/1, check_mp_model/1, check_sec_model/1, check_sec_model/2, check_sec_model/3, @@ -488,6 +489,7 @@ do_check_timer(WaitFor, Factor, Incr, Retry) -> check_integer(Retry, {gte, 0}), ok. + %% --------- all_domains() -> @@ -618,6 +620,37 @@ check_oid(X) -> %% --------- +%% Check a (view) mask in the internal form (all 0 and 1): +check_imask(null) -> + {ok, []}; +check_imask(IMask) when is_list(IMask) -> + do_check_imask(IMask), + {ok, IMask}. + +do_check_imask([0|IMask]) -> + do_check_imask(IMask); +do_check_imask([1|IMask]) -> + do_check_imask(IMask); +do_check_imask([X|_]) -> + error({invalid_internal_mask_element, X}). + + +%% Check a (view) mask in the external form (according to MIB, +%% an OCTET STRING of at most length 16). +check_emask(EMask) when is_list(EMask) andalso (length(EMask) =< 16) -> + do_check_emask(EMask). + +do_check_emask([]) -> + ok; +do_check_emask([X|EMask]) + when is_integer(X) andalso (X >= 16#00) andalso (X =< 16#FF) -> + do_check_emask(EMask); +do_check_emask([X|_]) -> + error({invalid_external_mask_element, X}). + + +%% --------- + all_integer([H|T]) when is_integer(H) -> all_integer(T); all_integer([_H|_T]) -> false; all_integer([]) -> true. diff --git a/lib/snmp/test/Makefile b/lib/snmp/test/Makefile index 546d46a002..f22b7ea8ee 100644 --- a/lib/snmp/test/Makefile +++ b/lib/snmp/test/Makefile @@ -86,7 +86,7 @@ RELSYSDIR = $(RELEASE_PATH)/snmp_test # SNMP FLAGS # ---------------------------------------------------- ifeq ($(SNMP_DEBUG),) - SNMP_DEBUG = d + # SNMP_DEBUG = d endif ifeq ($(SNMP_DEBUG),e) diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk index 0e48e7ea56..e987649e11 100644 --- a/lib/snmp/vsn.mk +++ b/lib/snmp/vsn.mk @@ -18,6 +18,6 @@ # %CopyrightEnd% APPLICATION = snmp -SNMP_VSN = 4.24 +SNMP_VSN = 4.24.1 PRE_VSN = APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)" diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml index bd0d3d49dd..141d3df38e 100644 --- a/lib/ssh/doc/src/ssh.xml +++ b/lib/ssh/doc/src/ssh.xml @@ -88,6 +88,7 @@ number for SSH.</d> <v>Options = [{Option, Value}]</v> <v>Timeout = infinity | integer(milliseconds)</v> + <d>Negotiation timeout, for connection timeout use the option <c>{connect_timeout, timeout()}</c>.</d> </type> <desc> <p>Connects to an SSH server. No channel is started. This is done diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl index da5750b6c3..4fd347ba8f 100644 --- a/lib/ssh/src/ssh.hrl +++ b/lib/ssh/src/ssh.hrl @@ -127,7 +127,8 @@ userauth_supported_methods , % userauth_methods, userauth_preference, - available_host_keys + available_host_keys, + authenticated = false }). -record(alg, diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index df6175e27c..9de4dd5967 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -426,10 +426,10 @@ userauth(#ssh_msg_userauth_info_response{} = Msg, language = "en"}, State) end; -userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client}, +userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client} = Ssh, manager = Pid} = State) -> Pid ! ssh_connected, - {next_state, connected, next_packet(State)}; + {next_state, connected, next_packet(State#state{ssh_params = Ssh#ssh{authenticated = true}})}; userauth(#ssh_msg_userauth_failure{}, #state{ssh_params = #ssh{role = client, diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl index beaffdc025..682d766d99 100644 --- a/lib/ssh/src/ssh_transport.erl +++ b/lib/ssh/src/ssh_transport.erl @@ -206,6 +206,7 @@ key_exchange_init_msg(Ssh0) -> kex_init(#ssh{role = Role, opts = Opts, available_host_keys = HostKeyAlgs}) -> Random = ssh_bits:random(16), Compression = case proplists:get_value(compression, Opts, none) of + openssh_zlib -> ["[email protected]", "none"]; zlib -> ["zlib", "none"]; none -> ["none", "zlib"] end, @@ -855,13 +856,14 @@ decrypt(#ssh{decrypt = 'aes128-cbc', decrypt_keys = Key, IV = crypto:next_iv(aes_cbc, Data), {Ssh#ssh{decrypt_ctx = IV}, Dec}. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Compression %% -%% none REQUIRED no compression -%% zlib OPTIONAL ZLIB (LZ77) compression +%% none REQUIRED no compression +%% zlib OPTIONAL ZLIB (LZ77) compression +%% openssh_zlib OPTIONAL ZLIB (LZ77) compression %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + compress_init(SSH) -> compress_init(SSH, 1). @@ -870,19 +872,32 @@ compress_init(#ssh{compress = none} = Ssh, _) -> compress_init(#ssh{compress = zlib} = Ssh, Level) -> Zlib = zlib:open(), ok = zlib:deflateInit(Zlib, Level), + {ok, Ssh#ssh{compress_ctx = Zlib}}; +compress_init(#ssh{compress = '[email protected]'} = Ssh, Level) -> + Zlib = zlib:open(), + ok = zlib:deflateInit(Zlib, Level), {ok, Ssh#ssh{compress_ctx = Zlib}}. - compress_final(#ssh{compress = none} = Ssh) -> {ok, Ssh}; compress_final(#ssh{compress = zlib, compress_ctx = Context} = Ssh) -> zlib:close(Context), + {ok, Ssh#ssh{compress = none, compress_ctx = undefined}}; +compress_final(#ssh{compress = '[email protected]', authenticated = false} = Ssh) -> + {ok, Ssh}; +compress_final(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh) -> + zlib:close(Context), {ok, Ssh#ssh{compress = none, compress_ctx = undefined}}. compress(#ssh{compress = none} = Ssh, Data) -> {Ssh, Data}; compress(#ssh{compress = zlib, compress_ctx = Context} = Ssh, Data) -> Compressed = zlib:deflate(Context, Data, sync), + {Ssh, list_to_binary(Compressed)}; +compress(#ssh{compress = '[email protected]', authenticated = false} = Ssh, Data) -> + {Ssh, Data}; +compress(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh, Data) -> + Compressed = zlib:deflate(Context, Data, sync), {Ssh, list_to_binary(Compressed)}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -894,18 +909,32 @@ decompress_init(#ssh{decompress = none} = Ssh) -> decompress_init(#ssh{decompress = zlib} = Ssh) -> Zlib = zlib:open(), ok = zlib:inflateInit(Zlib), + {ok, Ssh#ssh{decompress_ctx = Zlib}}; +decompress_init(#ssh{decompress = '[email protected]'} = Ssh) -> + Zlib = zlib:open(), + ok = zlib:inflateInit(Zlib), {ok, Ssh#ssh{decompress_ctx = Zlib}}. decompress_final(#ssh{decompress = none} = Ssh) -> {ok, Ssh}; decompress_final(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh) -> zlib:close(Context), + {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}; +decompress_final(#ssh{decompress = '[email protected]', authenticated = false} = Ssh) -> + {ok, Ssh}; +decompress_final(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh) -> + zlib:close(Context), {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}. decompress(#ssh{decompress = none} = Ssh, Data) -> {Ssh, Data}; decompress(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh, Data) -> Decompressed = zlib:inflate(Context, Data), + {Ssh, list_to_binary(Decompressed)}; +decompress(#ssh{decompress = '[email protected]', authenticated = false} = Ssh, Data) -> + {Ssh, Data}; +decompress(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh, Data) -> + Decompressed = zlib:inflate(Context, Data), {Ssh, list_to_binary(Decompressed)}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl index 93029c5038..0aa60624bf 100644 --- a/lib/ssh/test/ssh_basic_SUITE.erl +++ b/lib/ssh/test/ssh_basic_SUITE.erl @@ -48,8 +48,8 @@ all() -> close]. groups() -> - [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]}, - {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]}, + [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]}, + {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]}, {dsa_pass_key, [], [pass_phrase]}, {rsa_pass_key, [], [pass_phrase]}, {internal_error, [], [internal_error]} @@ -493,7 +493,24 @@ close(Config) when is_list(Config) -> exit(CM, {shutdown, normal}), ok = ssh:close(CM). - + +openssh_zlib_basic_test() -> + [{doc, "Test basic connection with openssh_zlib"}]. +openssh_zlib_basic_test(Config) -> + SystemDir = filename:join(?config(priv_dir, Config), system), + UserDir = ?config(priv_dir, Config), + + {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir}, + {user_dir, UserDir}, + {failfun, fun ssh_test_lib:failfun/2}]), + ConnectionRef = + ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true}, + {user_dir, UserDir}, + {user_interaction, false}, + {compression, openssh_zlib}]), + ok = ssh:close(ConnectionRef), + ssh:stop_daemon(Pid). + %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml index 8875d07535..301ff21068 100644 --- a/lib/ssl/doc/src/notes.xml +++ b/lib/ssl/doc/src/notes.xml @@ -25,7 +25,6 @@ <file>notes.xml</file> </header> <p>This document describes the changes made to the SSL application.</p> - <section><title>SSL 5.3</title> <section><title>Fixed Bugs and Malfunctions</title> @@ -100,7 +99,6 @@ </section> <section><title>SSL 5.2.1</title> - <section><title>Improvements and New Features</title> <list> <item> @@ -126,9 +124,20 @@ </section> </section> - +<section><title>SSL 5.1.2.1</title> +<section><title>Improvements and New Features</title> +<list> + <item> + <p> + Make log_alert configurable as option in ssl, SSLLogLevel + added as option to inets conf file</p> + <p> + Own Id: OTP-11259</p> + </item> +</list> +</section> +</section> <section><title>SSL 5.2</title> - <section><title>Fixed Bugs and Malfunctions</title> <list> <item> diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl index 0c1e47311d..dc6898d001 100644 --- a/lib/ssl/src/ssl.erl +++ b/lib/ssl/src/ssl.erl @@ -219,4 +219,3 @@ format_error(Error) -> random_bytes(N) -> tls:random_bytes(N). - diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl index 14db4a6067..de8d20d399 100644 --- a/lib/ssl/src/ssl_internal.hrl +++ b/lib/ssl/src/ssl_internal.hrl @@ -111,7 +111,8 @@ %% This option should only be set to true by inet_tls_dist erl_dist = false, next_protocols_advertised = undefined, %% [binary()], - next_protocol_selector = undefined %% fun([binary()]) -> binary()) + next_protocol_selector = undefined, %% fun([binary()]) -> binary()) + log_alert }). -record(socket_options, diff --git a/lib/ssl/src/tls.erl b/lib/ssl/src/tls.erl index bb02695c12..b220a48f73 100644 --- a/lib/ssl/src/tls.erl +++ b/lib/ssl/src/tls.erl @@ -663,7 +663,8 @@ handle_options(Opts0, _Role) -> handle_option(next_protocols_advertised, Opts, undefined), next_protocol_selector = make_next_protocol_selector( - handle_option(client_preferred_next_protocols, Opts, undefined)) + handle_option(client_preferred_next_protocols, Opts, undefined)), + log_alert = handle_option(log_alert, Opts, true) }, CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}), @@ -675,7 +676,7 @@ handle_options(Opts0, _Role) -> reuse_session, reuse_sessions, ssl_imp, cb_info, renegotiate_at, secure_renegotiate, hibernate_after, erl_dist, next_protocols_advertised, - client_preferred_next_protocols], + client_preferred_next_protocols, log_alert], SockOpts = lists:foldl(fun(Key, PropList) -> proplists:delete(Key, PropList) @@ -840,6 +841,9 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro validate_option(client_preferred_next_protocols, undefined) -> undefined; +validate_option(log_alert, Value) when Value == true; + Value == false -> + Value; validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) -> case tls_record:highest_protocol_version([]) of {3,0} -> diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl index 246fecf34a..159ba406d3 100644 --- a/lib/ssl/src/tls_connection.erl +++ b/lib/ssl/src/tls_connection.erl @@ -89,7 +89,6 @@ cert_db_ref, % ref() bytes_to_read, % integer(), # bytes to read in passive mode user_data_buffer, % binary() - log_alert, % boolean() renegotiation, % {boolean(), From | internal | peer} start_or_recv_from, % "gen_fsm From" timer, % start_or_recv_timer @@ -978,7 +977,7 @@ handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protoc handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protocol = NextProtocol} = State) -> {reply, {ok, NextProtocol}, StateName, State, get_timeout(State)}; -handle_sync_event({set_opts, Opts0}, _From, StateName, +handle_sync_event({set_opts, Opts0}, _From, StateName0, #state{socket_options = Opts1, socket = Socket, transport_cb = Transport, @@ -987,11 +986,12 @@ handle_sync_event({set_opts, Opts0}, _From, StateName, State1 = State0#state{socket_options = Opts}, if Opts#socket_options.active =:= false -> - {reply, Reply, StateName, State1, get_timeout(State1)}; + {reply, Reply, StateName0, State1, get_timeout(State1)}; Buffer =:= <<>>, Opts1#socket_options.active =:= false -> %% Need data, set active once {Record, State2} = next_record_if_active(State1), - case next_state(StateName, StateName, Record, State2) of + %% Note: Renogotiation may cause StateName0 =/= StateName + case next_state(StateName0, StateName0, Record, State2) of {next_state, StateName, State, Timeout} -> {reply, Reply, StateName, State, Timeout}; {stop, Reason, State} -> @@ -999,13 +999,14 @@ handle_sync_event({set_opts, Opts0}, _From, StateName, end; Buffer =:= <<>> -> %% Active once already set - {reply, Reply, StateName, State1, get_timeout(State1)}; + {reply, Reply, StateName0, State1, get_timeout(State1)}; true -> case read_application_data(<<>>, State1) of Stop = {stop,_,_} -> Stop; {Record, State2} -> - case next_state(StateName, StateName, Record, State2) of + %% Note: Renogotiation may cause StateName0 =/= StateName + case next_state(StateName0, StateName0, Record, State2) of {next_state, StateName, State, Timeout} -> {reply, Reply, StateName, State, Timeout}; {stop, Reason, State} -> @@ -2458,7 +2459,7 @@ do_format_reply(list, _,_, Data) -> binary_to_list(Data). header(0, <<>>) -> - []; + <<>>; header(_, <<>>) -> []; header(0, Binary) -> @@ -2677,7 +2678,6 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User, tls_cipher_texts = [], user_application = {Monitor, User}, user_data_buffer = <<>>, - log_alert = true, session_cache_cb = SessionCacheCb, renegotiation = {false, first}, start_or_recv_from = undefined, @@ -2778,12 +2778,11 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State, _Timeout}) -> handle_alerts(Alerts, handle_alert(Alert, StateName, State)). handle_alert(#alert{level = ?FATAL} = Alert, StateName, - #state{socket = Socket, transport_cb = Transport, - start_or_recv_from = From, host = Host, + #state{socket = Socket, transport_cb = Transport, ssl_options = SslOpts, start_or_recv_from = From, host = Host, port = Port, session = Session, user_application = {_Mon, Pid}, - log_alert = Log, role = Role, socket_options = Opts} = State) -> + role = Role, socket_options = Opts} = State) -> invalidate_session(Role, Host, Port, Session), - log_alert(Log, StateName, Alert), + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), alert_user(Transport, Socket, StateName, Opts, Pid, From, Alert, Role), {stop, normal, State}; @@ -2793,21 +2792,21 @@ handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert, {stop, {shutdown, peer_close}, State}; handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName, - #state{log_alert = Log, renegotiation = {true, internal}} = State) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), handle_normal_shutdown(Alert, StateName, State), {stop, {shutdown, peer_close}, State}; handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName, - #state{log_alert = Log, renegotiation = {true, From}} = State0) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), gen_fsm:reply(From, {error, renegotiation_rejected}), {Record, State} = next_record(State0), next_state(StateName, connection, Record, State); handle_alert(#alert{level = ?WARNING, description = ?USER_CANCELED} = Alert, StateName, - #state{log_alert = Log} = State0) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts} = State0) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), {Record, State} = next_record(State0), next_state(StateName, StateName, Record, State). @@ -2845,7 +2844,7 @@ handle_own_alert(Alert, Version, StateName, #state{transport_cb = Transport, socket = Socket, connection_states = ConnectionStates, - log_alert = Log} = State) -> + ssl_options = SslOpts} = State) -> try %% Try to tell the other side {BinMsg, _} = encode_alert(Alert, Version, ConnectionStates), @@ -2855,7 +2854,7 @@ handle_own_alert(Alert, Version, StateName, ignore end, try %% Try to tell the local user - log_alert(Log, StateName, Alert), + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), handle_normal_shutdown(Alert,StateName, State) catch _:_ -> ok diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl index 36f7af784d..d50498f547 100644 --- a/lib/ssl/test/ssl_packet_SUITE.erl +++ b/lib/ssl/test/ssl_packet_SUITE.erl @@ -1631,8 +1631,8 @@ header_decode_one_byte_active(Config) when is_list(Config) -> {from, self()}, {mfa, {?MODULE, client_header_decode_active, [Data, [11 | <<"Hello world">> ]]}}, - {options, [{active, true}, {header, 1}, - binary | ClientOpts]}]), + {options, [{active, true}, binary, {header, 1} + | ClientOpts]}]), ssl_test_lib:check_result(Server, ok, Client, ok), @@ -1688,7 +1688,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) -> Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0}, {from, self()}, {mfa, {?MODULE, server_header_decode_active, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, true}, binary, {header,2}|ServerOpts]}]), @@ -1697,7 +1697,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) -> {host, Hostname}, {from, self()}, {mfa, {?MODULE, client_header_decode_active, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, true}, {header, 2}, binary | ClientOpts]}]), @@ -1765,8 +1765,8 @@ header_decode_one_byte_passive(Config) when is_list(Config) -> {from, self()}, {mfa, {?MODULE, client_header_decode_passive, [Data, [11 | <<"Hello world">> ]]}}, - {options, [{active, false}, {header, 1}, - binary | ClientOpts]}]), + {options, [{active, false}, binary, {header, 1} + | ClientOpts]}]), ssl_test_lib:check_result(Server, ok, Client, ok), @@ -1822,7 +1822,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) -> Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0}, {from, self()}, {mfa, {?MODULE, server_header_decode_passive, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, false}, binary, {header,2}|ServerOpts]}]), @@ -1831,7 +1831,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) -> {host, Hostname}, {from, self()}, {mfa, {?MODULE, client_header_decode_passive, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, false}, {header, 2}, binary | ClientOpts]}]), @@ -2124,10 +2124,14 @@ client_header_decode_passive(Socket, Packet, Result) -> %% option and the bitsynax makes it obsolete! check_header_result([Byte1 | _], [Byte1]) -> ok; +check_header_result([Byte1 | _], [Byte1| <<>>]) -> + ok; check_header_result([Byte1, Byte2 | _], [Byte1, Byte2]) -> ok; -check_header_result(_,Got) -> - exit({?LINE, Got}). +check_header_result([Byte1, Byte2 | _], [Byte1, Byte2 | <<>>]) -> + ok; +check_header_result(Expected,Got) -> + exit({?LINE, {Expected, Got}}). server_line_packet_decode(Socket, Packet) when is_binary(Packet) -> [L1, L2] = string:tokens(binary_to_list(Packet), "\n"), diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml index bd780b2b2f..d24d17be80 100644 --- a/lib/stdlib/doc/src/filelib.xml +++ b/lib/stdlib/doc/src/filelib.xml @@ -49,6 +49,12 @@ <datatype> <name name="dirname"/> </datatype> + <datatype> + <name name="dirname_all"/> + </datatype> + <datatype> + <name name="filename_all"/> + </datatype> </datatypes> <funcs> diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml index 3dac259477..68352ffeb1 100644 --- a/lib/stdlib/doc/src/io_lib.xml +++ b/lib/stdlib/doc/src/io_lib.xml @@ -54,6 +54,9 @@ <name name="fread_error"/> </datatype> <datatype> + <name name="fread_item"/> + </datatype> + <datatype> <name name="latin1_string"/> </datatype> </datatypes> diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl index 50812cc532..68b157c13c 100644 --- a/lib/stdlib/src/dets.erl +++ b/lib/stdlib/src/dets.erl @@ -951,10 +951,10 @@ do_trav(Proc, Acc, Fun) -> Error end. -do_trav(#dets_cont{bin = eof}, _Proc, Acc, _Fun) -> - Acc; do_trav(State, Proc, Acc, Fun) -> case req(Proc, {match_init, State, safe}) of + '$end_of_table'-> + Acc; {cont, {Bins, NewState}} -> do_trav_bins(NewState, Proc, Acc, Fun, lists:reverse(Bins)); Error -> diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 08b8541014..8f07750b9b 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -3219,7 +3219,8 @@ modify_line(T, F0) -> %% Forms. modify_line1({function,F,A}, _Mf) -> {function,F,A}; -modify_line1({function,M,F,A}, _Mf) -> {function,M,F,A}; +modify_line1({function,M,F,A}, Mf) -> + {function,modify_line1(M, Mf),modify_line1(F, Mf),modify_line1(A, Mf)}; modify_line1({attribute,L,record,{Name,Fields}}, Mf) -> {attribute,Mf(L),record,{Name,modify_line1(Fields, Mf)}}; modify_line1({attribute,L,spec,{Fun,Types}}, Mf) -> diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl index 42ef3679a2..9ef4954194 100644 --- a/lib/stdlib/src/filelib.erl +++ b/lib/stdlib/src/filelib.erl @@ -41,6 +41,9 @@ -type filename() :: file:name(). -type dirname() :: filename(). +-type filename_all() :: file:name_all(). +-type dirname_all() :: filename_all(). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec wildcard(Wildcard) -> [file:filename()] when @@ -62,29 +65,29 @@ wildcard(Pattern, Cwd, Mod) ?HANDLE_ERROR(do_wildcard(Pattern, Cwd, Mod)). -spec is_dir(Name) -> boolean() when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). is_dir(Dir) -> do_is_dir(Dir, file). --spec is_dir(file:name(), atom()) -> boolean(). +-spec is_dir(file:name_all(), atom()) -> boolean(). is_dir(Dir, Mod) when is_atom(Mod) -> do_is_dir(Dir, Mod). -spec is_file(Name) -> boolean() when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). is_file(File) -> do_is_file(File, file). --spec is_file(file:name(), atom()) -> boolean(). +-spec is_file(file:name_all(), atom()) -> boolean(). is_file(File, Mod) when is_atom(Mod) -> do_is_file(File, Mod). -spec is_regular(Name) -> boolean() when - Name :: filename(). + Name :: filename_all(). is_regular(File) -> do_is_regular(File, file). --spec is_regular(file:name(), atom()) -> boolean(). +-spec is_regular(file:name_all(), atom()) -> boolean(). is_regular(File, Mod) when is_atom(Mod) -> do_is_regular(File, Mod). @@ -103,16 +106,16 @@ fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod) when is_atom(Mod) -> do_fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod). -spec last_modified(Name) -> file:date_time() | 0 when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). last_modified(File) -> do_last_modified(File, file). --spec last_modified(file:name(), atom()) -> file:date_time() | 0. +-spec last_modified(file:name_all(), atom()) -> file:date_time() | 0. last_modified(File, Mod) when is_atom(Mod) -> do_last_modified(File, Mod). -spec file_size(Filename) -> non_neg_integer() when - Filename :: filename(). + Filename :: filename_all(). file_size(File) -> do_file_size(File, file). @@ -218,7 +221,7 @@ do_file_size(File, Mod) -> %% ensures that the directory name required to create D exists -spec ensure_dir(Name) -> 'ok' | {'error', Reason} when - Name :: filename() | dirname(), + Name :: filename_all() | dirname_all(), Reason :: file:posix(). ensure_dir("/") -> ok; diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl index b18d3dc0c0..7f65131f67 100644 --- a/lib/stdlib/src/gen_server.erl +++ b/lib/stdlib/src/gen_server.erl @@ -217,7 +217,7 @@ reply({To, Tag}, Reply) -> catch To ! {Tag, Reply}. %% ----------------------------------------------------------------- -%% Asyncronous broadcast, returns nothing, it's just send'n prey +%% Asynchronous broadcast, returns nothing, it's just send 'n' pray %%----------------------------------------------------------------- abcast(Name, Request) when is_atom(Name) -> do_abcast([node() | nodes()], Name, cast_msg(Request)). diff --git a/lib/stdlib/src/io.erl b/lib/stdlib/src/io.erl index 53728237ca..b11d41e2eb 100644 --- a/lib/stdlib/src/io.erl +++ b/lib/stdlib/src/io.erl @@ -40,7 +40,7 @@ %%------------------------------------------------------------------------- -type device() :: atom() | pid(). --type prompt() :: atom() | string(). +-type prompt() :: atom() | unicode:chardata(). %% ErrorDescription is whatever the I/O-server sends. -type server_no_data() :: {'error', ErrorDescription :: term()} | 'eof'. diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl index a9b6d4131e..92a086b077 100644 --- a/lib/stdlib/src/io_lib.erl +++ b/lib/stdlib/src/io_lib.erl @@ -83,7 +83,8 @@ -export([write_unicode_string/1, write_unicode_char/1, deep_unicode_char_list/1]). --export_type([chars/0, latin1_string/0, continuation/0, fread_error/0]). +-export_type([chars/0, latin1_string/0, continuation/0, + fread_error/0, fread_item/0]). %%---------------------------------------------------------------------- @@ -106,6 +107,8 @@ | 'string' | 'unsigned'. +-type fread_item() :: string() | atom() | integer() | float(). + %%---------------------------------------------------------------------- %% Interface calls to sub-modules. @@ -120,7 +123,7 @@ fwrite(Format, Args) -> -spec fread(Format, String) -> Result when Format :: string(), String :: string(), - Result :: {'ok', InputList :: [term()], LeftOverChars :: string()} + Result :: {'ok', InputList :: [fread_item()], LeftOverChars :: string()} | {'more', RestFormat :: string(), Nchars :: non_neg_integer(), InputStack :: chars()} @@ -135,7 +138,7 @@ fread(Chars, Format) -> Format :: string(), Return :: {'more', Continuation1 :: continuation()} | {'done', Result, LeftOverChars :: string()}, - Result :: {'ok', InputList :: [term()]} + Result :: {'ok', InputList :: [fread_item()]} | 'eof' | {'error', {'fread', What :: fread_error()}}. diff --git a/lib/stdlib/src/io_lib_fread.erl b/lib/stdlib/src/io_lib_fread.erl index 92a34995b8..491e1f40d7 100644 --- a/lib/stdlib/src/io_lib_fread.erl +++ b/lib/stdlib/src/io_lib_fread.erl @@ -41,9 +41,9 @@ Format :: string(), Return :: {'more', Continuation1 :: io_lib:continuation()} | {'done', Result, LeftOverChars :: string()}, - Result :: {'ok', InputList :: io_lib:chars()} + Result :: {'ok', InputList :: [io_lib:fread_item()]} | 'eof' - | {'error', {'read', What :: io_lib:fread_error()}}. + | {'error', {'fread', What :: io_lib:fread_error()}}. fread([], Chars, Format) -> %%io:format("FREAD: ~w `~s'~n", [Format,Chars]), @@ -101,11 +101,12 @@ fread_line(Format0, Line, N0, Results0, More, Newline) -> -spec fread(Format, String) -> Result when Format :: string(), String :: string(), - Result :: {'ok', InputList :: io_lib:chars(), LeftOverChars :: string()} + Result :: {'ok', InputList :: [io_lib:fread_item()], + LeftOverChars :: string()} | {'more', RestFormat :: string(), Nchars :: non_neg_integer(), InputStack :: io_lib:chars()} - | {'error', What :: term()}. + | {'error', {'fread', What :: io_lib:fread_error()}}. fread(Format, Line) -> fread(Format, Line, 0, []). diff --git a/lib/stdlib/test/dets_SUITE.erl b/lib/stdlib/test/dets_SUITE.erl index 8ff7c3ccc9..059d553b00 100644 --- a/lib/stdlib/test/dets_SUITE.erl +++ b/lib/stdlib/test/dets_SUITE.erl @@ -52,7 +52,7 @@ simultaneous_open/1, insert_new/1, repair_continuation/1, otp_5487/1, otp_6206/1, otp_6359/1, otp_4738/1, otp_7146/1, otp_8070/1, otp_8856/1, otp_8898/1, otp_8899/1, otp_8903/1, - otp_8923/1, otp_9282/1]). + otp_8923/1, otp_9282/1, otp_11245/1]). -export([dets_dirty_loop/0]). @@ -109,7 +109,7 @@ all() -> many_clients, otp_4906, otp_5402, simultaneous_open, insert_new, repair_continuation, otp_5487, otp_6206, otp_6359, otp_4738, otp_7146, otp_8070, otp_8856, otp_8898, - otp_8899, otp_8903, otp_8923, otp_9282 + otp_8899, otp_8903, otp_8923, otp_9282, otp_11245 ]. groups() -> @@ -3898,6 +3898,28 @@ some_calls(Tab, Config) -> file:delete(File). +otp_11245(doc) -> + ["OTP-11245. Tables remained fixed after traversal"]; +otp_11245(suite) -> + []; +otp_11245(Config) when is_list(Config) -> + Tab = otp_11245, + File = filename(Tab, Config), + {ok, Tab} = dets:open_file(Tab, [{file,File}]), + N = 1024, + ins(Tab, N), + N = length(dets:match(Tab, '_')), + false = dets:info(Tab, safe_fixed), + dets:traverse(Tab, fun(_) -> continue end), + false = dets:info(Tab, safe_fixed), + N = dets:foldl(fun(_, N2) -> N2+1 end, 0, Tab), + false = dets:info(Tab, safe_fixed), + N = dets:foldr(fun(_, N2) -> N2+1 end, 0, Tab), + false = dets:info(Tab, safe_fixed), + ok = dets:close(Tab), + file:delete(File), + ok. + %% %% Parts common to several test cases %% diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index f8345559c4..4dc7a44064 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -50,7 +50,7 @@ unsafe_vars_try/1, guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1, otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1, - otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, + otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1, export_all/1, bif_clash/1, behaviour_basic/1, behaviour_multiple/1, @@ -82,7 +82,7 @@ all() -> unsafe_vars, unsafe_vars2, unsafe_vars_try, guard, otp_4886, otp_4988, otp_5091, otp_5276, otp_5338, otp_5362, otp_5371, otp_7227, otp_5494, otp_5644, - otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, export_all, + otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, otp_11254,export_all, bif_clash, behaviour_basic, behaviour_multiple, otp_7550, otp_8051, format_warn, {group, on_load}, too_many_arguments, basic_errors, bin_syntax_errors]. @@ -2418,6 +2418,20 @@ otp_10436(Config) when is_list(Config) -> run_test2(Config, Ts2, []), ok. +otp_11254(doc) -> + "OTP-11254. Warnings for opaque types."; +otp_11254(suite) -> []; +otp_11254(Config) when is_list(Config) -> + Ts = <<"-module(p2). + -export([manifest/2]). + manifest(Module, Name) -> + fun Module:Nine/1. + ">>, + {error,[{4,erl_lint,{unbound_var,'Nine'}}], + [{3,erl_lint,{unused_var,'Name'}}]} = + run_test2(Config, Ts, []), + ok. + export_all(doc) -> "OTP-7392. Warning for export_all."; export_all(Config) when is_list(Config) -> diff --git a/lib/test_server/src/ts.erl b/lib/test_server/src/ts.erl index 4e5dc1b759..8e71c69d35 100644 --- a/lib/test_server/src/ts.erl +++ b/lib/test_server/src/ts.erl @@ -28,6 +28,7 @@ tests/0, tests/1, install/0, install/1, bench/0, bench/1, bench/2, benchmarks/0, + smoke_test/0, smoke_test/1,smoke_test/2, smoke_tests/0, estone/0, estone/1, cross_cover_analyse/1, compile_testcases/0, compile_testcases/1, @@ -174,6 +175,13 @@ help(installed) -> " ts:bench(Spec) - Runs all benchmarks in the given spec file.\n" " The spec file is actually ../*_test/Spec_bench.spec\n\n" " ts:bench can take the same Options argument as ts:run.\n" + "Smoke test functions:\n" + " ts:smoke_tests() - Get all available families of smoke tests\n" + " ts:smoke_test() - Runs all smoke tests\n" + " ts:smoke_test(Spec)\n" + " - Runs all smoke tests in the given spec file.\n" + " The spec file is actually ../*_test/Spec_smoke.spec\n\n" + " ts:smoke_test can take the same Options argument as ts:run.\n" "\n" "Installation (already done):\n" ], @@ -258,6 +266,7 @@ run(List, Opts) when is_list(List), is_list(Opts) -> %% Runs one test spec with Options run(Testspec, Config) when is_atom(Testspec), is_list(Config) -> Options=check_test_get_opts(Testspec, Config), + IsSmoke=proplists:get_value(smoke,Config), File=atom_to_list(Testspec), WhatToDo = case Testspec of @@ -293,6 +302,8 @@ run(Testspec, Config) when is_atom(Testspec), is_list(Config) -> case WhatToDo of skip -> create_skip_spec(Testspec, tests(Testspec)); + test when IsSmoke -> + File++"_smoke.spec"; test -> File++".spec" end, @@ -507,7 +518,22 @@ bench(Specs, Opts) -> benchmarks() -> ts_benchmark:benchmarks(). +smoke_test() -> + smoke_test([]). +smoke_test(Opts) when is_list(Opts) -> + smoke_test(smoke_tests(),Opts); +smoke_test(Spec) -> + smoke_test([Spec],[]). + +smoke_test(Spec, Opts) when is_atom(Spec) -> + smoke_test([Spec],Opts); +smoke_test(Specs, Opts) -> + run(Specs, [{smoke,true}|Opts]). + +smoke_tests() -> + {ok, Cwd} = file:get_cwd(), + ts_lib:specialized_specs(Cwd,"smoke"). %% %% estone/0, estone/1 diff --git a/lib/test_server/src/ts_benchmark.erl b/lib/test_server/src/ts_benchmark.erl index 516d22fd2d..bd6abc3372 100644 --- a/lib/test_server/src/ts_benchmark.erl +++ b/lib/test_server/src/ts_benchmark.erl @@ -30,12 +30,7 @@ benchmarks() -> {ok, Cwd} = file:get_cwd(), - Benches = filelib:wildcard( - filename:join([Cwd,"..","*_test","*_bench.spec"])), - [begin - Base = filename:basename(N), - list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1)) - end || N <- Benches]. + ts_lib:specialized_specs(Cwd,"bench"). run(Specs, Opts, Vars) -> {ok, Cwd} = file:get_cwd(), diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl index a00f607fc1..52bb346043 100644 --- a/lib/test_server/src/ts_lib.erl +++ b/lib/test_server/src/ts_lib.erl @@ -27,6 +27,7 @@ erlang_type/1, initial_capital/1, specs/1, suites/2, + specialized_specs/2, subst_file/3, subst/2, print_data/1, make_non_erlang/2, maybe_atom_to_list/1, progress/4, @@ -91,13 +92,22 @@ initial_capital([C|Rest]) when $a =< C, C =< $z -> initial_capital(String) -> String. +specialized_specs(Dir,PostFix) -> + Specs = filelib:wildcard(filename:join([filename:dirname(Dir), + "*_test", "*_"++PostFix++".spec"])), + sort_tests([begin + Base = filename:basename(Name), + list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1)) + end || Name <- Specs]). + specs(Dir) -> Specs = filelib:wildcard(filename:join([filename:dirname(Dir), "*_test", "*.{dyn,}spec"])), - % Filter away all spec which end with _bench.spec + % Filter away all spec which end with {_bench,_smoke}.spec NoBench = fun(SpecName) -> case lists:reverse(SpecName) of "ceps.hcneb_"++_ -> false; + "ceps.ekoms_"++_ -> false; _ -> true end end, diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el index f3bc95e3e5..3ecda1d285 100644 --- a/lib/tools/emacs/erlang.el +++ b/lib/tools/emacs/erlang.el @@ -2813,6 +2813,9 @@ Return nil if inside string, t if in a comment." (- (+ previous erlang-argument-indent) 1)))) (t (nth 2 stack-top)))) + ((= (following-char) ?,) + ;; a comma at the start of the line: line up with opening parenthesis. + (nth 2 stack-top)) (t (goto-char (nth 1 stack-top)) (let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)") diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented index 6c9343f6cb..7e61bcc45b 100644 --- a/lib/tools/emacs/test.erl.indented +++ b/lib/tools/emacs/test.erl.indented @@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{ field2 = Field1, field2 = Field2}}), {ok, SomeVariable}. + +commas_first() -> + {abc, [ {some_var, 1} + , {some_other_var, 2} + , {erlang_ftw, 9} + , {erlang_cookie, 'cookie'} + , {cmds, + [ {one, "sudo ls"} + , {one, "sudo ls"} + , {two, "sudo ls"} + , {three, "sudo ls"} + , {four, "sudo ls"} + , {three, "sudo ls"} + ] } + , {ssh_username, "yow"} + , {cluster, + [ {aaaa, [ {"10.198.55.12" , "" } + , {"10.198.55.13" , "" } + ] } + , {bbbb, [ {"10.198.55.151", "" } + , {"10.198.55.123", "" } + , {"10.198.55.34" , "" } + , {"10.198.55.85" , "" } + , {"10.198.55.67" , "" } + ] } + , {cccc, [ {"10.198.55.68" , "" } + , {"10.198.55.69" , "" } + ] } + ] } + ] + }. diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig index 0f8c4a9175..932758997d 100644 --- a/lib/tools/emacs/test.erl.orig +++ b/lib/tools/emacs/test.erl.orig @@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{ field2 = Field1, field2 = Field2}}), {ok, SomeVariable}. + +commas_first() -> + {abc, [ {some_var, 1} + , {some_other_var, 2} + , {erlang_ftw, 9} + , {erlang_cookie, 'cookie'} + , {cmds, + [ {one, "sudo ls"} + , {one, "sudo ls"} + , {two, "sudo ls"} + , {three, "sudo ls"} + , {four, "sudo ls"} + , {three, "sudo ls"} + ] } + , {ssh_username, "yow"} + , {cluster, + [ {aaaa, [ {"10.198.55.12" , "" } + , {"10.198.55.13" , "" } + ] } + , {bbbb, [ {"10.198.55.151", "" } + , {"10.198.55.123", "" } + , {"10.198.55.34" , "" } + , {"10.198.55.85" , "" } + , {"10.198.55.67" , "" } + ] } + , {cccc, [ {"10.198.55.68" , "" } + , {"10.198.55.69" , "" } + ] } + ] } +] +}. diff --git a/lib/xmerl/doc/src/xmerl_ug.xmlsrc b/lib/xmerl/doc/src/xmerl_ug.xmlsrc index 8a0805020e..10c770c400 100644 --- a/lib/xmerl/doc/src/xmerl_ug.xmlsrc +++ b/lib/xmerl/doc/src/xmerl_ug.xmlsrc @@ -409,9 +409,9 @@ Data = specification but the basic functionality. For all details see the <seealso marker="xmerl_xs">reference manual</seealso></p> <p>First, some words about the xmerl_xs functionality:</p> - <p>You need to wright template functions to be able to control + <p>You need to write template functions to be able to control what kind of output you want. Thus if you want to encapsulate a - <c>bike</c> element in <p> tags you simply wright a + <c>bike</c> element in <p> tags you simply write a function:</p> <pre> template(E = #xmlElement{name='bike'}) -> |